Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell Prozesse überwachen und killen

Frage Entwicklung

Mitglied: greenhorn101

greenhorn101 (Level 1) - Jetzt verbinden

18.02.2011, aktualisiert 02.11.2016, 13469 Aufrufe, 3 Kommentare

Hallo liebes Forum,

ich will auf einem Server Prozesse überwachen, damit ich ein anderes PowerShell Skript ausführen kann.
Das Problem ist, dass gewisse Prozesse hängen bleiben (auch der Task Scheduler mit dem ich das andere Skript ausführen will).
Wie man gewisse Prozesse stoppt weiß ich, aber wie kann ich das Skript so schreiben dass es erst schaut welche Prozesse laufen und welche davon hängen?
Dann eben nur diese killed die hängen??

Ich denke eine Schleife wäre am Sinnvollsten.

Prozesse beenden:

01.
Get-Process | Where-Object { $_.name -eq "iexplore" } | Foreach-Object { $_.Kill() }


Grüße greenhorn101
Mitglied: H41mSh1C0R
18.02.2011 um 11:53 Uhr
01.
Get-Process * | where {$_.responding -like "False"} | stop-process
Hier werden alle Prozesse Beendet die keine Rückmeldung liefern.

vg
Bitte warten ..
Mitglied: thl1966
04.09.2012 um 08:44 Uhr
Hallo liebe Forengemeinde,

möchte auch Prozess am Server überwachen.

Wie man den hängenden Prozess ermittelt und beendet ist mir bekannt.

Manchmal hängt ein Prozess eine bestimmte Zeit und läuft dann weiter.
Dieser Prozess soll aber dann weiterlaufen.

Wenn der Prozess sagen wir >5 min. hängt, dann erst soll der Prozess beendet werden.
Habe mir erst mal damit beholfen, eine bestimmte Zeitspanne zu warten und dann erneut den hängenden Prozess abzufragen.
Aber in der Zeitspanne, kann der Prozesszustand von Not Responding wieder auf Normalzustand sein und evtl. dann wieder kurz hängen. Nach dieser Zeitspanne kille ich dann den Prozess.

Den Prozess wird um 23 Uhr auf jeden Fall beendet.

Wie kann ich das eleganter realisieren?

Vieleicht hat jemand einen fertigen Code.

Hier mein Code:

01.
# ---------- 
02.
# Funktionen 
03.
# ---------- 
04.
 
05.
 
06.
Function Prozess_beenden($Prozessname) 
07.
08.
  get-process | where-object {$_.name -eq $Prozessname} | Foreach-Object {$_.kill()}   
09.
} # Ende Funktion Prozess_beenden 
10.
 
11.
 
12.
 
13.
Function Datum_Uhrzeit_ermitteln() 
14.
15.
  $Datum = (Get-Date).ToShortDateString() 
16.
  $Wochentag = Get-Date $Datum -Format dddd 
17.
  $Zeit = (Get-Date).ToShortTimeString() 
18.
  # Write-Host "Zeit aktuell" + $Zeit 
19.
   
20.
} # Ende Function Datum_Uhrzeit_ermitteln() 
21.
 
22.
 
23.
 
24.
# ------------------------------------- 
25.
# Variablen Deklarieren-/Initialisieren 
26.
# ------------------------------------- 
27.
 
28.
  $Datum = (Get-Date).ToShortDateString() # Datum in Variable $Datum und in String umwandeln 
29.
  $Zeit = (Get-Date).ToShortTimeString() # Zeit herausziehen und in einen String umwandeln 
30.
  $Stunden = $Zeit.substring(0,2) # Nur die Stunden extrahieren 
31.
  $Minuten = $Zeit.substring(3,2) # Nur die Minuten extrahieren 
32.
  $Tag = $Datum.substring(0,2) # Nur Tag extrahieren 
33.
  $Monat = $Datum.substring(3,2) # Nur Monat extrahieren 
34.
  $Jahr = $Datum.substring(6,4) # Nur Jahr extrahieren 
35.
  $Wochentag = Get-Date $Datum -Format dddd 
36.
 
37.
  $AbsturzZaehler=0 
38.
  $AbsturzZeit = 0 
39.
  $Prozess = "Druckerspooler" # Prozess,der überwacht werden und ggfls. beendet werden soll (Ohne die Erweiterung .exe eingeben!) 
40.
  $ProzessEnde = "23:00" 
41.
  $U = 0 # Zähler der auf 0 bleiben soll, da die Schleife nicht abbrechen darf! 
42.
 
43.
 
44.
# ------------------ 
45.
# Bildschirm löschen 
46.
# ------------------ 
47.
 
48.
  Clear-Host 
49.
 
50.
# ---------------------------------------- 
51.
# Meldung vor Start des Programms ausgeben 
52.
# ----------------------------------------- 
53.
 
54.
  Write-Host "Prozess: " $Prozess " wird um " $ProzessEnde " Uhr beendet! sowie hängende Prozess auch" 
55.
 
56.
 
57.
# Endlos-Schleife 
58.
 
59.
 
