Frage

Ich kann das gut laufen:

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

Aber wenn ich diesen Code ausführen (siehe unten) Ich erhalte eine Fehlermeldung:

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

Gibt es eine Möglichkeit, ich Parameter zu MSBuild mit Start-Prozess passieren kann? Ich bin offen für nicht-Startprozess, der einzige Grund, warum ich benutzen es, war ich brauchte den „Befehl“ als eine Variable haben.

Wenn ich
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / v: q / nologo
auf einer Linie von selbst, wie geht das in Powershell erhalten behandelt?

Soll ich eine Art von eval () Art der Funktion stattdessen verwenden?

War es hilfreich?

Lösung

Sie gehen zu wollen, um Ihre Argumente in einzelne Parameter trennen

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

Andere Tipps

expliziten Parameter verwenden, wäre es:

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

EDIT:. Anführungszeichen

Warnung

Wenn Sie Powershell aus einem cmd.exe Fenster von Powershell, die zweite Instanz nicht mehr wartet auf Arbeitsplätze geschaffen laufen abzuschließen.

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

Und von den neuen cmd Fenstern, führen Sie Powershell wieder und in ihm ein zweites cmd Fenster starten: cmd2> Powershell

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

Die zweite Instanz von Powershell nicht ehrt mehr die -Wait Anfrage und alle Hintergrundprozesse / Arbeitsplätze return ‚Abgeschlossen‘ Status auch du sie laufen noch!

ich dies entdeckt, als mein C # Explorer-Programm verwendet wird, ein cmd.exe-Fenster zu öffnen und PS wird aus diesem Fenster ausgeführt, es ignoriert auch die -Wait Anfrage. Es scheint, dass jede Powershell, die ein ‚win32 Job‘ von cmd.exe ist nicht die Warteanforderung zu ehren.

Ich lief in diesen mit Powershell Version 3.0 unter Windows 7 / x64

Ich habe cmd gefunden Verwendung funktioniert gut als Alternative, vor allem, wenn Sie mit dem Rohr müssen die Ausgabe von der aufgerufenen Anwendung (espeically, wenn sie nicht über in Protokollierung gebaut, im Gegensatz zu msbuild)

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

Wenn der OP wird mit Powershell Community-Erweiterungen, die einen Cmdlets Startvorgang nicht bieten zusammen mit einer Reihe von anderen. Wenn dies der Fall ist, dann Glennular Lösung eine Behandlung funktioniert, da es die Positionsparameter von pscx entspricht \ Start-Prozess. -Pfad (Position 1) -Argumente (positon 2)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top