标签:powershell
当本地机器需要执行一个动作,此动作需要耗费很长时间,而机器在这段时间内只能等待,而我们希望在机器等待的这段时间内,我们还可以做其他事情。
这样我们就可以用后台任务来解决上面遇到的问题。
(1)将文件拷贝到多台远程机器,可以开启多个任务进行并行拷贝
(2)多台远程机器同时安装文件,可以开启多个任务进行并行安装
#$StartJob = Start-Job -ScriptBlock {Get-Process}
#$StartJob Id Name PSJobTypeName State HasMoreData Location Command #$InvokeCommandJob = Invoke-Command -ComputerName LocalHost -ScriptBlock {Get-Process} -AsJob
#$InvokeCommandJobId Name PSJobTypeName State HasMoreData Location Command 开启了一个任务后,我们总不能不管它吧,现在来说下怎么处理这些Job
#创建一个等待1s的后台任务
$WaitJob1 = Start-Job -ScriptBlock {Sleep -Seconds 1}
#创建一个等待5s的后台任务
$WaitJob2 = Start-Job -ScriptBlock {Sleep -Seconds 5}
#等待两个Job 2s内完成
Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 2Id Name PSJobTypeName State HasMoreData Location Command Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 10
Wait-Job -Id $WaitJob1.Id,$WaitJob2.Id -Timeout 10 Wait-Job -Name $WaitJob1.Name,$WaitJob2.Name -Timeout 10 Wait-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId -Timeout 10 Wait-Job -State Running -Timeout 10
Remove-Job -Job $WaitJob1,$WaitJob2 Remove-Job -Id $WaitJob1.Id,$WaitJob2.Id Remove-Job -Name $WaitJob1.Name,$WaitJob2.Name Remove-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId Remove-Job -State CompletedRemove Job的时候一定要注意,如果该Job得状态不是完成的或者是停止的,就会抛出异常:
Remove-Job -Job $WaitJob1,$WaitJob2 -Force
下面我来讲一个非常有趣的问题
$a = 1
$b = 2
$c = 0
$Job = Start-Job -ScriptBlock {
$c = $a + $b
$c > "D:\a.txt"
}OK,代码写好了,运行之后,我们期望得到的结果是D:\a.txt文本文件中的内容为3$a = 1
$b = 2
$c = 0
$Job = Start-Job -ArgumentList $a,$b -ScriptBlock {
param($a,$b)
$c = $a + $b
$c > "d:\a.txt"
}运行上面的代码,可以看到文本文件中的内容为3标签:powershell
原文地址:http://blog.csdn.net/jackson0714/article/details/40661829