60.
do { 
61.
    do { 
62.
 
63.
        # Aktuelle Uhrzeit ermitteln 
64.
        $Datum = (Get-Date).ToShortDateString() 
65.
        $Wochentag = Get-Date $Datum -Format dddd 
66.
        $Zeit = (Get-Date).ToShortTimeString() 
67.
        # --------------------------------------- 
68.
         
69.
                 
70.
        # Prozess wird um 23:00 Uhr beendet, auch wenn der Prozess nicht abgestürzt ist 
71.
        if ($Zeit -eq $Prozessende) { Prozess_beenden($Prozess) } 
72.
        } while ($Haengender_Prozessname.Processname -ne $Prozess) # Druchlaufen, solange bis kein Dienst hängt!     
73.
        # ------------------------------------------------------------------------------------------------------ 
74.
 
75.
        # Ab hier Befehle ausführen, da der Prozess hängen geblieben ist 
76.
 
77.
        # 5 Minuten warten 
78.
        wait-event -timeout 300 
79.
        # --------------------- 
80.
 
81.
        # Aktuelle Uhrzeit auf dem Bildschirm ausgeben 
82.
          $Zeit 
83.
        # -------------------------------------------- 
84.
         
85.
        # Hinweiß-Meldung ausgeben 
86.
                 
87.
        write-host "Der Prozess: " $Prozess " scheint länger als 5 Minuten zu hängen!" -foregroundcolor red -backgroundcolor yellow 
88.
        Write-Host "Beende den Prozess: " $Prozess " auf dem Amotiq-Server" -foregroundcolor red -backgroundcolor yellow 
89.
        Write-Host $Prozess + "wird von WatchDog neu gestartet.... keine Aktion im Skript erforderlich!" 
90.
        Write-Host ""    
91.
         
92.
        # Wenn jetzt der Prozess noch hängt, dann Prozess beenden 
93.
          Prozess_beenden($Prozess) 
94.
        # ------------------------------------------------------- 
95.
         
96.
        # ---------------------------------- 
97.
        # Anzahl der Abstürze protokollieren 
98.
        # ---------------------------------- 
99.
                   
100.
        $AbsturzZaehler = $AbsturzZaehler +1 
101.
        Write-Host "Absturz Nummer: " $AbsturzZaehler 
102.
        Write-Host "" 
103.
 
104.
        # ------------------------------------------------------------------------------------------------------------------------------------- 
105.
        # Aktuelles Datum mit Wochentag und Uhrzeit holen, sonst wäre das Datum-/Uhr immer die, als die erste Do-While-Schleife verlassen wurde 
106.
        # ------------------------------------------------------------------------------------------------------------------------------------- 
107.
      
108.
        Datum_Uhrzeit_ermitteln 
109.
 
110.
        # ----------------------------------------- 
111.
        # Datum mit Wochzentag und Uhrzeit anzeigen 
112.
        # ----------------------------------------- 
113.
            
114.
        Get-Date 
115.
 
116.
        # ---------------------------------------- 
117.
        # Nachricht für den Mailversand definieren 
118.
        # ---------------------------------------- 
119.
 
120.
        $Betreff = "Prozess: " + $Prozess + " hängt am Produktiv-Server und wurde neu gestartet!" 
121.
        $Nachricht = "Prozess: " + $Prozess + " hängt am Produktiv-Server und wurde neu gestartet! -> Datum: " + $Zeit 
122.
 
123.
        # Aktuelle Uhrzeit ermitteln 
124.
        $Datum = (Get-Date).ToShortDateString() 
125.
        $Wochentag = Get-Date $Datum -Format dddd 
126.
        $Zeit = (Get-Date).ToShortTimeString() 
127.
        # --------------------------------------- 
128.
 
129.
         
130.
        # Prozess wird um 23:00 Uhr beendet 
131.
        if ($Zeit -eq $ProzessEnde) { Prozess_beenden($Prozess) } 
132.
        # ------------------------------------------------ 
133.
     
134.
} Until ($U -ne 0) # Da $U nie verändert wird, läuft die Schleife unendlich, da $U immer 0 und nicht <> ist! 
135.
 
136.
 
137.
 
138.
# ---------------------- 
139.
# Ende Powershell-Skript 
140.
# -------
Bitte warten ..
Mitglied: thl1966
05.09.2012 um 08:45 Uhr
Möchte aber den Prozess erst beenden, wenn die Rückmeldung min. eine bestimmte Zeitspanne z.b. 10 min. ist.

D.h. hängt der Prozess z.b. 10 Min. lang, dann erst Prozess beenden.

Hintergrund ist der, dass auf dem Server ein wichtigter Produktionsprozess läuft, der einmal pro Woche abstürzt.
Dann soll der Prozess beendet werden. Über das Programm Watchdog wird dann dieser Prozess neu gestartet.

Wenn z.B. der Prozess, weil er gerade ausgelastet ist ca. 2-4 Min. "hängt" bzw. Not Responding bekommt, dann soll er natürlich weiterlaufen. Erst nachdem der Prozess länger als die Zeitspanne nicht mehr reagiert, dann soll der Prozess beendet werden.

Das mit dem Druckerspooler war nur ein Test-Skript.

Gruß

Thomas
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Powershell - In Textdatei suchen und ersetzen

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Hashtable to Übersichtliche Darstellung (2)

Frage von Marabunta zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...