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