在 robocopy 期间,Invoke-command 仍然使用我的电脑作为中间人吗?

在 robocopy 期间,Invoke-command 仍然使用我的电脑作为中间人吗?

有人能看看我的代码并告诉我为什么使用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

ROBOCOPY是的,你正在那台计算机上使用 运行进程,是的。但你仍然在等待和的机器上$DestinationComputer运行。Invoke-Commandstdoutstderr

来自文档

Invoke-Command cmdlet 在本地或远程计算机上运行命令并返回命令的所有输出,包括错误

因此您的代码中会出现这种行为

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 并立即断开连接。再次引用文档:

要创建断开连接的会话,请使用 Invoke-Command cmdlet 的 InDisconnectedSession 参数。它会创建会话、启动命令,然后立即断开连接,然后命令才能返回任何输出。

这就是你所要求的。

干杯。

相关内容