Установка MSP с использованием Powershell работает на локальном компьютере, происходит сбой удаленно. Зачем?
Мне нужен совет Powershell.
Мне нужно установить файл обновления MSP приложения на нескольких серверах Win08r2. Если я запускаю эти команды локально, в окне PS целевой машины, он делает именно то, что мне нужно:
$command = 'msiexec.exe /p "c:\test\My Application Update 01.msp" REBOOTPROMPT=S /qb!'
invoke-wmimethod -path win32_process -name create -argumentlist $command
Выполняемый файл находится на целевой машине
Если я удаленно подключаюсь к машине и выполняю две команды, он открывает два процесса x64 msiexec.exe и один процесс msiexec.exe *32 и просто сидит там.
Если я перезагружаю сервер, это не показывает, что обновление было установлено, поэтому я не думаю, что это проблема времени.
Я попытался создать и удаленно выполнить файл PS1 с двумя строками, но это, кажется, делает то же самое.
Если у кого-нибудь есть совет по удаленной установке моего обновления MSP, я буду очень внимателен.
Я думаю, что я включил всю имеющуюся у меня информацию, но если чего-то не хватает, пожалуйста, задавайте вопросы, и я заполню все пробелы.
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++
Мой процесс для этого:
- Прочитайте CSV для имени сервера и пароля администратора
- Создать учетные данные с паролем
- Создайте новый сеанс, используя имя компьютера и учетные данные
- Создайте временную папку для хранения моего файла обновления MSP
- Вызов файла PS1, который загружает файл обновления на целевой сервер
- >>> Создает новый объект System.Net.WebClient
- >>> Использует этот объект веб-клиента для загрузки из источника в расположение на целевом сервере
- Вызовите другой файл PS1, который применяет только что загруженный патч - >> Вот здесь у меня проблемы.
- >>> Установите переменную, показанную выше
- >>> Выполнить файл, указанный в переменной
- Закройте сеанс на целевом сервере
- Перейти к следующему серверу в CSV...
Если я открываю окно PS и вручную устанавливаю переменную, а затем выполняю ее (как показано выше в двух строках кода), она работает нормально. Если я создаю файл PS1 на целевом сервере, содержащий те же две строки кода, то щелкните правой кнопкой мыши> "Выполнить с помощью PowerShell", и он будет работать как положено / желательно. Если я удаленно выполняю свой код в PowerGUI, он возвращает блок текста, который выглядит следующим образом, а затем просто сидит там. RDP в сервер, установщик никогда не запускается. Мое понимание значения "Возвращаемое значение" заключается в том, что "0" означает, что команда была успешной.
PSComputerName: xx.xx.xx.xx
RunspaceId: bf6f4a39-2338-4996-b75b-bjf5ef01ecaa
PSShowComputerName: True
__GENUS: 2
__CLASS: __PARAMETERS
__SUPERCLASS:
__DYNASTY: __PARAMETERS
__RELPATH:
__PROPERTY_COUNT: 2
__DERIVATION: {}
__SERVER:
__NAMESPACE:
__ДОРОЖКА:
ProcessId: 4808
ReturnValue: 0
Я даже добавил строку кода между переменной и исполнением, которое создает текстовый файл на рабочем столе, просто чтобы убедиться, что я попал в свой файл executeFile, и этот текстовый файл действительно создается. Кажется, он просто не выполняет удаленно мой MSP.
Спасибо заранее за помощь!
Catt11.
2 ответа
Вот стратегия, которую я использовал для встраивания msp в скрипт powershell. Это прекрасно работает для меня.
$file = "z:\software\AcrobatUpdate.msp"
$silentArgs = "/passive"
$additionalInstallArgs = ""
Write-Debug "Running msiexec.exe /update $file $silentArgs"
$msiArgs = "/update `"$file`""
$msiArgs = "$msiArgs $silentArgs $additionalInstallArgs"
Start-Process -FilePath msiexec -ArgumentList $msiArgs -Wait
Вам, вероятно, не нужно использовать переменные, если вы не хотите, вы можете жестко закодировать значения. Я настроил эту функцию как функцию, которой я передаю эти аргументы, но если это скорее единичная сделка, может быть проще жестко закодировать значения.
Надеюсь, это поможет!
Использование Start-Process для пакета MSP не является хорошей практикой, потому что некоторые пакеты обновлений блокируют пакеты PowerShell, поэтому вы должны использовать вызов WMI