我有一个函数,可以为我们准备退役的服务器列表创建多维数组。该阵列将包含许多字段,例如服务器名称,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
,但尚未找到与数组类似的东西。只是好奇是否有人提出建议。
答案 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"
}
}
}