Powershell-skript

Diskutiere Powershell-skript im Webmaster Hilfe / Programmierer Forum Forum im Bereich Computerprobleme; Hallo Liebe Community ich habe eine frage zu einem Skript. Ich habe es im Internet gefunden und zu meinen Ansprüchen hin geändert. Allerdings...

  1. #1 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    Hallo Liebe Community

    ich habe eine frage zu einem Skript. Ich habe es im Internet gefunden und zu meinen Ansprüchen hin geändert. Allerdings funktioniert es nicht so wie es soll. Normalerweise sollen alle PC, die in der .txt-file gespeichert sind abgefragt werden und dann soll Powershell sagen, ja es geht oder nein es geht nicht. Allerdings geht so wie es jetzt ist jeder PC, auch die die aus sind.

    Hier ist mein Skript:
    Code:
    # Variablen 
    $serverliste = get-content "c:\ping\serverliste.txt" 
    $datum = get-date -format d 
    $zeit = get-date -format t 
    $user = $env:Username 
    $logfile = "c:\ping\temp\servercheck.txt" 
    $tmpfolder = "c:\ping\temp" 
    
    # Temp-Ordner leeren
    $tmpfolder2 = $tmpfolder + "\*.*" 
    remove-item -path $tmpfolder2 -force 
    
    # Logfile vorbereiten 
    "=================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    " Server Ping Protokoll " | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "=================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "Startdatum" | out-file -filepath $logfile -encoding default -append 
    "am: " + $datum + " um: " + $zeit | out-file -filepath $logfile -encoding default -append 
    " "| out-file -filepath $logfile -encoding default -append
    "von: " + $user | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    
    "=========================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "Anpingen der Server:" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    
    # Server pingen 
    foreach ($server in $serverliste){ 
    ping $server -n 2 | out-null 
    $PingErgebnisServer = "$lastexitcode" 
    if ($PingErgebnisServer -eq "0") { 
    $tmp =$server + " ok" 
    $tmp | out-file -filepath $logfile -encoding default -append
    $tmp | Sort-Object $server
    
    } else { 
    $tmp = $server + " ist nicht ereichbar! " 
    $tmp | out-file -filepath $logfile -encoding default -append 
    $tmp | Sort-Object $server 
    
    } 
    } 
    weiß jemand wodran es liegt, dass jeder PC als ok angezeigt wird, obwohl dieser aus ist?
     
  2. Anzeige

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Füge in deine Serverliste mal eine IP ein, die nicht exisitiert. Wird dann auch "OK" ausgegeben?
    In dem Fall schau mal auf den jeweiligen Rechnern nach, ob dort evtl. WOL für die Netzwerkkarten aktiviert ist. Dann geben die Dinger nämlich auch dann Antwort, wenn der Rechner nicht eingeschaltet ist.... (die Karten warten dann nur auf ein bestimmtes Magic-Packet, damit der Rechner gestartet wird.)
     
  4. #3 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    ich habe gerade eine IP mal eingefügt, die per cmd nicht anpingbar ist und die auch nicht zu gewiesen ist. Nur leider sagt mir das Skript, dass diese Adresse vorhanden ist und auch ereichbar.
     
  5. #4 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Sehr merkwürdig....
    Hab das script mal eben selbst getestet

    Die 2.2 ist eine virtuelle Maschine auf dem ESX-Server, die zur Zeit gestoppt ist.
    Die 3.30 existiert zwar, ist aber nicht eingeschaltet und auch nicht am Netzwerk angeschlossen....... Hier wird also irgendwas falsch ausgewertet.
     
  6. #5 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    ja das is echt voll merkwürdig das skript. bei anderen soll es aber laut deren aussage funktionieren.
     
  7. #6 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    Das kommt als Antwort aus dem Skript:



    Ping wird ausgef￾hrt f￾r 192.168.0.240 mit 32 Bytes Daten:

    Antwort von 192.168.0.64: Zielhost nicht erreichbar.

    Antwort von 192.168.0.64: Zielhost nicht erreichbar.



    Ping-Statistik f￾r 192.168.0.240:

    Pakete: Gesendet = 2, Empfangen = 2, Verloren = 0 (0% Verlust),





    Hab es jetzt mal mit einer Adresse getestet, die noch nie im Netzwerk vergeben war. Da funktioniert es. So wie es aussieht, liegt es daran, dass die Adressen evtl schonmal vergeben wurden.
    Aber wie kann ich die Auswertung anpassen?
     
  8. #7 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Hab bei mir den Fehler gefunden.
    Bei mir liefert auch meine Firewall "Zielhost nicht erreichbar" zurück, was mit einem ExitCode = "0" gleichbedeutend ist....

    Ping ist in diesem Zusammenhang also unzuverlässig auszuwerten.
    Es ist wohl sinnvoller, an dieser Stelle auf den Win32_PingStatus zurückzugreifen.
    Der liefert verschiedene Statuscodes zurück.
    0 = Erfolgreich
    11010 = Request Timed Out (keine Antwort innerhalb der erwarteten Zeit=nicht erreichbar)

    Versuch mal folgenden Code für deine ForEach-Schleife:
    Code:
    foreach ($server in $serverliste){
    $address = "Address='"+$server+"'"
    get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,ResponseTime,StatusCode|out-file -filepath $logfile -encoding default -append
    }
     
  9. #8 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    danke für die Hilfe, aber bei mir funktioniert es nicht. Oder muss ich zusätzlich noch etwas ändern?
    Mein Skript sieht jetzt so aus:


    Code:
    # Variablen 
    $serverliste = get-content "c:\ping\serverliste.txt" 
    $datum = get-date -format d 
    $zeit = get-date -format t 
    $user = $env:Username 
    $logfile = "c:\ping\temp\servercheck.txt" 
    $tmpfolder = "c:\ping\temp" 
    
    # Temp-Ordner leeren
    $tmpfolder2 = $tmpfolder + "\*.*" 
    remove-item -path $tmpfolder2 -force 
    
    # Logfile vorbereiten 
    "=================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    " Server Ping Protokoll " | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "=================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "Startdatum" | out-file -filepath $logfile -encoding default -append 
    "am: " + $datum + " um: " + $zeit | out-file -filepath $logfile -encoding default -append 
    " "| out-file -filepath $logfile -encoding default -append
    "von: " + $user | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    
    "=========================================================" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    "Anpingen der Server:" | out-file -filepath $logfile -encoding default -append 
    " " | out-file -filepath $logfile -encoding default -append 
    
    # Server pingen 
    foreach ($server in $serverliste){
    $address = "Address='"+$server+"'"
    get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,ResponseTime,StatusCode|out-file -filepath $logfile -encoding default -append
    
    if ($PingErgebnisServer -eq "0") { 
    $tmp =$server + " ok" 
    $tmp | out-file -filepath $logfile -encoding default -append
    $tmp | Sort-Object $server
    
    } else { 
    $tmp = $server + " ist nicht ereichbar! " 
    $tmp | out-file -filepath $logfile -encoding default -append 
    $tmp | Sort-Object $server 
    
    } 
    }
     
  10. #9 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Den kompletten IF-ELSE-Block kannst du in die Tonne kippen.
    Die Ausgabe erfolgt direkt in das Logfile ohne Anzeige auf dem Screen.
    Wenn du auch eine Ausgabe auf dem Display haben willst, dann füge vor der Zeile
    get-wmiobject -class ...blabla
    nochmals ein
    get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,ResponseTime,StatusCode
    (ohne das letzte Piping!) ein. Dann siehst du auch die Ergebnisse auf dem Bildschirm.
     
  11. #10 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    danke, jetzt klappts.


    Danke, danke, danke
     
  12. #11 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Wenn man nun noch herausfindet, wie man auf den Statuscode im Script zugreifen kann, könnte man die Ausgabe in die Logdatei schön anpassen.
     
  13. #12 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    joa das wäre was. das werde ich aber wahrscheinlich die nächsten paar tage bis zu meinem urlaub noch tun.
     
  14. #13 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Code:
    # Server pingen
    foreach ($server in $serverliste){
    $address = "Address='"+$server+"'"
    $ping =get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,ResponseTime,StatusCode
    if ($ping.statuscode -eq "0") {
    $server + " OK"|out-file -filepath $logfile -encoding default -append
    } else {
    $server + " nicht erreichbar!"|out-file -filepath $logfile -encoding default -append
    }
    }
    Bitteschön.....
    Damit kannst du dir dann auch wieder anhand des Statuscodes einen beliebigen Text in die Logdatei speichern.
     
  15. #14 kawageri, 20.07.2009
    kawageri

    kawageri Erfahrener Benutzer

    Dabei seit:
    10.07.2008
    Beiträge:
    449
    Zustimmungen:
    0
    Ort:
    Meerbusch
    dankeschön.

    jetzt werde ich mir das Skript noch genau angucken und dann habe ich wieder einiges gelernt.
     
  16. #15 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    ...ich auch!
    Hab bislang mit der Powershell noch nicht sonderlich viel gemacht, kann aber dieses Script selbst gut verwerten.
    Bei einem Kunden fällt regelmässig mal ein Server aus. Darüber kann ich mich ja jetzt per Mail informieren lassen.....
     
  17. Anzeige

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  18. #16 helidoc, 20.07.2009
    helidoc

    helidoc killed by a black pudding
    Moderator

    Dabei seit:
    01.06.2007
    Beiträge:
    3.647
    Zustimmungen:
    1
    Ort:
    Bluemchenwiese
    Nicht das ich dieses Skript nun persönlich bräuchte (hab mit Windows nix mehr am Hut), aber es wäre sicherlich praktisch für Leute die durch zB eine Suchmaschine dieses Thema hier gefunden haben, das komplette Skript am Stück zu sehen. Sonst muss sich derjenige auch alle oben genannten Schnippsel zusammenbauen.

    Ich hätte mir damals unter Windows sowas wie die Powershell gewünscht, dahinter steckt ein wirklich gutes Konzept.
     
  19. #17 xandros, 20.07.2009
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.166
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Wohl war! Deshalb hier nochmals als vollständiges Script:

    Anzupassen sind hierbei:
    - Pfad zur Serverliste
    - Pfad zur Logdatei
    - Pfad zum tmpFolder

    Code:
    # Variablen
    $serverliste = get-content "c:\pingtest\serverliste.txt"
    $datum = get-date -format d
    $zeit = get-date -format t
    $user = $env:Username
    $logfile = "c:\pingtest\log\test.txt"
    $tmpfolder = "c:\pingtest\log"
    # Temp-Ordner leeren
    $tmpfolder2 = $tmpfolder + "\*.*"
    remove-item -path $tmpfolder2 -force
    # Logfile vorbereiten
    "=================================================" | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    " Server Ping Protokoll " | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    "=================================================" | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    "Startdatum" | out-file -filepath $logfile -encoding default -append
    "am: " + $datum + " um: " + $zeit | out-file -filepath $logfile -encoding default -append
    " "| out-file -filepath $logfile -encoding default -append
    "von: " + $user | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    
    "=========================================================" | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    "Servererreichbarkeit prüfen:" | out-file -filepath $logfile -encoding default -append
    " " | out-file -filepath $logfile -encoding default -append
    # Server prüfen
    foreach ($server in $serverliste){
    $address = "Address='"+$server+"'"
    $ping =get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,ResponseTime,StatusCode
    if ($ping.statuscode -eq "0") {
    $server + " OK"|out-file -filepath $logfile -encoding default -append
    } else {
    $server + " nicht erreichbar!"|out-file -filepath $logfile -encoding default -append
    }
    }
    Und hier noch eine Version für alle Nutzer von Tobit David, die sich eine eMail mit den fehlerhaften Server-IPs zusenden lassen wollen (unter David.zehn getestet)
    Die Datei wird nur dann zum Server weitergeleitet, wenn tatsächlich ein Fehler vorliegt! Eine Netzwerkverbindung zum David-Server muss allerdings bestehen.

    Anzupassen sind hierbei:
    - Pfad zur Serverliste
    - Pfad zum Logfile
    - Pfad zum tmpfolder
    - Pfad zum Serververzeichnis (errorfile)
    - Empfänger eMail
    - Absender eMail

    Code:
    # Variablen
    $serverliste = get-content "c:\pingtest\serverliste.txt"
    $datum = get-date -format d
    $zeit = get-date -format t
    $logfile = "c:\pingtest\log\test.txt"
    $tmpfolder = "c:\pingtest\log"
    $errorfile = "\\Server-IP\david\apps\faxware\out\api\error"
    
    # Temp-Ordner leeren
    $tmpfolder2 = $tmpfolder + "\*.*"
    remove-item -path $tmpfolder2 -force
    #Error-Message vorbereiten
    "@@mailto [email]Empfaenger@Empfaenger.de[/email]@@"|out-file -filepath $logfile -encoding default -append
    "@@from [email]Serverueberwachung@Absender.de[/email]@@"|out-file -filepath $logfile -encoding default -append
    "@@subject Fehler! Server nicht erreichbar!@@"|out-file -filepath $logfile -encoding default -append
    "@@body"|out-file -filepath $logfile -encoding default -append
    "Pruefdatum " + $datum|out-file -filepath $logfile -encoding default -append
    "Zeit " + $zeit|out-file -filepath $logfile -encoding default -append
    "------------------------------------------------"|out-file -filepath $logfile -encoding default -append
    
    # Server prüfen
    foreach ($server in $serverliste){
    $address = "Address='"+$server+"'"
    $ping =get-wmiobject -class Win32_PingStatus -Filter $address|select-object -Property Address,StatusCode
    if ($ping.statuscode -ne "0") {
    $fehler="true"
    $server + " nicht erreichbar!"|out-file -filepath $logfile -encoding default -append
    }
    }
    
    # ErrorMessage abschliessen und an Server übergeben
    "------------------------------------------------"|out-file -filepath $logfile -encoding default -append
    "Bitte Netzwerkverbindungen pruefen!"|out-file -filepath $logfile -encoding default -append
    "@@" |out-file -filepath $logfile -encoding default -append
    if($fehler -eq "true"){
    copy $logfile $errorfile
    }
     
