Изменение значений в массиве

Изменение значений в массиве

Я хочу извлечь доступное дисковое пространство из нескольких серверов и пометить значения с низким дисковым пространством (<20 ГБ для примера). У меня возникли проблемы с пометкой низких значений.

Чтобы освободить место на диске, я запускаю

$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.

Связанный контент