使用下面的代码我试图找到在我们的SQL数据库(手动输入,容易出错)和vCenter中具有不匹配电源状态的服务器。我不太工作,因为在-And $VM.PowerState -like "PoweredOn"
它获得所有服务器的状态(大约500)而不是一次只有一个服务器,导致语句总是失败。
# $VM = List of Virtual Machines, properties Name and PowerState
# $ServerList = List of Servers, properties Name and Status.
foreach ($serverEntry in $ServerList) {
if ($VM.Name -contains $serverEntry.Name -And $VM.PowerState -like "PoweredOn" -And $serverEntry.Status -like "In Use") {
Stuff will happen
} else {
Some other stuff
}
}
我尝试了一个嵌套循环,但无法使其工作,并且由于服务器未按相同顺序列出,因此我无法使用简单的计数器($i
)。
我该如何解决这个问题?
答案 0 :(得分:1)
将列表$VM
的元素放在哈希表中:
$vmlist = @{}
$VM | ForEach-Object { $vmlist[$_.Name] = $_ }
这为您提供了一个数据结构,您可以通过VM的名称访问VM对象。在$ServerList
循环中使用它:
foreach ($serverEntry in $ServerList) {
if ($vmlist[$serverEntry.Name].PowerState -eq 'PoweredOn' -and $serverEntry.Status -eq 'In Use') {
# do some
} else {
# do other
}
}
答案 1 :(得分:0)
foreach ($serverEntry in $ServerList)
{
$currentVM = $VM | ? {$_.Name -eq $serverEntry.Name}
if ($currentVM.PowerState -like "PoweredOn" -And $serverEntry.Status -like "In Use") {Stuff will happen} else {Some other stuff}
}