在PowerShell数组中按行搜索

时间:2019-02-22 21:21:46

标签: arrays powershell foreach

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

我正在寻找的是一种有效的方法,可以循环遍历数组中的每一行,然后遍历该行的每个索引,以查找null或空白项目。例如,如果对于服务器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

,但尚未找到与数组类似的东西。只是好奇是否有人提出建议。

1 个答案:

答案 0 :(得分:0)

您的帖子中确实没有足够的信息来给出明确的答案(请使用获得$decom值的代码来编辑您的帖子),但总的来说,答案是:是的,可以,您可以轻松在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"
    }
  }
}