У меня есть скрипт 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». Мне пришлось прибегнуть к перенаправлению вывода в файл, а затем прочитать файл. Есть ли способ лучше?