prorox
Goto Top

IF Funktion

Hallo liebe Community,

ich habe da ein Problem in meinem Skript..

get-WMIObject Win32_LogicalDisk -filter "name='c:'"| ForEach {$_.name, [math]::truncate($_.freespace/1GB)}

if ( $_.freespace -gt 10)
{"The value is greater than 10."}
else
{"The value is less than 10."
#write-eventlog -logname Application -source LANLINE -eventID 1 -entrytype Information -message "The value is less than 10 GB "
}

Dieses Skript soll mir ausgeben ob meine C Festplatte mehr oder weniger als 10 GB haben und anschließen falls es weniger als 10 GB sind ein Ereignissprotokoll erstellen.

Die IF Funktion, packt aber nicht richtig, da ich denke sie die Zahl von der gwmi Befehl nicht erkennt.

Oder denke ich gerade falsch?

Mit freundlichen Grüßen

prorox

Content-ID: 284843

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

122990
122990 07.10.2015 aktualisiert um 10:21:43 Uhr
Goto Top
get-WMIObject Win32_LogicalDisk -filter "name='c:'"| ?{([math]::truncate($_.freespace/1GB)) -lt 10} | %{write-eventlog -logname Application -source LANLINE -eventID 1 -entrytype Information -message "The value of $($_.Name) is less than 10 GB"}  

Gruß grexit
ProRox
ProRox 07.10.2015 um 11:04:20 Uhr
Goto Top
hmm, klappt leider nicht so ganz.

sobald die -lt Zahl Größer ist als der vorhandene Festplattenplatz z.B C Laufwerk hat nur noch 15 GB frei und im skript steht -lt 20 dann kommt diese Fehlermeldung im PowerShell ISE:

Write-EventLog : Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Protokolle, auf die kein Zugriff möglich war: Security.
Bei Zeile:1 Zeichen:119

