powershell - 通过数组枚举失败
问题描述
我正在枚举我们的 VMware 环境中的所有数据存储以获取名称和已用空间。
当我运行foreach
循环时,它既枚举数组,又不枚举数组。
这是我的脚本:
$list = @()
$row = '' | select Name, UsedSpace
$datastores = Get-Datastore
foreach ($store in $datastores) {
$row.name = $store.name;
$row.usedspace = [math]::Round(($store.extensiondata.summary.capacity - $store.extensiondata.summary.freespace)/1gb)
Write-Host $row; #To Verify that each row is different, and that enumeration is working#
$list += $row;
}
控制台输出:
@{name=datastore1; 已用空间=929} @{name=datastore2; 已用空间=300} @{name=datastore3; 已用空间=400}
$list
可变输出:
名称已用空间 数据存储3 400 数据存储3 400 数据存储3 400
所以它正在枚举。获取所有正确的数据。但由于某种原因,该行$list += $row
一直等到数组中的最后一个对象,只获取该数据,但知道数组中有 3 个对象,并用该对象数据填充每个索引。
我为排除故障所做的唯一一件事就是退回了我的 PowerShell 控制台。
解决方案
这样做的原因是这$row
是一个单一的对象。您创建了一次,然后不断更改其属性的值。当您将它添加到数组时,您添加的是对它的引用,而不是副本。因此,看到的值将始终是最近设置的值。
$row
在循环的每次迭代中重新创建您的。
推荐阅读
- angular - 如何为 FormGroup 设置名称?
- python - 如何清理字符串列表
- regex - 期望脚本:从 $argv 构造正则表达式字符串
- excel - 计算未来到期日
- xml - 如何将字符串输出到循环 XSLT 中
- reactjs - webpack.config with font-awesome
- c++ - Why is Vector used as a second argument to Priority Queue?
- swiftui - 使父视图的宽度成为最小孩子的宽度?
- oracle - 如何为存储超过 32767 个字节的 json_table 创建列?
- java - 使用 java 客户端从 jenkins 实时检索构建日志