我有一个aprox 1000行脚本,它循环遍历AD中的所有服务器。 脚本ping每个服务器并执行一堆WMI查询如果ping = ok。 我的脚本将结果存储在散列表中,我在脚本结尾输出为CSV。 这个工程,但它是sloooow ..我们正在谈论接近两个小时。我一直在考虑这样做更有效率,我认为-asjob听起来像个好主意。通过-asjob使脚本更高效
但我能做到这一点作为并行工作吗?我的服务器会处理负载吗?并且正在采取这种做法吗?
盼望某些输入,而我在等我的脚本来运行它的周期..
编辑
我的看法是,脚本等待测试连接(平)返回true或错误。我想同时运行多个ping。
EDIT 2
(注意:,因为我觉得我原来的问题已经回答了我反正包括我当前的代码,因为这已请求我已经开始了一个单独的问题,谢谢大家投入!new question here!)
谢谢大家的帮助到目前为止!我被要求列出我的代码,以提供我正在尝试做的事情的真实例子。
这是我的代码小,但有效的摘录:
# List 4 servers (for testing)
$servers = Get-QADComputer -sizelimit 4 -WarningAction SilentlyContinue -OSName *server*,*hyper*
# Create list
$serverlistlist = @()
# Loop servers
foreach($server in $servers) {
# Fetch IP
$ipaddress = [System.Net.Dns]::GetHostAddresses($Server.name)| select-object IPAddressToString -expandproperty IPAddressToString
# Gather OSName through WMI
$OSName = (Get-WmiObject Win32_OperatingSystem -ComputerName $server.name).caption
# Ping the server
if (Test-Connection -ComputerName $server.name -count 1 -Quiet) {
$reachable = "Yes"
}
# Save info about server
$serverInfo = New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
IPAddress = $IPAddress
OSName = $OSName
}
$serverlistlist += $serverinfo | Select-Object SystemName,IPAddress,OSName
}
注: 我在脚本 结束输出$服务器列表到CSV文件我列出aprox的500台服务器我完整的脚本。
首先,你需要确定哪些部分是缓慢的,然后发布那些在你的问题,所以我们可以提出改进建议。 – 2012-03-06 13:39:25
如果您在循环的每次迭代中使用'Test-Connection',并且如果这是最慢的事情,您需要重新处理逻辑以同时运行ping测试,因为您首先需要服务器列表,您可以同时测试与它们的连接。你不必一次做所有的服务器,你一次可以说10-20。 – 2012-03-06 18:10:02
谢谢安迪!是否有可能将我在服务器列表中的所有foreach重写为开始工作?或者那会不那么聪明? :) – Sune 2012-03-06 19:17:07