Thema: Powershell-skript
Besucher kamen mit folgenden Suchen
  1. powershell ping auswerten

    ,
  2. powershell computer erreichbar

    ,
  3. script pnig mehrere rechner mit auswertung

    ,
  4. powershell prüfen ob rechner erreichbar,
  5. powershell logfile auswerten,
  6. powershell server erreichbar,
  7. script ping auswerten,
  8. powershell script ping mit zeit und datum,
  9. powershell pingabfrage,
  10. powershell prüfen ob pc erreichbar,
  11. powershell prüfen ob ein computer erreichbar ist,
  12. ip liste pingen erreichbarkeit protokollieren,
  13. script für erreichbare rechner,
  14. powershell wol script,
  15. powershell script soll loggen,
  16. powershell script server erreichbarkeit,
  17. powershell prüfen ob ping erfolgreich,
  18. powershell log auswerten,
  19. erreichbarkeit von rechnern powershell script,
  20. ping powershell pc erreichbar,
  21. ping in powershell auswerten,
  22. powershell ping erfolgreich ,
  23. powershell prüfe ob ip erreichbar,
  24. prüfen welche rechner erreichbar,
  25. powershell erreichbarkeit rechner testen
Die Seite wird geladen...

Powershell-skript - Ähnliche Themen

  1. Bild per Skript auf den Desktop legen?

    Bild per Skript auf den Desktop legen?: Ja, hay liebes Forum. Ich hab vorkurzem mal gehört das man mithilfe eines Skriptes ein Bild auf dem Desktop anzeigen kann ohne irgendwelche...
  2. Powershell

    Powershell: Ich möchte Microsoft Fix it installieren der bricht aber immer ab weil er irgendwie powershell probleme hat weis einer wie ich powershell unter...
  3. PowerShell leere Zeilen in einer Textdatei ignorieren

    PowerShell leere Zeilen in einer Textdatei ignorieren: Ich habe eine Textdatei die leere Zeilen enthält. Nun liest Powershell die Datei mit der leere Zeile. Wie kann Powershell die leeren Zeilen in der...
  4. Skripten lernen/Skripten leicht gemacht

    Skripten lernen/Skripten leicht gemacht: hallo, ich würde gerne zum zeit vertreib Skripten lernen...aber da ich nicht weiß wie man anfangen soll oder mit welchem programm man das...
  5. Skripte kopieren legal?

    Skripte kopieren legal?: Ist es legal die Skripte anderer Websites zu kopieren und sie in seine eigene einzufügen? gruß alex