修改数组中的值

修改数组中的值

我想从多个服务器中提取可用磁盘空间,并标记磁盘空间不足的值(例如,<20GB)。我在标记低值时遇到了麻烦。

为了提取磁盘空间,我运行

$Array = gwmi win32_logicaldisk -ComputerName ComputerName | Select DeviceId, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}} 

按预期返回数据;

DeviceId Size FreeSpace
-------- ---- ---------
A:          0         0
C:       79.9      14.3
D:        701     72.76
Z:          0         0

然后我可以查询 $Array.Freespace 以获取以下内容;

0
14.3
72.76
0

因为我想标记此列表中任何小于 20 的值,所以我尝试运行以下代码;

ForEach ($Value IN $Array.FreeSpace)
{IF ($Value -lt 20) {$Value = "WARNING"}

但是,运行此程序后,数组没有任何变化。我认为问题在于$Value = "Warning"- 这是在 ForEach 循环中更改每个单独值的正确方法吗?

最终我希望查询时显示以下内容$Array

DeviceId Size FreeSpace
-------- ---- ---------
A:          0     WARNING
C:       79.9     WARNING
D:        701     72.76
Z:          0     WARNING

非常感谢您的帮助,谢谢。

答案1

我认为您无法按照您尝试的方式设置数组子项。请尝试这种方法。

> $Array = gwmi win32_logicaldisk -ComputerName ComputerName | Select DeviceId, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}

> $array.freespace
144.56
146.88
0
2198.05

> foreach ($Drive in $Array) {IF ($Drive.Freespace -lt 20) {$Drive.Freespace = "WARNING"}}

> $array.freespace
144.56
146.88
WARNING
2198.05

> $array

DeviceId    Size FreeSpace
--------    ---- ---------
C:        220.26    144.56
D:        244.14    146.88
E:             0   WARNING
P:       3071.87   2198.05

参照 Freespace 值来处理每一项。

相关内容