Powershell Prozess überwachen und evtl. neu starten
Hallo zusammen
Ich habe einen Dienst welcher per Batch gestartet wird und den MainWindowTitle "Prod 1-2 Socket" hat.
Der Dienst hört auf dem TCP Port 8250.
Aufgaben für das Powershell Script:
- TCP Port überwachen ob der Port 8250 auf ist
- wenn der Port nicht offen ist, sofern der Batch aber noch offen ist, diesen schliessen
- anschliessend das Batch Script c:\scripts\prod1-2.bat starten
Ich habe bis jetzt folgenden Code:
Die Probleme sind folgende:
a) Wenn der Port nicht auf ist und er ein refused zurückbekommt geht er ins if und nicht ins else
b) Das Batchscript via Powershell starten
Danke für eure Hilfe
adminst
Ich habe einen Dienst welcher per Batch gestartet wird und den MainWindowTitle "Prod 1-2 Socket" hat.
Der Dienst hört auf dem TCP Port 8250.
Aufgaben für das Powershell Script:
- TCP Port überwachen ob der Port 8250 auf ist
- wenn der Port nicht offen ist, sofern der Batch aber noch offen ist, diesen schliessen
- anschliessend das Batch Script c:\scripts\prod1-2.bat starten
Ich habe bis jetzt folgenden Code:
$System = New-Object Net.Sockets.TcpClient "10.20.18.14", 8251
if($System)
{
""
}
else
{
$r = get-process | select * | where{$_.MainWindowTitle -match "PROD 1 - 2"} | select Id
stop-process $r.Id
# write-host $r.id
}
Die Probleme sind folgende:
a) Wenn der Port nicht auf ist und er ein refused zurückbekommt geht er ins if und nicht ins else
b) Das Batchscript via Powershell starten
Danke für eure Hilfe
adminst
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269064
Url: https://administrator.de/forum/powershell-prozess-ueberwachen-und-evtl-neu-starten-269064.html
Ausgedruckt am: 03.04.2025 um 05:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo adminst,
ich würde das mit Powershell so machen:
Ein ähnlich nützliches Script zum Thema findet man auch in diesem Thread:
Programm reagiert nicht - per Powershell neu starten?
Grüße Uwe
ich würde das mit Powershell so machen:
$listeningports = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpListeners()
$port = $listeningports | ?{$_.Port -eq 8250}
if (!$port){
write-host "There is no listener on Port 8250"
get-process * | ?{$_.MainWindowTitle -match "PROD 1 - 2"} | Stop-Process -Force
Start-Process "c:\scripts\prod1-2.bat"
}
Programm reagiert nicht - per Powershell neu starten?
Grüße Uwe
Naja ich würde das Script selber initial schon mit Powershell starten und überwachen dann hättest du schon die die ProcessID und das wäre eigentlich zielgerichteter.
Aber jeder wie er will.
Aber jeder wie er will.
$listeningports = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpListeners()
$port = $listeningports | ?{$_.Port -eq 8250}
if (!$port){
write-host "There is no listener on Port 8250"
$pid = netstat -ano | ?{$_ -match ".*?:8250"} | %{($_ -split '\s+')[5]} | select -First 1
if ($pid){
get-process -id $pid | Stop-Process -Force
}
Start-Process "c:\scripts\prod1-2.bat"
}