
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.