迭代ForEach中的多个变量

时间:2016-03-02 13:36:38

标签: powershell foreach

使用下面的代码我试图找到在我们的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)。

我该如何解决这个问题?

2 个答案:

答案 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}

 }