Pergunta

Eu posso correr esse bem:

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

Mas quando eu executar esse código (abaixo) eu recebo um erro:

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

Existe uma maneira que eu posso passar parâmetros para MSBuild usando start-processo? Estou aberto a não usar start-processo, a única razão que eu usei era que eu precisava para ter o "comando" como uma variável.

Quando tenho
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / v: q / nologo
em uma linha por si só, como é que se tratada de PowerShell?

Eu deveria estar usando algum tipo de eval () tipo de função em vez disso?

Foi útil?

Solução

você vai querer separar seus argumentos em parâmetro separado

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

Outras dicas

Usando parâmetros explícitos, seria:

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

EDIT:. Citações

Atenção

Se você executar PowerShell de uma janela cmd.exe criado por PowerShell, a 2ª instância espera há mais tempo para trabalhos para completar.

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

Agora, a partir da nova janela cmd, execute PowerShell novamente e dentro dele iniciar uma janela de 2 cmd: cmd2> PowerShell

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

O status 2ª instância PowerShell honras já não o pedido Espere e processo de fundo ALL / empregos voltar 'Concluído' tu mesmo que eles ainda estão em execução!

Eu descobri isso quando meu programa C # Explorer é usado para abrir uma janela cmd.exe e PS é executado a partir dessa janela, ele também ignora o pedido Espere. Parece que qualquer PowerShell que é um 'trabalho win32' do cmd.exe não honrar a solicitação de espera.

Eu corri para isso com PowerShell versão 3.0 no Windows 7 / x64

eu encontrei usando cmd funciona bem como uma alternativa, especialmente quando você precisa canalizar a saída do aplicativo chamado (espeically quando não têm construído em logging, ao contrário msbuild)

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

A menos que o OP está usando PowerShell Community Extensions que fornece um cmdlet Start-Process junto com um monte de outros. Se este o caso, então a solução da Glennular funciona um tratamento, uma vez que coincide com os parâmetros de posição de pscx \ start-processo:. -Caminho (posição 1) -arguments (positon 2)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top