30. PowerShell -- 后台作业、异步操作实例

如果需要加快执行一个脚本,你可能需要用到后台作业。后台作业能同时运行脚本中多个事件

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

1. 这里有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 $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.

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

代码如下:

$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 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秒。与后台作业几乎同时完成,所以后台作业更适合解决长时间执行的任务。从三个任务返回的数据观察,好处是这种按顺数在前台获得数据能减少了执行过程的开销。

参考:

http://www.jb51.net/article/49074.htm

时间: 2024-10-07 17:16:46

30. PowerShell -- 后台作业、异步操作实例的相关文章

java异步操作实例

1.异步操作过程实例: A.开启一个线程一直执行耗时操作 B.通过每隔多长多件轮询线程是否实行完毕,thread.isCompleted() C.执行完毕后,通过回调函数返回真实信息 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据. 所以连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现: public class FutureTicket{ private Object data = null; private bool

Ajax实现异步操作实例_针对XML格式的请求数据

js分类中有一节[原生js异步请求,XML解析]主要说明了js前台是如何处理XML格式请求和如何接受由服务器返回的XML数据的解析,今天我将用一个实例来说明具体要如何操作. 前台的参数类型也是XML使用的是jquery: function test(){ var xmlString ="<bookstore>"+ "<book Type='必修课' ISBN='7-111-19149-2'>"+ "<title>数据结构

centos7下mysql5.6.30配置单机多实例主从半同步复制

1.在master主服务器上执行: mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; Query OK, 0 rows affected (0.30 sec) mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; Query OK, 0 rows affected (0.02 sec) mysql> SET GLOBAL rpl_semi_syn

centos7下yum安装mysql5.6.30及配置多实例

1.在mysql官网上载tar包 MySQL-5.6.30-1.el6.i686.rpm-bundle.tar 进目录cd /home/fuyouling/ 解压tar -xvf MySQL-5.6.30-1.el6.i686.rpm-bundle.tar MySQL-client-5.6.30-1.el7.x86_64.rpm MySQL-devel-5.6.30-1.el7.x86_64.rpm MySQL-embedded-5.6.30-1.el7.x86_64.rpm MySQL-ser

Ajax实现异步操作实例_针对JSON格式的请求数据

最近写了一篇ajax异步操作XML格式的,今天就写关于json格式的. 一.简单了解Json 1. JSON有两种表示结构,对象和数组. 1.1 对象: { key1:value1, key2:value2, ... } 1.2 数组 [ { key1:value1, key2:value2 }, { key3:value3, key4:value4 } ] 二.ajax如何利用json对象数据传递 $.ajax({ type: "post", url: "Hand/Ajax

21. PowerShell -- 文本处理

PowerShell 文本处理 实例一:求所有电阻值的个数,平均值,总和,最大值,最小值. 问题描述: 有如下一段文本文件,开头有许多描述,字符"~"为有用数据的开始标志,要求:求所有电阻值的个数,平均值,总和,最大值,最小值. 这是一份格式较为规则的文本文件报表. #文件头有一些无用的描述信息 ~ 深度         电阻值      放射性值 10            1.5            2.4 20            0.4            1.9 30 

每天一个linux命令(30):cal 命令

cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历.“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. 1.命令格式: cal [参数][月份][年份] 2.命令功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份 3.命令参数: -1 显示一个月的月历 -3 显示系统前一个月,当前月,下一个月的月历 -s  显示星期天为一个星期的第一天,默认的格式 -m 显示星期一为一

《HTML5与CSS3实例教程》

<HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115363404 上架时间:2014-7-25 出版日期:2014 年8月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 数码/设计 > CSS 计算机 > 软件与程序设计 > 网络编程 > HTML 更多关于>>> <HTML5与CSS3实例教程>

科学计算三维可视化---TraitsUI与Mayavi实例

TraitsUI与Mayavi实例 一:创建一个简单的TraitsUI与Mayavi实例 from numpy import sqrt,sin,mgrid from traits.api import HasTraits,Instance from traitsui.api import View,Item from tvtk.pyface.scene_editor import SceneEditor from mayavi.tools.mlab_scene_model import Mlab