back-to-topget-WMIObject Win32_LogicalDisk -filter "name='m:'"| ?{([math]::truncate($_.freespace/1GB)) -lt 20} | %{write-eventlog <<<< -logname Application -source LANLINE -eventID 1 -entrytype I

nformation -message "The value of $($_.Name) is less than 10 GB"}
+ CategoryInfo : NotSpecified: (face-smile [Write-EventLog], SecurityException
+ FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.WriteEventLogCommand
122990
122990 07.10.2015 aktualisiert um 11:46:30 Uhr
Goto Top
Den EventlogCode habe ich nur von dir übernommen, musst du selber korrigieren ... Wie der Fehler schon sagt, die Quelle (LANLINE) wurde nicht gefunden ! Also eine existierende nehmen oder anlegen ! Einfach mal die Doku zu write-eventlog studieren, sollte doch nicht so schwer sein ...ein bißchen mitdenken musst du schon ...

Beispiel:
# Neue Quelle "einmalig" erstellen 
New-EventLog –LogName Application –Source "LANLINE"  
# Eintrag ins Eventlog schreiben
Write-Eventlog -LogName Application -Source LANLINE -EventId 1 -EntryType Warning -Message "ACHTUNG"  

Lesen und verstehen: How to Use PowerShell to Write to Event Logs
ProRox
ProRox 14.10.2015 um 11:46:27 Uhr
Goto Top
Cool, Danke! hat soweit alles geklappt.

Habe allerdings den Filter auf -filter "DriveType=3" gesetzt das er mir alle Physikalischen Festplatten anzeigt (ohne Netzwerkplatten)
Jetzt ist meine Frage kann ich den verschiedenen Platten verschiedene Grenzwerte also -lt 10, 20, 30 GB geben oder können nur alle gleich bleiben?
122990
122990 14.10.2015, aktualisiert am 15.10.2015 um 11:44:27 Uhr
Goto Top
Zitat von @ProRox:
Habe allerdings den Filter auf -filter "DriveType=3" gesetzt das er mir alle Physikalischen Festplatten anzeigt (ohne Netzwerkplatten)
Jetzt ist meine Frage kann ich den verschiedenen Platten verschiedene Grenzwerte also -lt 10, 20, 30 GB geben oder können nur alle gleich bleiben?
Kein Problem ..
gwmi Win32_LogicalDisk -Filter "DriveType=3" | %{  
    $freespace = $_.Freespace
    $message = $null
    switch($_.DeviceID){
        'C:'{  
            if ($freespace -lt 10GB){$message = "C: hat weniger als 10GB"}  
        }
        'D:'{  
            if ($freespace -lt 20GB){$message = "D: hat weniger als 20GB"}  
        }
        'E:'{  
            if ($freespace -lt 30GB){$message = "E: hat weniger als 30GB"}  
        }
    }
    if ($message){
        Write-Eventlog -LogName Application -Source LANLINE -EventId 1 -EntryType Warning -Message $message
    }
}
Gruß grexit
ProRox
ProRox 15.10.2015 um 08:04:27 Uhr
Goto Top
Sehr gut, Dankeschön
aber das anhand des Filters der lokalen Platten die if sätze automatisch generiert werden sehe ich als tricky
also das man die .ps1 datei auf verschiedene Server laufen lassen kann ohne die Laufwerke andauernd zu ändern mal 5 mal 3 im Quellcode. ? :D
also sozusagen eine Schleife
122990
122990 15.10.2015 um 10:33:58 Uhr
Goto Top
Nö, aber du musst halt wissen welches Laufwerk welche Begrenzung bekommen soll, das wird im Beispiel halt anhand der LW-Buchstaben gemacht. Wie du das regeln willst ist mir leider nicht bekannt!!
ProRox
ProRox 15.10.2015 aktualisiert um 10:41:34 Uhr
Goto Top
Okay, dann lasse ich es so face-smile
aber irgendwie packt die -lt Zeile nicht, da mein C Laufwerk genug GB hat, bzw mehr als 20

Er trägt immer alle Eventlogs ein, auch die mit dem Laufwerk C

$LW1 = 'C:'     
$GB1 = 20
$LW2 = 'D:'     
$GB2 = 10
$LW3 = 'E:'     
$GB3 = 30
 


gwmi Win32_LogicalDisk -Filter "DriveType=3" | % {switch($_.DeviceID)  
  
    { 
        $LW1{ 

            if ($_.Freespace/1GB -lt $GB1 ){$message = "Die restliche Kapazität von Laufwerk $LW1 beträgt weniger als $GB1 Speicherplatz"}   
        } 

        $LW2{ 

            if ($_.Freespace/1GB -lt $GB2 ){$message = "Die restliche Kapazität von Laufwerk $LW2 beträgt weniger als $GB2 GB Speicherplatz"}  
        }

        $LW3{ 

            if ($_.Freespace/1GB -lt $GB3 ){$message = "Die restliche Kapazität von Laufwerk $LW3 beträgt weniger als $GB3 GB Speicherplatz"}  
        } 

       default {$message = ""}   

    } 
    
    
    if ($message -ne "")  
    { 
        Write-Eventlog -LogName Application -Source HardDisk -EventId 1 -EntryType Warning -Message $message 
    } 
}
122990
122990 15.10.2015 aktualisiert um 10:43:19 Uhr
Goto Top
Zitat von @ProRox:

Okay, dann lasse ich es so face-smile
aber irgendwie packt die -lt Zeile nicht, da mein C Laufwerk genug GB hat, bzw mehr als
Ist ja klar, denn du hast die Angabe GB hinter der Zahl in deiner Variablen vergessen !!
20GB wir in der Konsole automatisch zu Bytes expandiert
ProRox
ProRox 15.10.2015 um 10:45:38 Uhr
Goto Top
klappt trotzdem nicht, er trägt trotzdem alle eventlogs ein obwohl die -lt zahl stimmt..
122990
122990 15.10.2015 aktualisiert um 10:48:06 Uhr
Goto Top
Du hast ja auch alles abgeändert und es nicht so gemacht wie ich oben gepostet habe, du brauchst Freespace nicht durch 1GB teilen !!!!!!!!
Freespace ist in Bytes und die Angabe 20GB wird ebenfalls zu Bytes expandiert, also ist eine Umrechnung Schwachsinn und nicht nötig !!
ProRox
ProRox 15.10.2015 um 10:50:22 Uhr
Goto Top
so oder so klappt das auch nicht, hab ein wenig herum probiert, aber dein quellcode passt auch nicht so richtig, da der alle 3 eventlogs immer einträgt obwohl der Speicher ausreichend vorhanden ist..
122990
122990 15.10.2015 aktualisiert um 11:07:27 Uhr
Goto Top
Doch, klappt hier einwandfrei, mach das ja tagtäglich ... So ne Kinderkacke ...
Wenn du es ja immer abänderst ohne zu wissen was du da machst kein Wunder das es bei dir nicht klappt...sorry

Schau mal ganz genau hin ... dann findest du deinen Fehler.
ProRox
ProRox 15.10.2015 um 11:17:24 Uhr
Goto Top
hab die GB wieder hinzugefügt hinter den zahlen und durch 1GB auch schon etnfernt, allerdings schreibt er mir immer noch alle eventlogs rein..
122990
122990 15.10.2015 aktualisiert um 11:20:25 Uhr
Goto Top
Zitat von @ProRox:

hab die GB wieder hinzugefügt hinter den zahlen und durch 1GB auch schon etnfernt, allerdings schreibt er mir immer noch alle eventlogs rein..
Kopiere doch bitte meinen Code von oben, dann findest du deinen Fehler ... dir fehlt die Variablendeklaration innerhalb der Schleife ...
Hat dein Browser einen Knacks ?
ProRox
ProRox 15.10.2015 um 11:35:05 Uhr
Goto Top
Ja jetzt passts, aber warum trägt er mir denn zwei mal laufwerk E ein ins Eventlog
122990
122990 15.10.2015 aktualisiert um 11:45:12 Uhr
Goto Top
Zitat von @ProRox:
Ja jetzt passts, aber warum trägt er mir denn zwei mal laufwerk E ein ins Eventlog
Ok dann hast du vermutlich eine ältere Powershell, habs dafür oben mal angepasst.