tlberlus
Goto Top

Partitionen auslesen

Hi Zusammen,

ich probiere mich momentan an der Powershell, stoße momentan leider auf das Problem, dass sich mein Skript weigert, dass zu tun was ich will...
Oder ich kann ihm nich mitteilen, was ich will, was wahrscheinlicher ist face-smile
Aber egal, mein Problem ist, dass das Skript bei PCs mit mehreren Partitionen folgenden Fehler ausgibt:

Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Division" enthält.
In C:\Users\PC\Desktop\Freespace.ps1:14 Zeichen:1

back-to-top$size2 = $sizebit2/1024/1024/1024


Skript

function all{
foreach ($a in $array) {
$computer2 = $a
$letter2 = Get-WmiObject win32_volume -computername $computer2 | Select-Object Name, freespace | where Name -like "*:\" | where freespace -gt 0.5 | Select -expand Name
$sizebit2 = Get-WmiObject win32_volume -computername $computer2 | Select-Object Name, freespace | where Name -like "*:\" | where freespace -gt 0.5 | Select -expand freespace
$size2 = $sizebit2/1024/1024/1024
$sizegb2 = "{0:N2}" -f $size2
$outputBox.AppendText("$Computer2 $letter2 $sizegb2 GB Frei
")
$letter2 = " "
$size2= " "
$sizebit2 = " "
$sizegb2 = " "
$computer2 = " "
}
}

function single{
$computer1 = $objpc1.text
$letter1 = Get-WmiObject win32_volume -computername $computer1 | Select-Object Name, freespace | where Name -like "*:\" | where freespace -gt 0.5 | Select -expand Name
$sizebit1 = Get-WmiObject win32_volume -computername $computer1 | Select-Object Name, freespace | where Name -like "*:\" | where freespace -gt 0.5 | Select -expand freespace
$size1 = $sizebit1/1024/1024/1024
$sizegb1 = "{0:N2}" -f $size1
$outputBox.AppendText("$computer1 $letter1 $sizegb1 GB Frei
")
$letter1 = " "
$sizebit1 = " "
$size1 = " "
$sizegb1 = " "
$computer1 = " "
}

Habt ihr eine Idee warum das nich funktioniert, bzw. was ich anpassen muss?

Grüße,

Tiberius

Content-ID: 237951

Url: https://administrator.de/contentid/237951

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

Xaero1982
Xaero1982 13.05.2014 um 19:18:06 Uhr
Goto Top
Hi,

was willst du denn überhaupt erreichen?

Benutze bitte code Tags <"code"> <"/code"> ohne ""

Was gibt er denn aus bei $sizebit2 =

Gruß
colinardo
Lösung colinardo 13.05.2014, aktualisiert am 18.06.2014 um 15:15:41 Uhr
Goto Top
Hallo Tiberius,
dein Problem ist folgendes: Wenn ein System mehrere Partitionen hat, bekommst du nicht nur eine Zahl zurück, sondern ein Array aus Zahlen, also für jede Partition auf die die Bedingungen zutrifft, erhältst du den freien Speicherplatz ! Hier musst du entweder deine Bedingungen so einschränken das nur eine Partition zurückgegeben wird, oder auf den ersten Eintrag mit select -First 1 -ExpandProperty Freespace einschränken, oder das Ergebnis des Arrays addieren wenn das gewünscht ist.

Um den freien Speicher aller Partitionen zu addieren kannst du es z.B. so machen:
$sizebit2 = (gwmi win32_volume -computername $computer2 | ?{$_.Name -like "*:\" -and $_.Freespace -gt 0.5 } | measure -Sum -Property Freespace).Sum  

oder du listest dir direkt zu jeder Partition jeweils den Namen und den freien Speicher in GB mit einer Calculated Property auf:
gwmi win32_volume | ?{$_.Name -like "*:\" -and $_.Freespace -gt 0.5 } | select Name,@{Name="FreespaceInGB";e={[Math]::Round($_.Freespace/(1024*1024*1024),2)}}  
Das gibt ein Objekt zurück mit den Partitionsnamen und direkt berechneter Größe in GB
Beispiel
Name FreespaceInGB
---- -------------
D:\         149,43
C:\           87,1
wenn du das ganze komplett als String haben willst hängst du dem Konstrukt einfach noch ein format-table -AutoSize an, oder formatierst es nach Wunsch mit einer foreach-Schleife.

Grüße Uwe