首页 > 解决方案 > 在 PowerShell 数组中按行搜索

问题描述

我有一个函数可以为我们准备退役的服务器列表创建一个多维数组。该阵列将有许多字段,例如服务器名称、CPU 数量、内存、SAN 上的存储等。如果它在一个系统(例如 vCenter)中找不到它正在寻找的信息,它会查找在 AD 或 CMDB 等辅助系统中。所有这些都按预期工作。

我正在寻找的是一种有效的方法来循环遍历数组中的每一行,然后遍历该行的每个索引,寻找空或空白项。例如,如果服务器 FileSrv018 返回 IP 地址为空,我想提示用户手动输入此信息。我可以写一堆 if 语句,即:

if ($row.CPU -eq $null) {

}
elseif ($row.IP -eq $null) {

}

...但我真的不想经历那种麻烦。我只是好奇是否有办法在 foreach 循环中给我每个“列”(我意识到数组实际上没有列名)。我可以像这样使用 PSObject 来做到这一点:

$columns = $decom.PSObject.Properties | Where-Object { $_.MemberType -eq 'NoteProperty' } | Select-Object -ExpandProperty Name

但还没有找到与数组类似的东西。只是好奇是否有人有任何建议。

标签: arrayspowershellforeach

解决方案


您的帖子中没有足够的信息来给出明确的答案(请使用您获得该$decom值的代码编辑您的帖子),但总的来说,答案是:是的,当然,您可以遍历 multi 的所有值PowerShell中的维数组很容易:

$2DArray = New-Object 'System.Object[,]' 5,5

# populate $2DArray
# ...

for($i = 0; $i -lt $2DArray.GetLength(0); $i++){
  for($j = 0; $j -lt $2DArray.GetLength(1); $j++){
    if($null -eq $2DArray[$i,$j]){
      $2DArray[$i,$j] = Read-Host "Data missing in field $i,$j - please input data"
    }
  }
}

遍历交错数组(也称为嵌套数组)的过程几乎相同:

$NestedArray = New-Object 'System.Object[][]' 5,5

# populate $NestedArray (remember to manually instantiate the inner arrays)
# ...

for($i = 0; $i -lt $NestedArray.Length; $i++){
  for($j = 0; $j -lt $NestedArray[$i]Length; $j++){
    if($null -eq $NestedArray[$i][$j]){
      $NestedArray[$i][$j] = Read-Host "Data missing in field $i,$j - please input data"
    }
  }
}

推荐阅读