【发布时间】: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