배열의 값 수정

배열의 값 수정

여러 서버에서 사용 가능한 디스크 공간을 가져와서 디스크 공간이 부족한 값(예제 목적으로 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 값을 참조하여 각 항목을 살펴봅니다.

관련 정보