Modificar valores en una matriz

Modificar valores en una matriz

Quiero extraer el espacio disponible en disco de varios servidores y marcar los valores con poco espacio en disco (<20 GB, por ejemplo). Tengo problemas para marcar los valores bajos.

Para aprovechar el espacio en disco, ejecuto

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

Que devuelve datos como se esperaba;

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

Luego puedo consultar $Array.Freespace para lo siguiente;

0
14.3
72.76
0

Como quiero marcar cualquier valor inferior a 20 en esta lista, intenté ejecutar el siguiente código;

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

Sin embargo, no hay cambios en mi matriz después de ejecutar esto. Creo que el problema radica en $Value = "Warning": ¿Es esta la forma correcta de cambiar cada valor individual en un bucle ForEach?

Como resultado final, quiero que los resultados muestren lo siguiente cuando realice una consulta $Array:

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

Cualquier ayuda muy apreciada, gracias.

Respuesta1

No creo que puedas configurar los subelementos de la matriz de la forma en que lo intentas. Pruebe este enfoque en su lugar.

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

Analice cada elemento haciendo referencia al valor de Freespace.

información relacionada