arrays - 在 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
但还没有找到与数组类似的东西。只是好奇是否有人有任何建议。
解决方案
您的帖子中没有足够的信息来给出明确的答案(请使用您获得该$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"
}
}
}
推荐阅读
- c# - .NET Core Docker 性能不佳
- javascript - 使用 Ajax、JavaScript、PHP 删除数据库条目
- java - Spring Batch-重构@StepScope bean
- c++ - 在嵌套类中使用模板值
- python - 如何生成一个numpy数组的随机数?
- reactjs - “this”在另一个函数 React 返回的匿名函数中未定义
- javascript - 如何在 quill image Handler 中向图像元素添加类?
- google-cloud-platform - 允许对使用 Terraform 配置的 GCP 虚拟机实例进行 SSH 访问
- c# - 使用 SemaphoreSlim 锁定方法时的奇怪输出
- c# - 我正在学习如何在 C# 中实现依赖注入 [DI]。这是作为示例的有效 DI 程序吗?