powershell invoke-command在完成后返回

时间:2017-04-28 18:45:13

标签: powershell invoke-command runspace

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

如果我使用invoke-command server1,server2,server3 { robocopy },则会在复制$1$2$3时将日志吐出。这变得非常混乱,难以阅读。复制完成后有没有办法让日志或进度返回?

例如:

server3 done.. display all copied files
server1 done.. display all copied files
server2 done.. display all copied files

而不是

$3 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做同样的事情并且更容易:)。

感谢

1 个答案:

答案 0 :(得分:0)

要扩展我的评论,您可以创建所需的操作作为脚本块,使用-AsJob参数为复制操作创建后台作业,然后等待作业完成并输出结果#&# 39;重新完成。

$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
    }
}