Question

Je peux courir très bien:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
start-process $msbuild -wait

Mais lorsque je lance ce code (ci-dessous), un message d'erreur s'affiche:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo" 
start-process $msbuild -wait

Existe-t-il un moyen de transmettre des paramètres à MSBuild à l'aide de start-process? Je suis disposé à ne pas utiliser start-process, la seule raison pour laquelle je l'ai utilisé était la nécessité de disposer de la commande " commande " en tant que variable.

Quand j'ai
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / v: q / nologo
comment cela est-il traité dans Powershell?

Devrais-je utiliser une sorte de fonction eval () à la place?

Était-ce utile?

La solution

vous allez vouloir séparer vos arguments en paramètre séparé

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments 

Autres conseils

En utilisant des paramètres explicites, ce serait:

$msbuild = 'C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe'
start-Process -FilePath $msbuild -ArgumentList '/v:q','/nologo'

EDIT: citations.

Avertissement

Si vous exécutez PowerShell à partir d'une fenêtre cmd.exe créée par Powershell, la deuxiè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, exécutez PowerShell à nouveau et ouvrez une deuxième fenêtre cmd: cmd2 > PowerShell

PS> Start-Process cmd.exe -Wait
PS>   

La deuxième instance de PowerShell n'honore plus l'état "Terminé" de la demande -Attente et de TOUS les processus / travaux d'arrière-plan même s'ils sont toujours en cours d'exécution!

J'ai découvert cela lorsque mon programme C # Explorer est utilisé pour ouvrir une fenêtre cmd.exe et que PS est exécuté à partir de cette fenêtre. Il ignore également la demande -Wait. Il semble que tout PowerShell qui est un "travail win32" de cmd.exe n'honore pas la demande d'attente.

J'ai rencontré ce problème avec PowerShell version 3.0 sous Windows 7 / x64

J'ai trouvé que l'utilisation de cmd fonctionnait bien en tant qu'alternative, en particulier lorsque vous deviez canaliser la sortie de l'application appelée (en particulier lorsque la journalisation n'est pas intégrée, contrairement à msbuild)

cmd / C " $ msbuild $ args " > > $ outputfile

Sauf si l'OP utilise PowerShell Community Extensions, qui fournit une cmdlet Start-Process ainsi que de nombreuses autres. Si tel est le cas, la solution de Glennular fonctionne bien car elle correspond aux paramètres de position de pscx \ start-process: -path (position 1) -arguments (position 2).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top