11赞
558
当前位置:  开发笔记 > 开发工具 > 正文

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:windir\windowsupdate.log | Where-Object { $_ -like '*successfully installed*' }


}

# run 2 tasks in the background, and 1 in the foreground task
$job1 =  Start-Job -ScriptBlock $task

1
$job2 =  Start-Job -ScriptBlock $task2
$result3 = Invoke-Command -ScriptBlock $task


3

# wait for the remaining tasks to complete (if not done yet)
$null = Wait-Job -Job $job1, $job


2

# now they are done, get the results
$result1 = Receive-Job -Job $job

1
$result2 = Receive-Job -Job $job2
>
# discard the jobs
Remove-Job -Job $job1, $job
>
2>
$end = Get-Date
Write-Host -ForegroundColor Red ($end - $start).TotalSeconds

>

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

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

复制代码 代码如下:

>
$start = Get-Date
>
# get all hotfixe
s
$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:windir\windowsupdate.log | Where-Object { $_ -like '*successfully installed*' } }

# run them all in the foreground:
$result1 = Invoke-Command -ScriptBlock $task

1
$result2 = Invoke-Command -ScriptBlock $task2
$result3 = Invoke-Command -ScriptBlock $task
>
3>
$end = Get-Date
Write-Host -ForegroundColor Red ($end - $start).TotalSeconds>

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



推荐阅读
  • 在数据库物理设计阶段,为数据表创建索引的目的是:提高查询的检索能力、提高查询效率。索引是对数据表中一个或多个列的值进行排序的一种结构,建立索引可以极大地提高在数据库中获取所需信息的速度,同时还能提高服务器处理相关搜索请求的效率。 ... [详细]
  • 能用来控制文本框中输入数据格式的​是输入掩码,“输入掩码”是指能起到控制向字段输入数据作用的字符,一个输入掩码可以包含原义显示的字符和掩码字符。 ... [详细]
  • 软回车快捷键是“SHIFT+ENTER”,该快捷键能实现换行,但是并不换段,即前后两段文字在WORD中属于同一“段”。 ... [详细]
  • 格式刷能使当前文本的格式转换为光标所在处的文本格式。使用方法为:1、选择某种格式,单击“格式刷”,单击想格式的内容即可;2、选择某种格式,双击“格式刷”,然后单击想格式的内容,再单击一下“格式刷”即可退出格式刷编辑模式。 ... [详细]
  • su组件和群组的区别:su组件是创建组,可以单独进行编辑操作,不受其它相同组的影响;而群组,相同组件之间是相互关联的,修改其中一个对象的时候,其余对象同时发生变化。 ... [详细]
  • 系统boot是系统引导的意思,系统引导通常是由一个被称为启动引导程序的特殊代码完成的,它位于系统ROM中,用来完成定位内核代码在外存的具体位置、按照要求正确装入内核至内存并最终使内核运行起来的整个系统启动过程。 ... [详细]
  • 区别:QPS指的是“每秒查询率”;而TPS指的是“事务数秒”。理解:Tps即每秒处理事务数,对于一个页面的一次访问,形成一个Tps;而一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。 ... [详细]
  • 这篇文章介绍ASP.NETMVC5+EF6+EasyUI后台管理系统微信公众平台开发-资源环境准备 ... [详细]
  • 代码片段,代码分享,PHP代码分享,Java代码分享,Ruby代码分享,Python代码分享,HTML代码分享,CSS代码分享,SQL代码分享,JavaScript代码分享 ... [详细]
  • 最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助。 ... [详细]
devbox
赵丽宏67171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有 京ICP备19059560号-4