【发布时间】:2012-03-07 12:00:06
【问题描述】:
大家好!
我一直在寻找一种方法来提高我的脚本效率,并且我已经得出结论(在 StackOverflow 上好心人的帮助下)Start-Job 是要走的路。
我希望在 $servers 中的所有服务器上同时运行以下 foreach 循环。我无法理解如何实际收集从 Receive-Job 返回的信息并添加到 $serverlist。
PS:我知道我离搞定这个问题还很遥远,但我真的很感谢一些帮助,因为我对 Start-Job 和 Receive-Job 的工作原理感到非常困惑..
# 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
}
$serverlist += $serverinfo | Select-Object SystemName,IPAddress,OSName
}
备注
- 我正在将 $serverlist 输出到脚本末尾的 csv 文件中
- 我在我的完整脚本中列出了大约 500 个服务器
【问题讨论】:
标签: powershell foreach jobs