gelöst Powershell rechnet falsch?
functionstrut (Level 1) - Jetzt verbinden
24.10.2015, aktualisiert 25.10.2015, 1134 Aufrufe, 3 Kommentare
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.
3 Antworten
- LÖSUNG 114757 schreibt am 24.10.2015 um 09:19:28 Uhr
- LÖSUNG functionstrut schreibt am 24.10.2015 um 22:41:50 Uhr
- LÖSUNG 114757 schreibt am 25.10.2015 um 12:40:09 Uhr
LÖSUNG 24.10.2015, aktualisiert 25.10.2015
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:
01.
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 LÖSUNG 24.10.2015 um 22:41 Uhr
Hi,
vielen Dank für deine Hilfe auf die Lösung hätte ich auch selbst kommen können. garnicht so einfach wenn man von cmd auf powershell umsteigt :D
vielen Dank für deine Hilfe auf die Lösung hätte ich auch selbst kommen können. garnicht so einfach wenn man von cmd auf powershell umsteigt :D
LÖSUNG 25.10.2015, aktualisiert um 12:40 Uhr
Na dann fehlt ja nur noch das gelöst.
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte