Powershell rechnet falsch?
Hallo,
ich bin schon seit Stunden am verzweifeln
ich habe mir ein Script geschrieben was von mehreren Festplatten den freien Speicherplatz ermittelt aber nach jeder festplatte überprüft ob ein bestimmter Ordner auf diese Festplatte passt.
leider rechnet Powershell irgendwie falsch oder eine Variable haut nicht hin? (Obwohl sie ja richtig ausgegeben wird wie in dem letzten Satz zu sehen)
$Ordner = Get-Item "E:\ordner"
$Groesse = (Get-ChildItem $Ordner.FullName -Recurse | Measure-Object -Property length -Sum).Sum
$GroesseGB = "{0:N2}" -f ($Groesse/1GB)
Write-Host "Der ordner ist $GroesseGB GB gross"
$Festplatte1 = get-wmiobject -computer computername win32_volume -Filter "Label='Festplatte 1'" | Select -ExpandProperty FreeSpace
$Festplatte1GB = "{0:N2}" -f ($Festplatte1/1GB)
Write-Host "Auf dieser Festplatte sind noch $Festplatte1GB frei"
Write-Host "GroesseGB hat den Wert $GroesseGB"
Write-Host "Festplatte1GB hat den Wert $Festplatte1GB"
if( "$Festplatte1GB" -gt "$GroesseGB" ){
Write-Output "_1" | Out-File -FilePath .\Powershell_test_Ausgabe.txt -Encoding ascii
Write-Host "Der Ordner mit $GroesseGB passt auf die Festplatte"
}
else {Write-Host "Der Ordner mit $GroesseGB GB passt NICHT auf die Festplatte auf der noch $Festplatte1GB GB frei sind"}
wenn ich bei if den vergleich von -gt auf -lt ändere, Stimmt das Ergebnis (er sagt es ist genug Speicher vorhanden) aber das ist dann genau falschrum.
ich bin schon seit Stunden am verzweifeln
ich habe mir ein Script geschrieben was von mehreren Festplatten den freien Speicherplatz ermittelt aber nach jeder festplatte überprüft ob ein bestimmter Ordner auf diese Festplatte passt.
leider rechnet Powershell irgendwie falsch oder eine Variable haut nicht hin? (Obwohl sie ja richtig ausgegeben wird wie in dem letzten Satz zu sehen)
$Ordner = Get-Item "E:\ordner"
$Groesse = (Get-ChildItem $Ordner.FullName -Recurse | Measure-Object -Property length -Sum).Sum
$GroesseGB = "{0:N2}" -f ($Groesse/1GB)
Write-Host "Der ordner ist $GroesseGB GB gross"
$Festplatte1 = get-wmiobject -computer computername win32_volume -Filter "Label='Festplatte 1'" | Select -ExpandProperty FreeSpace
$Festplatte1GB = "{0:N2}" -f ($Festplatte1/1GB)
Write-Host "Auf dieser Festplatte sind noch $Festplatte1GB frei"
Write-Host "GroesseGB hat den Wert $GroesseGB"
Write-Host "Festplatte1GB hat den Wert $Festplatte1GB"
if( "$Festplatte1GB" -gt "$GroesseGB" ){
Write-Output "_1" | Out-File -FilePath .\Powershell_test_Ausgabe.txt -Encoding ascii
Write-Host "Der Ordner mit $GroesseGB passt auf die Festplatte"
}
else {Write-Host "Der Ordner mit $GroesseGB GB passt NICHT auf die Festplatte auf der noch $Festplatte1GB GB frei sind"}
wenn ich bei if den vergleich von -gt auf -lt ändere, Stimmt das Ergebnis (er sagt es ist genug Speicher vorhanden) aber das ist dann genau falschrum.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286490
Url: https://administrator.de/forum/powershell-rechnet-falsch-286490.html
Ausgedruckt am: 21.02.2025 um 11:02 Uhr
3 Kommentare
Neuester Kommentar

Moin,
Bedenke immer, jede Variable hat in Powershell einen Typ (integer, string, double, float, byte, etc.)
Das musst du Powershell schon mitteilen was du wie vergleichen willst! Den Typ einer Variablen kannst du die mit $Groesse.getType() von einer Variablen anzeigen lassen....
Schreib also:
dann funktioniert das auch.
Gruß jodel32

leider rechnet Powershell irgendwie falsch
Nein, das tut sie ganz bestimmt nicht, du machst nur statt eines Zahlen- einen String-Vergleich, erstens weil du in deinem IF-Vergleich Anführungszeichen um die Variablen setzt und zweitens solltest du zum Vergleich besser die RAW-Byte Werte nehmen.Bedenke immer, jede Variable hat in Powershell einen Typ (integer, string, double, float, byte, etc.)
Das musst du Powershell schon mitteilen was du wie vergleichen willst! Den Typ einer Variablen kannst du die mit $Groesse.getType() von einer Variablen anzeigen lassen....
Schreib also:
if( $Festplatte -gt $Groesse){
Gruß jodel32
wenn ich bei if den vergleich von -gt auf -lt ändere, Stimmt das Ergebnis (er sagt es ist genug Speicher vorhanden) aber das ist dann genau falschrum
Genau das passiert dann beim Stringvergleich 
Na dann fehlt ja nur noch das gelöst.