手机
当前位置:查字典教程网 >脚本专栏 >PowerShell >Powershell后台作业、异步操作实例
Powershell后台作业、异步操作实例
摘要:Powershell是单线程程序且一次只能做一件事情。后台作业能额外增加Powershell进程在后台处理作业。当需要程序同时运行且数据量不...

Powershell是单线程程序且一次只能做一件事情。后台作业能额外增加Powershell进程在后台处理作业。当需要程序同时运行且数据量不是很大时它能很好的解决问题。但从Powershell后台回传数据是一个非常麻烦的工作,它将浪费很多时间。将会导致脚本更慢。

这里有3个并发执行任务:

复制代码 代码如下:

$start = Get-Date

# get all hotfixes

$task1 = { Get-Hotfix }

# get all scripts in your profile

$task2 = { Get-Service | Where-Object Status -eq Running }

# parse log file

$task3 = { Get-Content -Path $env:windirwindowsupdate.log | Where-Object { $_ -like '*successfully installed*' } }

# run 2 tasks in the background, and 1 in the foreground task

$job1 = Start-Job -ScriptBlock $task1

$job2 = Start-Job -ScriptBlock $task2

$result3 = Invoke-Command -ScriptBlock $task3

# wait for the remaining tasks to complete (if not done yet)

$null = Wait-Job -Job $job1, $job2

# now they are done, get the results

$result1 = Receive-Job -Job $job1

$result2 = Receive-Job -Job $job2

# discard the jobs

Remove-Job -Job $job1, $job2

$end = Get-Date

Write-Host -ForegroundColor Red ($end - $start).TotalSeconds

上面执行全部的任务消耗了5.9秒。三个任务的结果将分别存入$result1, $result2, 和 $result3.

让我们再继续查看相继在前台执行完命令需要多长时间:

复制代码 代码如下:

$start = Get-Date

# get all hotfixes

$task1 = { Get-Hotfix }

# get all scripts in your profile

$task2 = { Get-Service | Where-Object Status -eq Running }

# parse log file

$task3 = { Get-Content -Path $env:windirwindowsupdate.log | Where-Object { $_ -like '*successfully installed*' } }

# run them all in the foreground:

$result1 = Invoke-Command -ScriptBlock $task1

$result2 = Invoke-Command -ScriptBlock $task2

$result3 = Invoke-Command -ScriptBlock $task3

$end = Get-Date

Write-Host -ForegroundColor Red ($end - $start).TotalSeconds

结果,这次只花费了5.05秒。与后台作业几乎同时完成,所以后台作业更适合解决长时间执行的任务。从三个任务返回的数据观察,好处是这种按顺数在前台获得数据能减少了执行过程的开销。

【Powershell后台作业、异步操作实例】相关文章:

PowerShell函数参数设置成自动识别数据类型的例子

探索PowerShell(十一)函数介绍

PowerShell中使用return语句退出函数例子

PowerShell查看Windows功能选项的方法

Powershell小技巧之播放WAV声音

PowerShell实现在字符串中查找大写字母

Powershell小技巧之使用WMI测试服务响应

PowerShell中终止管道的方法

PowerShell中删除空格、点号、减号和换行方法代码实例

PowerShell包含另一个脚本文件和获取当前脚本所在目录的方法例子

精品推荐
分类导航