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?

60
demandé sur BuddyJoe 2009-03-16 19:46:16

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 
100
répondu Glennular 2012-12-07 19:03:00

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.

45
répondu EBGreen 2016-04-26 18:08:04

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

6
répondu LanDenLabs 2013-01-08 19:04:06

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

5
répondu midspace 2017-01-31 20:39:14

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).

1
répondu Keith Hill 2009-03-22 06:17:52