Executando 'Start-Process' remotamente: Como exibir a saída padrão?

4

Eu tenho um script do PowerShell para instalar software em computadores remotos.

Até hoje, tenho usado com sucesso o seguinte código:

$prog = "ping"
$arg = "localhost"
$computername = "MACHINE01"
invoke-command -computername $computername {param($p,$a)& $p $a} -ArgumentList $prog,$arg

Agora preciso instalar um MSI, por exemplo. 'msiexec / i c: \ arquivo.msi / passivo'.

Não consigo fazer com que o MSIEXEC trate tudo depois de 'MSIEXEC' como parâmetros. Em vez disso, o PowerShell apenas tenta executá-lo como um grande comando. Eu já experimentei várias coisas, principalmente envolvendo o posicionamento de citações literais, mas não consigo fazer isso funcionar.

Agora abandonei o operador de chamada (&) em favor de 'Start-Process' que possui um parâmetro '-ArgumentList'. O MSI agora é executado corretamente. Ótimo!

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait -redirectstandardoutput c:\output.txt; get-content c:\output.txt} -ArgumentList $prog,$arg

O problema com 'Start-Process' é que ele não produz qualquer saída do console quando executado remotamente usando 'Invoke-Command'. Eu tive que recorrer a redirecionar a saída para um arquivo e depois ler o arquivo. Existe uma maneira melhor?

    
por Fitzroy 03.01.2013 / 21:01

1 resposta

0

Eu tentaria canalizá-lo para o cmdlet tee-object e, em seguida, salvaria seu arquivo se necessário (não sei se o envio da saída do arquivo para $ null funcionaria, muito ruim isso não é linux e poderíamos enviar para / dev / null, mas eu discordo)

Este é o link do cmdlet do objeto tee

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file c:\output.txt} -ArgumentList $prog,$arg

esse código não testado , mas geralmente é o que você deseja.

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file $null} -ArgumentList $prog,$arg

pode funcionar também.

    
por 23.01.2013 / 05:17