修改數組中的值

修改數組中的值

我想從多個伺服器中提取可用磁碟空間,並用低磁碟空間標記值(用於範例目的<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 值的每個項目。

相關內容