Alterando valores em uma matriz

Alterando valores em uma matriz

Quero extrair o espaço em disco disponível de vários servidores e sinalizar os valores com pouco espaço em disco (<20 GB, por exemplo). Estou tendo problemas para sinalizar os valores baixos.

Para extrair espaço em disco, eu corro

$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 retorna dados conforme esperado;

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

Posso então consultar $Array.Freespace para o seguinte;

0
14.3
72.76
0

Como desejo sinalizar quaisquer valores menores que 20 nesta lista, tentei executar o código abaixo;

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

No entanto, não há alterações no meu array depois de executar isso. Acredito que o problema esteja $Value = "Warning"- esta é a maneira correta de alterar cada valor individual em um loop ForEach?

Como resultado final, quero que os resultados mostrem o seguinte quando eu fizer uma consulta $Array:

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

Qualquer ajuda muito apreciada, obrigado.

Responder1

Não acho que você possa definir subitens do array da maneira que está tentando. Tente esta abordagem.

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

Trabalhe em cada item que faz referência ao valor Freespace.

informação relacionada