Puedo ejecutar esto bien:
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
start-process $msbuild -wait
Pero cuando ejecuto este código (a continuación), aparece un error:
$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo"
start-process $msbuild -wait
¿Hay alguna forma de pasar parámetros a MSBuild usando start-process? Estoy abierto a no usar start-process, 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 una línea por sí solo, ¿cómo se maneja eso en Powershell?
¿Debería usar algún tipo de función eval () en su lugar?
command-line
powershell
start-process
BuddyJoe
fuente
fuente
Respuestas:
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
fuente
$args
como un nombre de variable no funciona, está reservado. Use$arguments
o cualquier otra cosa en su lugar-ArgumentList
está buscando una cadena, por lo que el ejemplo en otra respuesta con cadenas separadas por comas (técnicamente una matriz) puede funcionar debido a cómo PowerShell lo desenrolla potencialmente, pero si lo está Si busca pasar una lista de argumentos desde una matriz, probablemente sea mejor "descomprimirla" en una cadena de antemano.get-help start-process
indica que -ArgumentList esperaString[]
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: comillas.
fuente
-ArgumentList ('/v:q','/nologo')
git gui &
- ¡Qué simple es eso (* nix por supuesto)! Comparado constart-Process git -ArgumentList gui
. Lo sé, lo sé, no es útil. He estado jugando con Powershell un poco últimamente y muchas cosas buenas; ¡Pero la verbosidad es un asesino!sajb { git gui }
Advertencia
Si ejecuta PowerShell desde una ventana 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 ella 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 -Wait y TODOS los procesos / trabajos en segundo plano devuelven el estado 'Completado' incluso si todavía se están ejecutando.
Descubrí esto cuando mi programa C # Explorer se usa para abrir una ventana cmd.exe y PS se ejecuta desde esa ventana, también ignora la solicitud -Wait. Parece que cualquier PowerShell que sea un 'trabajo win32' de cmd.exe no cumple con la solicitud de espera.
Me encontré con esto con PowerShell versión 3.0 en Windows 7 / x64
fuente
Descubrí que usar cmd funciona bien como una alternativa, especialmente cuando necesita canalizar la salida de la aplicación llamada (especialmente cuando no tiene un registro integrado, a diferencia de msbuild)
cmd /C "$msbuild $args" >> $outputfile
fuente
A menos que el OP esté utilizando 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 muy bien, ya que coincide con los parámetros posicionales de pscx \ start-process: -path (position 1) -arguments (positon 2).
fuente