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
}
}
我想使用 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
}
}