Invoke-команда все еще использует мой компьютер в качестве посредника во время робокопии?

266
Christopher Heisler

Может кто-нибудь взглянуть на мой код и сказать мне, почему при использовании 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 
0
Да, что сказать? Вы, очевидно, используете учетные данные, поэтому они аутентифицируются в ресурсах для источника и назначения в соответствии с RoboCopy. Что именно вас беспокоит? Pimp Juice IT 5 лет назад 1
Я хочу перенести напрямую из источника в место назначения и не использовать свой компьютер в качестве «обработчика файлов». Он делает это, хотя все они подключены к одному коммутатору. Christopher Heisler 5 лет назад 0
@ChristopherHeisler Эта часть `\\ $ ($ args [0]) \ C $ \ usmt \\ $ ($ args [1]) \ C $ \ usmt` сообщает, что файлы передаются между другими компьютерами, что что ты спрашиваешь Если вы хотите вывести свою машину из этого процесса, вам нужно выполнить такой же скрипт в источнике или в месте назначения, если у вас есть разрешение и доступ к одной из этих машин. dmb 5 лет назад 0
Разве «Invoke-Command -ComputerName $ DestinationComputer» не означает, что я запускаю команду на целевом компьютере? Должен ли я попробовать добавить выражение invoke прямо перед robocopy? Christopher Heisler 5 лет назад 0
Это всего лишь небольшая часть сценария. Выполняемый процесс - это robocopy, который встроен во всю машину. Я использую команду invoke, чтобы сказать целевому компьютеру запустить робокопию. Неважно, откуда этот скрипт выполняется. Я не сталкиваюсь с какой-либо ошибкой. Проблема в том, что по какой-то глупой причине мой компьютер все еще используется в качестве посредника для передачи. Вероятно, следует просто использовать copy-item. Christopher Heisler 5 лет назад 0

1 ответ на вопрос

1
dmb

Да, вы запускаете процесс 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. Он создает сеанс, запускает команду и немедленно отключается, прежде чем команда сможет вернуть какой-либо вывод.

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

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