【问题标题】:Searching by row in PowerShell array在 PowerShell 数组中按行搜索
【发布时间】:2019-02-22 21:21:45
【问题描述】:

我有一个函数可以为我们准备退役的服务器列表创建一个多维数组。该阵列将有许多字段,例如服务器名称、CPU 数量、内存、SAN 上的存储等。如果它在一个系统(例如 vCenter)中找不到它正在寻找的信息,它会查找在辅助系统中,例如 A.D. 或 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

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

【问题讨论】:

  • “我有一个为服务器列表创建多维数组的函数” - 为什么不重写该函数以返回对象呢?
  • 我认为您可以在属性上使用枚举器并检查 null 如果这是您想要的方式,但我认为@MathiasR.Jessen 的想法肯定会更容易
  • 这是一个多功能脚本,一个功能是为每个服务器返回一个对象,并根据它是物理的还是虚拟的,是 2008 年还是 2012 年还是 2016 年等,分拆成不同的模块。看起来当时更容易从空白数组开始,然后,随着对象被返回并且逻辑决定下一步如何处理它,填充适当的数组。后面的一些模块接受整个数组作为参数。如果我无法使用当前代码完成我所追求的目标,我可能会重写它以仅使用对象。
  • @JLogan3o13 您能否发布一个包含值的示例数组?如果不能分享生成它的函数,就分享一个简单的语句重新创建它,like this

标签: arrays powershell foreach


【解决方案1】:

您的帖子中没有足够的信息来给出明确的答案(请使用您获得 $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"
    }
  }
}

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2016-07-29
    • 2010-10-30
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多