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
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
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
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
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
$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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 237951
Url: https://administrator.de/contentid/237951
Ausgedruckt am: 21.11.2024 um 23:11 Uhr
2 Kommentare
Neuester Kommentar
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:
oder du listest dir direkt zu jeder Partition jeweils den Namen und den freien Speicher in GB mit einer Calculated Property auf:
Das gibt ein Objekt zurück mit den Partitionsnamen und direkt berechneter Größe in GB
Beispiel
wenn du das ganze komplett als String haben willst hängst du dem Konstrukt einfach noch ein
Grüße Uwe
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)}}
Beispiel
Name FreespaceInGB
---- -------------
D:\ 149,43
C:\ 87,1
format-table -AutoSize
an, oder formatierst es nach Wunsch mit einer foreach-Schleife.Grüße Uwe