Может кто-нибудь взглянуть на мой код и сказать мне, почему при использовании invoke-command мой ПК все еще используется в качестве посредника?

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

Invoke-Command -ComputerName $DestinationComputer -Credential $creds -Authentication Credssp -ScriptBlock {    
    robocopy \\$($args[0])\C$\usmt \\$($args[1])\C$\usmt /E /COPY:DATOU /E /ZB /mt:32 /r:5 /w:0
}-ArgumentList $SourceComputer,$DestinationComputer -ErrorAction Inquire

1 ответ1

1

Да, вы запускаете процесс ROBOCOPY на этом компьютере с $DestinationComputer , да. Но вы все еще используете Invoke-Command на своей машине, которая ожидает stdout и stderr .

Из документов

Командлет Invoke-Command выполняет команды на локальном или удаленном компьютере и возвращает все выходные данные команд, включая ошибки

Так что это поведение ожидается с вашим кодом

Invoke-Command -ComputerName $DestinationComputer -Credential $creds -Authentication 
Credssp -ScriptBlock {    
    robocopy \\$($args[0])\C$\usmt \\$($args[1])\C$\usmt /E /COPY:DATOU /E /ZB /mt:32 
/r:5 /w:0
}-ArgumentList $SourceComputer,$DestinationComputer -ErrorAction Inquire

Вам нужно передать параметр InDisconnectedSession . Что заставляет Invoke-Command подключаться, запускать cmd и быстро отключаться. Опять из документов:

Чтобы создать отключенный сеанс, используйте параметр InDisconnectedSession командлета Invoke-Command. Он создает сеанс, запускает команду и немедленно отключается, прежде чем команда сможет вернуть какой-либо вывод.

Это то, что вы просите.

Приветствия.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .