web-dev-qa-db-fra.com

Exécuter un script Powershell avec des paramètres

Donc, j'ai un script PowerShell qui est supposé exécuter un exécutable avec un argument à passer pour définir la méthode que je veux exécuter et j'ai besoin de passer un paramètre, qui est un répertoire dans un fichier de configuration. C'est donc ce que j'ai

Start-Process -FilePath "C:\Program Files\MSBuild\test.exe" -ArgumentList /genmsi/f $MySourceDirectory\src\Deployment\Installations.xml

/ f est le nom court et le fichier est le nom long de mon attribut ... Une erreur de PowerShell m'indique qu'un paramètre de position est introuvable pour/f ou/fichier.

Des pensées?

42
Nerd in Training

J'ai réussi à faire fonctionner cela en utilisant l'applet de commande Invoke-Expression.

Invoke-Expression "& `"$scriptPath`" test -r $number -b $testNumber -f $FileVersion -a $ApplicationID"
25
Nerd in Training

Essayez de citer la liste d'arguments:

Start-Process -FilePath "C:\Program Files\MSBuild\test.exe" -ArgumentList "/genmsi/f $MySourceDirectory\src\Deployment\Installations.xml"

Vous pouvez également fournir la liste des arguments sous forme de tableau (arguments séparés par des virgules), mais l'utilisation d'une chaîne est généralement plus simple.

49
Keith Hill

Voici une méthode alternative pour faire plusieurs arguments. Je l'utilise quand les arguments sont trop longs pour une ligne.

$app = 'C:\Program Files\MSBuild\test.exe'
$arg1 = '/genmsi'
$arg2 = '/f'
$arg3 = '$MySourceDirectory\src\Deployment\Installations.xml'

& $app $arg1 $arg2 $arg3
26
Knuckle-Dragger

Ajoutons juste un exemple qui a bien fonctionné pour moi:

$sqldb = [string]($sqldir) + '\bin\MySQLInstanceConfig.exe'
$myarg = '-i ConnectionUsage=DSS Port=3311 ServiceName=MySQL RootPassword= ' + $rootpw
Start-Process $sqldb -ArgumentList $myarg
5
Sergio Di Fiore