Commutateurs PowerShell - Start-Process et Cmdline
je peux exécuter cette amende:
$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe"
start-process $msbuild -wait
mais quand j'exécute ce code (ci-dessous) j'obtiens une erreur:
$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe /v:q /nologo"
start-process $msbuild -wait
y a-t-il un moyen de passer des paramètres à MSBuild en utilisant start-process? Je suis ouvert à ne pas utiliser start-process, la seule raison pour laquelle je l'ai utilisé était que j'avais besoin de la "commande" comme variable.
quand j'ai
C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe /v:Q / nologo
sur une ligne à elle seule, comment est-ce que ça se gère à Powershell?
devrais-je utiliser une sorte de fonction eval() à la place?
5 réponses
vous allez vouloir séparer vos arguments en paramètre individuel
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments
en utilisant des paramètres explicites, il serait:
$msbuild = 'C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe'
start-Process -FilePath $msbuild -ArgumentList '/v:q','/nologo'
EDIT: quotes.
avertissement
si vous exécutez PowerShell à partir d'un cmd.fenêtre exe créée par Powershell, la 2ème instance n'attend plus que les travaux soient terminés.
cmd> PowerShell
PS> Start-Process cmd.exe -Wait
à partir de la nouvelle fenêtre cmd, Lancez PowerShell à nouveau et démarrez une deuxième fenêtre cmd: cmd2 > PowerShell
PS> Start-Process cmd.exe -Wait
PS>
la deuxième instance de PowerShell n'honore plus la demande D'attente et tous les processus de fond / emplois de retour 'achevé' statut même thou ils sont toujours en cours !
j'ai découvert cela quand mon programme C# Explorer est utilisé pour ouvrir un cmd.la fenêtre exe et PS sont lancées à partir de cette fenêtre, elle ignore également la requête-Wait. Il semble que toute PowerShell qui est un "win32 job" de cmd.l'exe n'honore pas la demande d'attente.
J'ai rencontré ça avec PowerShell version 3.0 sur windows 7 /x64
j'ai trouvé l'utilisation de cmd fonctionne bien comme une alternative, surtout quand vous avez besoin de pipe la sortie de l'application appelée (surtout quand il n'a pas construit dans la journalisation, contrairement à msbuild)
cmd /C "$msbuild $args" >> $outputfile
sauf si L'OP utilise des Extensions de communauté PowerShell qui fournissent un cmdlet de démarrage-processus avec un tas d'autres. Si C'est le cas, la solution de Glennular fonctionne un treat puisqu'elle correspond aux paramètres de position de pscx\start-process : -path (position 1) -arguments (positon 2).