Назад | Перейти на главную страницу

Powershell - Invoke-command не запускает msiexec.exe

Я хочу установить клиент TortoiseSVN на нескольких серверах, используя удаленное взаимодействие Powershell. Основные операции работают, но команда ниже не будет работать как удаленное взаимодействие

Invoke-Command -ComputerName myserver -ScriptBlock {Start-Process "msiexec.exe" -ArgumentList "/i \\fileserver\install\subversionclients\TortoiseSVN-1.14.0.28885-x64-svn-1.14.0.msi  /passive /norestart /qn ADDLOCAL=ALL" -Wait}

С другой стороны, войдя на сервер и выполнив следующие

Start-Process "msiexec.exe" -ArgumentList "/i \\fileserver\install\subversionclients\TortoiseSVN-1.14.0.28885-x64-svn-1.14.0.msi  /passive /norestart /qn ADDLOCAL=ALL" -Wait`

...это работает. Я не смог понять, почему - ни ошибок не отображается, ни возвращаемого значения. Как я понял Invoke-command по умолчанию повышен. Пытаюсь добавить -Verb RunAs тоже не помогает. У меня также есть -wait-аргумент (исх. https://serverfault.com/a/550169/180067), но и в моем случае это не помогло.

Это связано с тем, что вы используете аутентификацию Kerberos и пытаетесь выполнить «двойной прыжок», а это невозможно по умолчанию с Kerberos (в основном, вы можете пройти аутентификацию на «myserver», но вы не можете снова «перепрыгнуть» на "файловый сервер").

Что ты можешь сделать:

  • Скопируйте файл локально на сервер, а затем удаленно установите MSI из локального каталога.
  • Или, если вы не хотите копировать его локально, вы можете использовать CredSSP вместо Kerberos для аутентификации на «myserver», но это требует настройки. Добавить -Authentication CredSSP и -Credential "yourUserName" к команде и следуйте инструкциям, приведенным в сообщении об ошибке.

Дополнительные сведения, рекомендации и различные решения доступны здесь: Выполнение второго прыжка в PowerShell Remoting

[...] Вы можете использовать поставщика поддержки безопасности учетных данных (CredSSP) для аутентификации. CredSSP кэширует учетные данные на удаленном сервере (ServerB), поэтому его использование открывает возможность атак на кражу учетных данных. Если удаленный компьютер скомпрометирован, злоумышленник получит доступ к учетным данным пользователя. CredSSP по умолчанию отключен как на клиентских, так и на серверных компьютерах. Вы должны включать CredSSP только в самых надежных средах. Например, администратор домена подключается к контроллеру домена, потому что контроллер домена имеет высокий уровень доверия [...]

а здесь для настройки CredSSP: Включение функциональности PowerShell "Second-Hop" с помощью CredSSP

На моей клиентской рабочей станции мне нужно использовать командлет Enable-WSManCredSSP, чтобы включить роль клиента, а затем указать компьютер, которому я хочу делегировать свои учетные данные. Эта команда показана здесь.

Включить-WSManCredSSP -Ролевой клиент -DelegateComputer * .iammred.net -Force

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

Enable-WSMaCredSSP -Role Server –Force