verb stop start script run job command-line powershell start-process

command line - stop - PowerShell-Conmutadores de inicio y de línea de proceso



start-process powershell (5)

A menos que el OP esté usando PowerShell Community Extensions, que proporciona un cmdlet Start-Process junto con muchos otros. Si este es el caso, entonces la solución de Glennular funciona bien, ya que coincide con los parámetros posicionales de pscx / start-process: -path (position 1) -arguments (positon 2).

Puedo correr bien

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

Pero cuando ejecuto este código (a continuación) me aparece un error:

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

¿Hay alguna manera de pasar los parámetros a MSBuild usando el proceso de inicio? Estoy abierto a no usar el proceso de inicio, la única razón por la que lo usé fue que necesitaba tener el "comando" como variable.

Cuando tengo
C: / WINDOWS / Microsoft.NET / Framework / v3.5 / MSBuild.exe / v: q / nologo
en línea por sí mismo, ¿cómo se maneja eso en Powershell?

¿Debería usar algún tipo de función de evaluación () en su lugar?


Advertencia

Si ejecuta PowerShell desde una ventana de cmd.exe creada por Powershell, la segunda instancia ya no espera a que se completen los trabajos.

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

Ahora, desde la nueva ventana de cmd, ejecute PowerShell nuevamente y dentro de él inicie una segunda ventana de cmd: cmd2> PowerShell

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

La segunda instancia de PowerShell ya no respeta la solicitud de espera y TODOS los procesos / trabajos en segundo plano devuelven el estado ''Completado'' incluso si todavía están en ejecución.

Descubrí esto cuando mi programa C # Explorer se usa para abrir una ventana de cmd.exe y la PS se ejecuta desde esa ventana, también ignora la solicitud de espera. Parece que cualquier PowerShell que sea un ''trabajo win32'' de cmd.exe no cumple con la solicitud de espera.

Me encontré con esto con la versión 3.0 de PowerShell en Windows 7 / x64


He encontrado que usar cmd funciona bien como alternativa, especialmente cuando necesita canalizar la salida de la aplicación llamada (especialmente cuando no tiene incorporado el registro, a diferencia de msbuild)

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


Usando parámetros explícitos, sería:

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

EDITAR: citas.


vas a querer separar tus argumentos en parámetros separados

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