tech1988
Goto Top

Batch-Datei PC anpingen mit Fehlermeldung

Hallo,
ich möchte gerne mit einer Batch Datei ein Rechner im Netzwerk anpingen. Wenn dieser nicht antwortet, soll ein Popup-Fenster erscheinen, dass der Rechner nicht antwortet. Wenn er antwortet, soll nichts passieren. Außerdem möchte ich die Batch Datei als Aufgabe jede Stunde ausführen lassen. Ist dies möglich? Wer kann mir weiterhelfen?

Content-Key: 550173

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

Printed on: April 26, 2024 at 16:04 o'clock

Member: peterla
peterla Feb 21, 2020 at 07:40:12 (UTC)
Goto Top
Hi Ingo!

Kleiner Gedankenanstoß:

Du kannst in diesem Fall recht gut mit der ersten Antwort aus diesem Thread arbeiten: Ping errorlevel auswerten bzw. header verwerten
Hier müsstest du nur noch "Antwort" und "Antwortxy" in deinem Skript mit den entsprechenden wirklichen Antworten austauschen und eine kleine if-Abfrage reinschmeißen.

Bezüglich stündlich laufen lassen: Windows Aufgabenplanung.
Bezüglich Pop-up-Fenster: Wenn das Skript läuft, geht einmal pro Stunde kurz die cmd.exe auf, die das bat-Skript ausführt. Die könntest du dann einfach mit einem "pause" an der entsprechenden Stelle offen lassen, wenn keine Antwort zurückkommt.

Grüße.
Member: erikro
Solution erikro Feb 21, 2020 at 07:47:30 (UTC)
Goto Top
Moin,

darf's auch ein wenig Powershell sein?

param(
$server = "localhost"  
)
Add-Type -Assembly 'System.Windows.Forms'  
while($true) {
    if (-not (Test-Connection -ComputerName $server -Quiet -count 1)){
        [Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, Windows.Forms.MessageBoxIcon]::Information)  
    }
    start-sleep -s 3600
}

hth

Erik
Member: tech1988
tech1988 Feb 21, 2020 updated at 08:08:49 (UTC)
Goto Top
@peterla: Kannst du mir das einmal zeigen mit der IF-Abfrage und dem Code? Bekomme das nicht hin, wenn ich das aus der Antwort in eine Batch-Datei kopiere.
Member: erikro
erikro Feb 21, 2020 at 08:07:36 (UTC)
Goto Top
Moin,

das ist ein Powershell-Skript, das Du unter der Powershell ausführen musst.

Liebe Grüße

Erik
Member: tech1988
tech1988 Feb 21, 2020 at 08:07:38 (UTC)
Goto Top
Kann ich das mit PowerShell auch als Aufgabe ausführen lassen?
Member: tech1988
tech1988 Feb 21, 2020 at 08:12:21 (UTC)
Goto Top
Klappt bei mir irgendwie nicht, was muss ich machen?
unbenannt
Member: erikro
Solution erikro Feb 21, 2020 at 08:14:07 (UTC)
Goto Top
Moin,

klar doch. Dann ändere das Skript so:

param(
$server = "localhost"  
)
Add-Type -Assembly 'System.Windows.Forms'  
if (-not (Test-Connection -ComputerName $server -Quiet -count 1)){
   [Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, Windows.Forms.MessageBoxIcon]::Information)  
}

Statt "localhost" kannst Du den Namen oder die IP des gewünschten Rechners eintragen. In der Aufgabenplanung steht dann als Befehl:

C:\Windows\System32\WindowsPowerShell\v1.0\powerShell.exe -ExecutionPolicy Bypass

und in die Zeile "Parameter" trägst Du ein

-command "absoluter_Pfad_zum_skript.ps1"  

Als Trigger einmal die Stunde und gut ist.

hth

Erik
Member: tech1988
tech1988 Feb 21, 2020 at 08:30:23 (UTC)
Goto Top
Es funktionier noch nicht, was mache ich falsch?
unbenannt
Member: erikro
erikro Feb 21, 2020 updated at 08:48:49 (UTC)
Goto Top
Moin,

sorry, mein Fehler. Die Kurzform des Dialogs funktioniert hier an der Stelle offenbar nicht. Also in lang:

PARAM (
    $server = "localhost"  
)

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form 
$form.Text = "$server antwortet nicht."  
$form.Size = New-Object System.Drawing.Size(300,130) 
$form.StartPosition = "CenterScreen"  

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(110,42)
$OKButton.Size = New-Object System.Drawing.Size(76,27)
$OKButton.Text = "OK"  
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)



# while($true) {
    if (-not (Test-Connection -ComputerName $server -Quiet -count 1)) {
        $form.ShowDialog()
    }
#    start-sleep -s 3600
#}

Die Rauten nimmst Du weg, wenn Du es händisch starten und einmal die Stunde ausführen willst. Oder eben einmal die Stunde per Aufgabenplanung. Der Dialog ist noch ein wenig hässlich. Aber das sind Kleinigkeiten. face-wink

<edit>Ich habe ihn noch ein wenig hübscher gemacht.</edit>

hth

Erik
Member: NikosLykos
Solution NikosLykos Feb 21, 2020 updated at 09:06:17 (UTC)
Goto Top
Hallo,

ich hatte den Verdacht, dass in der Kurzform
[Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, Windows.Forms.MessageBoxIcon]::Information)  

nach dem ::OK, einfach nur eine [ gefehlt hat:

[Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)  


Mfg
Klaus
Member: erikro
Solution erikro Feb 21, 2020 at 09:13:54 (UTC)
Goto Top
Moin,

Zitat von @NikosLykos:

Hallo,

ich hatte den Verdacht, dass in der Kurzform
[Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, Windows.Forms.MessageBoxIcon]::Information)  

nach dem ::OK, einfach nur eine [ gefehlt hat:

[Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)  

Jaaaaaaaaaaaaaaaaaaa! Es geht also doch. Da hatte jemand Tomaten auf den Augen und der war ich. face-wink Hier nochmal alles am Stück:

PARAM (
    $server = "localhost"  
)

Add-Type -AssemblyName System.Windows.Forms


while($true) {
    if (-not (Test-Connection -ComputerName $server -Quiet -count 1)) {
        [Windows.Forms.MessageBox]::Show("$server antwortet nicht.”, "", [Windows.Forms.MessageBoxButtons]::OK,[ Windows.Forms.MessageBoxIcon]::Information)  
    }
    start-sleep -s 3600
}

Danke für den Hinweis.

Liebe Grüße

Erik
Member: tech1988
tech1988 Feb 21, 2020 at 09:23:35 (UTC)
Goto Top
Klappt wunderbar face-smile . Habe aber noch ein Problem mit der Einbindung in der Aufgabenplanung. Wo trage ich den Parameter mit dem Pfad ein?
Habe es erstmal so wie im angehängten Bilde gemacht.
unbenannt
Member: tech1988
tech1988 Feb 21, 2020 at 11:12:37 (UTC)
Goto Top
Habe es hinbekommen. Danke an alle
Member: erikro
erikro Feb 21, 2020 at 11:37:22 (UTC)
Goto Top
Gerne. Markierst Du den Beitrag dann bitte auch noch als gelöst und die Antworten, die Dir geholfen haben.