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-ID: 550173

Url: https://administrator.de/forum/batch-datei-pc-anpingen-mit-fehlermeldung-550173.html

Ausgedruckt am: 23.12.2024 um 01:12 Uhr

peterla
peterla 21.02.2020 um 08:40:12 Uhr
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.
erikro
Lösung erikro 21.02.2020 um 08:47:30 Uhr
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
tech1988
tech1988 21.02.2020 aktualisiert um 09:08:49 Uhr
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.
erikro
erikro 21.02.2020 um 09:07:36 Uhr
Goto Top
Moin,

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

Liebe Grüße

Erik
tech1988
tech1988 21.02.2020 um 09:07:38 Uhr
Goto Top
Kann ich das mit PowerShell auch als Aufgabe ausführen lassen?
tech1988
tech1988 21.02.2020 um 09:12:21 Uhr
Goto Top
Klappt bei mir irgendwie nicht, was muss ich machen?
unbenannt
erikro
Lösung erikro 21.02.2020 um 09:14:07 Uhr
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
tech1988
tech1988 21.02.2020 um 09:30:23 Uhr
Goto Top
Es funktionier noch nicht, was mache ich falsch?
unbenannt
erikro
erikro 21.02.2020 aktualisiert um 09:48:49 Uhr
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
NikosLykos
Lösung NikosLykos 21.02.2020 aktualisiert um 10:06:17 Uhr
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
erikro
Lösung erikro 21.02.2020 um 10:13:54 Uhr
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
tech1988
tech1988 21.02.2020 um 10:23:35 Uhr
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
tech1988
tech1988 21.02.2020 um 12:12:37 Uhr
Goto Top
Habe es hinbekommen. Danke an alle
erikro
erikro 21.02.2020 um 12:37:22 Uhr
Goto Top
Gerne. Markierst Du den Beitrag dann bitte auch noch als gelöst und die Antworten, die Dir geholfen haben.