/ / PowerShell - Start-Process e Switch Cmdline - riga di comando, powershell, avvio-processo

PowerShell - Start-Process e Switch Cmdline - riga di comando, powershell, avvio-processo

Posso correre bene:

$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe"
start-process $msbuild -wait

Ma quando eseguo questo codice (sotto) ottengo un errore:

$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe /v:q /nologo"
start-process $msbuild -wait

C'è un modo in cui posso passare i parametri a MSBuild usando start-process? Sono aperto a non usare il processo di avvio, l'unica ragione per cui l'ho usato è stato che dovevo avere il "comando" come variabile.

Quando ho
C: WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe / v: q / nologo
su una linea di per sé, come viene gestito in PowerShell?

Dovrei usare qualche tipo di funzione eval () invece?

risposte:

97 per risposta № 1

hai intenzione di voler separare i tuoi argomenti in parametri separati

$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments

44 per risposta № 2

Utilizzando parametri espliciti, sarebbe:

$msbuild = "C:WINDOWSMicrosoft.NETFrameworkv3.5MSBuild.exe"
start-Process -FilePath $msbuild -ArgumentList "/v:q","/nologo"

MODIFICA: virgolette.


7 per risposta № 3

avvertimento

Se si esegue PowerShell da una finestra di cmd.exe creata da Powershell, la seconda istanza non attende più il completamento dei lavori.

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

Ora dalla nuova finestra di cmd, eseguire di nuovo PowerShell e al suo interno avviare una seconda finestra cmd: cmd2> PowerShell

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

La seconda istanza di PowerShell non rispetta più la richiesta -Wait e TUTTI i processi / processi in background restituiscono lo stato "Completato" anche se sono ancora in esecuzione!

L'ho scoperto quando è il mio programma C # Explorerusato per aprire una finestra cmd.exe e PS viene eseguito da quella finestra, ignora anche la richiesta -Attendi. Sembra che qualsiasi PowerShell che è un "lavoro win32" di cmd.exe non rispetti la richiesta di attesa.

Mi sono imbattuto in questo con PowerShell versione 3.0 su Windows 7 / x64


5 per risposta № 4

Ho trovato che usare cmd funziona bene come alternativa, specialmente quando è necessario reindirizzare l'output dall'applicazione chiamata (specialmente quando non ha incorporato la registrazione, diversamente da msbuild)

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


1 per risposta № 5

A meno che l'OP non usi la Comunità PowerShellEstensioni che forniscono un cmdlet Start-Process insieme ad altri. Se questo è il caso, la soluzione di Glennular funziona bene dato che corrisponde ai parametri posizionali del processo pscxstart: -path (posizione 1) -argomenti (posizione 2).