Удаленный запуск «Start-Process»: как отобразить стандартный вывод?

Удаленный запуск «Start-Process»: как отобразить стандартный вывод?

У меня есть скрипт PowerShell для установки программного обеспечения на удаленные компьютеры.

На сегодняшний день я успешно использую следующий код:

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

Теперь мне нужно установить MSI, например, «msiexec /ic:\file.msi /passive».

Я не могу заставить MSIEXEC обрабатывать все после 'MSIEXEC' как параметры. Вместо этого PowerShell просто пытается выполнить это как одну большую команду. Я пробовал множество вещей, в основном связанных с размещением буквальных кавычек, но не могу заставить это работать.

Теперь я отказался от оператора вызова (&) в пользу 'Start-Process', который имеет параметр '-ArgumentList'. Теперь MSI выполняется правильно. Отлично!

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

Проблема с 'Start-Process' в том, что он не выводит никаких консольных данных при удаленном запуске с помощью 'Invoke-Command'. Мне пришлось прибегнуть к перенаправлению вывода в файл и последующему чтению файла. Есть ли лучший способ?

решение1

Я бы попробовал передать его командлету tee-object, а затем сохранить файл там, если это необходимо (не знаю, сработает ли отправка выходных данных файла в $null, жаль, что это не Linux, и мы могли бы отправить его в /dev/null, но я отвлекся)

Это командлет tee-objecthttp://technet.microsoft.com/en-us/library/ee177014.aspx

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

это непроверенный код, но это то, чего обычно и хочется.

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

может также сработать.

Связанный контент