Powershell Start-Process msiexec на удаленной машине не работает

По какой-то причине Start-Process msiexec не будет работать при выполнении команды вызова на удаленной машине. Я посмотрел его, и хотя некоторые люди рекомендуют использовать psiexec, я видел много людей, использующих старую простую команду вызова для запуска установщиков msi на удаленных машинах.

Это код, который я сейчас использую:

$session = New-PSSession -computername $computerName -ea stop

$command = {

    Param(
    [Parameter()]
    [string]$computerName,

    [Parameter()]
    [string]$domain,

    [Parameter()]
    [string]$user,

    [Parameter()]
    [string]$password,

    [Parameter()]
    [string]$installDir
    )

    $msiArgumentList = "/i C:\Installer.msi /l c:\log.txt /quiet /qr /norestart IAGREE=Yes DOMAIN=$domain ACCOUNT=$user PASSWORD=$password PASSWORDCONFIRM=$password INSTALLDIR=$installDir"

        Start-Process msiexec -ArgumentList $msiArgumentList -Wait

}

Invoke-Command -session $session -ScriptBlock $command -ArgumentList $computerName, $domain, $user, $password, $installDir

Remove-PSsession -session $session

Я использовал тот же метод для удаленной установки служб с помощью intallutil, и это сработало. Сценарии включены на целевой машине, а также удаленное взаимодействие, поэтому для всех учетных записей это должно работать. Оба компьютера имеют одинаковые учетные данные, но я все же попытался добавить учетные данные как в команду вызова, так и в pssession. Я протестировал код локально, и установка сработала. Удаленно это не так, и никаких ошибок нет. я вижу на целевой машине в диспетчере задач, что msiexec запущен, но ничего не происходит. Я даже пытался отключить брандмауэр и все равно ничего. я попробовал оператор &, чтобы запустить msiexec, и все равно ничего.

Не уверен, что еще я мог бы попробовать.


person user1752736    schedule 10.09.2013    source источник
comment
Можете ли вы попытаться зарегистрировать ошибку, если она генерирует ошибку для запуска процесса, используя -RedirectStandardError myError.txt   -  person Mitul    schedule 10.09.2013
comment
файл к сожалению пуст :|   -  person user1752736    schedule 10.09.2013
comment
Вы видите, правильно ли переданы параметры? Может попробовать записать их в txt файл.   -  person Mitul    schedule 10.09.2013
comment
Ага. я проверил их. и если я запускаю процесс запуска локально, установка выполняется правильно.   -  person user1752736    schedule 10.09.2013


Ответы (5)


Может быть, вы попробуете другой путь, если вы не выйдете вперед? Используйте планировщик задач, чтобы запустить командную строку, например, создав и выполнив задачу на удаленном компьютере:

SchTasks /CREATE /XML mycommand.xml /TN "thiscommand"
SchTasks /RUN /TN "thiscommand"

Это для запуска задачи (вроде) на локальном компьютере. С параметром /S вы можете создавать задачи на удаленных компьютерах, например:

SchTasks /S thatPC /CREATE /XML mycommand.xml /TN "thiscommand"
SchTasks /S thatPC /RUN /TN "thiscommand"

Подробную информацию о параметрах и синтаксисе XML-файла, определяющего задачу, вы можете найти в справке.

person Philm    schedule 11.09.2013

Вы можете попробовать выполнить Start-Process с помощью Passthru, чтобы увидеть, возвращается ли ошибка:

(Start-Process -FilePath msiexec.exe -ArgumentList $msiArgumentList -Wait -Passthru).ExitCode

Другая вещь, которая может помочь, — это увеличить количество журналов до /l*v.


Обновление 1

Можете ли вы попробовать следующее, просто чтобы проверить, работают ли удаленные команды для msi, это должно привести к 1619.

(Start-Process -FilePath msiexec.exe -ArgumentList "/i no.msi /quiet /qb!" -Wait -Passthru).ExitCode
person David Martin    schedule 10.09.2013
comment
прохождение не помогло. ничего не вернулось. попробовал -ea stop внутри try/catch, чтобы поймать любые нетерминальные ошибки, но все равно ничего. и журнал никогда не пишется печально, поэтому увеличение журнала не помогает. - person user1752736; 10.09.2013
comment
Это очень странно, я устанавливаю удаленно, используя очень похожий механизм. Я бы по крайней мере ожидал, что ExitCode будет иметь значение либо 0, либо обычное 1619. - person David Martin; 10.09.2013
comment
Я предполагаю, что параметры неверны и отображается диалоговое окно, если вы убьете msiexec, вы получите код выхода? - person David Martin; 10.09.2013
comment
я несколько часов проверял наличие возможных проблем и пробовал все обходные пути, которые я нашел, но ничего не сработало. - person user1752736; 10.09.2013
comment
Процесс запуска возвращается немедленно? - person David Martin; 10.09.2013
comment
да. это занимает, может быть, 1 секунду, пока msiexec не появится в диспетчере задач, после чего сценарий продолжается/заканчивается. когда я убиваю процесс, все еще нет кода выхода. - person user1752736; 10.09.2013

Похоже, проблема заключалась в сочетании того, как был создан установщик msi, и ограничений, которые сервер Windows имеет в отношении интерактивных процессов. В итоге я использовал psexec, чтобы обойти эту проблему.

person user1752736    schedule 11.11.2013
comment
У меня очень похожая, если не точно такая же проблема. Что такое «psiexec» из абзаца 1 вашего главного вопроса? Или это опечатка для psexec? - person Jaans; 27.05.2014
comment
Не хотел комментировать. Смотрите мой ответ. - person user663470; 30.05.2015

Единственное решение, которое сработало для меня, - это опрос состояния процесса. Это можно запустить внутри блока сценария в удаленном сеансе powershell.

$res = Start-Process -FilePath $process -ArgumentList $arguments -Wait -PassThru

while ($res.HasExited -eq $false) { 
    Write-Host "Waiting for $process..."
    Start-Sleep -s 1
}

$exitCode = $res.ExitCode
person user663470    schedule 30.05.2015

Используя ответы выше, я получил

$session = New-PSSession -ComputerName $serverName -Credential $mycred
invoke-command -Session $session -ScriptBlock { param ($argxs) write-host $argxs; start-process msiexec.exe -ArgumentList $argxs } -ArgumentList "/i `"$pathToMsi`" /qn /L*V `"E:\package.log`""

Хост записи нужен только для того, чтобы убедиться, что расширения правильно экранированы, но оказались бесценными при отладке.

person rob    schedule 31.10.2017