Пакетный скрипт работает нормально, но завершается ошибкой при выполнении через PowerShell Remoting - PullRequest
0 голосов
/ 29 марта 2012

У меня есть следующий пакетный скрипт на сервере Windows 2008 R2:

@echo off
djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt
echo %ERRORLEVEL%

Если я запускаю сценарий на самом сервере, через командную строку или PowerShell, он отлично работает и возвращает «0».

Проблема в том, что мне нужно запустить его с удаленного компьютера, поэтому я делаю следующее (пример только для тестирования):

Invoke-Command -ComputerName remotehost -ScriptBlock {.\script.cmd}

Вывод «-1073740940», который, вероятно, является кодом ошибки C0000374, что может быть связано с повреждением кучи.

Кажется, это проблема самой команды djoin. Я могу закомментировать djoin и запустить другие двоичные файлы, такие как ping, без проблем, используя ту же команду Invoke.

Принимая во внимание, что сценарий прекрасно работает при запуске из PowerShell на целевом компьютере, какие проблемы может создавать акт удаленного взаимодействия?

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

[править]

Отказался от всего этого. Это либо ошибка в djoin, либо некоторая неясная проблема во взаимодействии между djoin и PS remoting.

Мне удалось запустить djoin непосредственно на клиенте, используя runas / netonly ... для предоставления учетных данных домена. Это очень грязное решение (и мне еще предстоит выяснить, как получить статус завершения процесса, запущенного runas), но оно выполняет свою работу.

1 Ответ

1 голос
/ 04 августа 2014

Это почти наверняка классическая проблема аутентификации "двойной скачок".Помните, что когда вы используете PowerShell Remoting, вы используете один из этих переходов.Все, что вы выполняете на этом удаленном компьютере, который обращается к третьему удаленному компьютеру, вряд ли будет работать, если для этого потребуется аутентификация.

Чтобы обойти это, вы можете использовать метод аутентификации, который позволяет вам делегировать учетные данные такие как CredSSP.Это немного сложнее, чем просто изменить тип аутентификации, поскольку вы должны вносить изменения на стороне клиента и на стороне транзакции.Обратитесь к этому сообщению в блоге по MSDN, PowerShell Remoting и проблеме «Double-Hop» и этому «Эй, сценарист!»post, Включение функциональности PowerShell "Second-Hop" с помощью CredSSP .

...