functionstrut
Goto Top

Powershell rechnet falsch?

Hallo,

ich bin schon seit Stunden am verzweifeln face-sad

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"}

3ab91cfb9fcaee8099fa59739ece06a4



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.

Content-Key: 286490

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

Printed on: April 24, 2024 at 08:04 o'clock

Mitglied: 114757
Solution 114757 Oct 24, 2015, updated at Oct 25, 2015 at 20:02:40 (UTC)
Goto Top
Moin,
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){
dann funktioniert das auch.

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 face-smile
Member: functionstrut
functionstrut Oct 24, 2015 at 20:41:50 (UTC)
Goto Top
Hi,

vielen Dank für deine Hilfe face-smile auf die Lösung hätte ich auch selbst kommen können. garnicht so einfach wenn man von cmd auf powershell umsteigt :D
Mitglied: 114757
114757 Oct 25, 2015 updated at 11:40:28 (UTC)
Goto Top
Na dann fehlt ja nur noch das gelöst.