Установка 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

Другие вопросы по тегам