powershell invoke-command returns 完成后

powershell invoke-command returns upon completion

我想使用 robocopy 进行并行复制,并在完成后返回日志数据。

如果我使用 invoke-command server1,server2,server3 { robocopy },它会在为 </code>、<code></code> 复制时吐出日志。这变得非常混乱且难以阅读。复制完成后有没有办法让日志或进度returns?</p> <p>例如:</p> <pre><code>server3 done.. display all copied files server1 done.. display all copied files server2 done.. display all copied files

而不是

 display copied files
server1 display copied files
server2 display copied files
server2 display copied files
server1 display copied files
server2 display copied files

我知道我可以将运行空间用于多线程并检查句柄的完成情况以显示数据(我当前正在使用)。但我想知道是否可以用 invoke-command 做同样的事情并且更容易 :).

谢谢

为了扩展我的评论,您可以将所需的操作创建为脚本块,使用 -AsJob 参数为复制操作创建后台作业,然后等待作业完成并在他们完成了。

$SB = {
    & robocopy \FileServer\Share\KittenPictures C:\webroot\MySite\Images *.*
}
$Servers = ('ServerA','ServerB','ServerC')
$Jobs = Invoke-Command -ScriptBlock $SB -ComputerName $Servers -AsJob
While($Jobs.JobStateInfo -Contains Running){
    $Jobs | Wait-Job -Any
    Get-Job -State Completed | ForEach{
        $_ | Receive-Job
        $_ | Remove-Job
    }
}