有人能看看我的代码并告诉我为什么使用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-Command
stdout
stderr
来自文档
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 参数。它会创建会话、启动命令,然后立即断开连接,然后命令才能返回任何输出。
这就是你所要求的。
干杯。