Nous utilisons Nant largement pour notre système de construction. Récemment, j'ai écrit un couple PowerShell CMDlets pour effectuer quelques choses liées à la base de données. Au début, l'intention de ces cmdlets était Ces cmdlets sont écrits en C # et nous avons un snapin pour eux (si cela compte du tout). P>
Quelques idées: P>
Qu'est-ce qui pourrait être un bon moyen de faire cela? p>
4 Réponses :
Vous pouvez certainement utiliser la tâche Exec, définir l'attribut de programme à PowerShell.exe et en passant dans la ligne de commande quelque chose comme "-Command {}". P>
Alternativement, vous pouvez créer une tâche Nant personnalisée qui utilise à l'interne l'API d'hébergement PowerShell pour exécuter vos cmdlets ou vos scripts. Il y a un exemple simple de ceci (à l'aide des API PS V1) ici . p>
Vous pouvez utiliser la tâche ci-dessous dans votre script nant pour appeler vos cmdlets PS.
<exec program="powershell" workingdir="${BuildManagementDir}" verbose="true"> <arg value="-noprofile"/> <arg value="-nologo"/> <arg value="-noninteractive"/> <arg value="-command"/> <arg value=".\xyz.ps1"/> </exec>
Basé sur la réponse de Jibe, c'est l'inverse, voici la solution de travail. Lorsque vous utilisez PowerShell qui prend des arguments, vous devez exécuter le script PowerShell puis les arguments.
<property name="Value1" value="some_Value1" /> <property name="Value2" value="some_Value2" /> <exec program="powershell" workingdir="${powershell_dir}" verbose="true"> <arg value=".\yourscript.ps1"/> <arg value="${value1}"/> <arg value="${value2}"/> </exec>
Le meilleur moyen est d'utiliser des méthodes similaires, car on utiliserait dans le planificateur de tâches. Cela signifie exécuter Par exemple: P> PowerShell code> avec l'argument code> -Command code> et commencez la commande avec
& code>.
<exec program="powershell" workingdir="${ifscriptrequires}" verbose="true">
<arg line="-Command" />
<arg line="$amp; C:\scripts\somescript.ps1 -SwitchParam -someargument 'somevalue' 'somepositionalparameter'" />
</exec>
Pourriez-vous s'il vous plaît clarifier votre utilisation de l'ampersand? Sans explication, votre réponse a l'air à peu près la même chose que Réponse de VJ m's ?
L'ampersand est l'opérateur d'appel à PowerShell. Ce qui suit est à partir de la sortie de commande 'get-help to_opérators' sous Opérateurs spéciaux: '& Call Operateur exécute une commande, un script ou un bloc de script. L'opérateur d'appel, également appelé "Opérateur d'invocation", vous permet d'exécuter des commandes stockées dans des variables et représentées par des chaînes. Étant donné que l'opérateur d'appel n'est pas analysé la commande, il ne peut pas interpréter les paramètres de commande. '
Pour préciser davantage, dans mon expérience, il ne comprend pas que des arguments puissent être traités par PowerShell.exe au lieu du script ou simplement perdu en général.