Existe um bug no Start-Process
comando do PowerShell ao acessar as propriedades StandardError
e StandardOutput
?
Se eu executar o seguinte, não obtenho saída:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError
Mas se eu redirecionar a saída para um arquivo, obtenho o resultado esperado:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
powershell
start-process
jzbruno
fonte
fonte
$process= ping localhost
# salvaria a saída na variável de processo.Respostas:
É assim que
Start-Process
foi projetado por algum motivo. Esta é uma maneira de obtê-lo sem enviar para o arquivo:fonte
No código fornecido na pergunta, acho que a leitura da propriedade ExitCode da variável de inicialização deve funcionar.
Observe que (como no seu exemplo) você precisa adicionar os parâmetros
-PassThru
e-Wait
(isso me surpreendeu por um tempo).fonte
-NoNewWindow
com-Verb runAs
Eu também tive esse problema e acabei usando o código de Andy para criar uma função para limpar as coisas quando vários comandos precisam ser executados.
Ele retornará stderr, stdout e códigos de saída como objetos. Uma coisa a se notar: a função não aceita
.\
no caminho; caminhos completos devem ser usados.Veja como usá-lo:
fonte
IMPORTANTE:
Temos usado a função fornecida acima pelo LPG .
No entanto, isso contém um bug que você pode encontrar ao iniciar um processo que gera muita saída. Devido a isso, você pode acabar com um deadlock ao usar esta função. Em vez disso, use a versão adaptada abaixo:
Mais informações sobre esse problema podem ser encontradas no MSDN :
fonte
Eu realmente tive problemas com esses exemplos de Andy Arismendi e do LPG . Você deve sempre usar:
antes de ligar
Um exemplo completo é:
fonte
Aqui está minha versão de função que está retornando System.Diagnostics.Process padrão com 3 novas propriedades
fonte
Esta é uma maneira complicada de obter a saída de outro processo do PowerShell:
fonte