如何让Powershell循环运算执行的更快

本篇将介绍如何让你的Powershell循环运算执行的更快,经过试验证明,改良后的脚本要是正常循环脚本执行速度的3倍以上。

举例:如果需要运行一个Powershell脚本获取100台服务器中每一个服务器当前登录的用户。

我们知道如果用普通的循环,我们需要一个含有一个txt文件,文件包含了服务器的列表,或者你可以用其他方式获取,在这不多讲。

$servers = get-content “c:fileservers.txt”

然后使用icm来将你想要执行的任务传进scriptblock

foreach($s in $servers){
icm -computername $s -scriptblock {(get-wmiobject win32_computersystem).username}
}

在以上脚本中,需要逐个的访问,然后执行scriptblock中的脚本,如果其中有一个服务器down掉,或者是延迟,你的整个脚本会运行很久很久。

因此有了以下的做法

icm -computername (get-content “c:fileservers.txt”) -scriptblock {(get-wmiobject win32_computersystem).username}

表面上来看,两个脚本得到的结果基本差不多,但概念上就差了很多。第二个脚本更快一些。因此推荐使用第二种,因为第二种是并行处理。