
Ich möchte den verfügbaren Speicherplatz von mehreren Servern abrufen und die Werte mit geringem Speicherplatz (z. B. <20 GB) kennzeichnen. Ich habe Probleme mit der Kennzeichnung der niedrigen Werte.
Um den Speicherplatz zu beanspruchen, führe ich aus
$Array = gwmi win32_logicaldisk -ComputerName ComputerName | Select DeviceId, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}
Das gibt die Daten wie erwartet zurück;
DeviceId Size FreeSpace
-------- ---- ---------
A: 0 0
C: 79.9 14.3
D: 701 72.76
Z: 0 0
Dann kann ich $Array.Freespace nach Folgendem abfragen:
0
14.3
72.76
0
Da ich alle Werte unter 20 in dieser Liste kennzeichnen möchte, habe ich versucht, den folgenden Code auszuführen;
ForEach ($Value IN $Array.FreeSpace)
{IF ($Value -lt 20) {$Value = "WARNING"}
Nach der Ausführung gibt es jedoch keine Änderungen an meinem Array. Ich glaube, das Problem liegt darin $Value = "Warning"
: Ist dies die richtige Art, jeden einzelnen Wert in einer ForEach-Schleife zu ändern?
Als Endergebnis möchte ich, dass bei meiner Abfrage die folgenden Ergebnisse angezeigt werden $Array
:
DeviceId Size FreeSpace
-------- ---- ---------
A: 0 WARNING
C: 79.9 WARNING
D: 701 72.76
Z: 0 WARNING
Jede Hilfe ist sehr willkommen, Danke.
Antwort1
Ich glaube nicht, dass Sie Array-Unterelemente auf die von Ihnen gewünschte Weise festlegen können. Versuchen Sie stattdessen diesen Ansatz.
> $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
Arbeiten Sie jedes Element unter Bezugnahme auf den Freespace-Wert durch.