Jump to content

VBScript - Startscript Abhängigkeit zu Ping von IPs?


Empfohlene Beiträge

Geschrieben

Hallo und Guten Morgen in die Runde.

Da sich meine VBScript - Kenntnisse leider auf einem bescheidenen Stand befinden, bitte ich um Unterstützung bei der Anpassung / Erweiterung dieses Anmeldescripts.

Ziel ist es den PC automatisiert, bei nicht erreichen beider „checkPC01 + checkPC02“ Ip-Adressen, herunterzufahren.

1. PC startete automaisch (Bioseinstellung)
2. VBA Startscript wird über Autostart abgerufen
3. es sollte eine kontinuierliche Prüfung auf Erreichbarkeit beider IP’s stattfinden
4. so bald beide IP’s zusammen über einen Zeitraum von x Minuten nicht erreichbar sind, sollte PC herunterfahren

Vielen Dank im Voraus

 

Set WSHShell = WScript.CreateObject("WScript.Shell")  

Dim checkPC01, checkPC02
Dim objResult
' Überprüfungsrechner  
checkPC01 = "192.xxx.xxx.xxx"		'PC01  
checkPC02 = "192.xxx.xxx.xxx"		'PC02  

' Überprüfe ob checkPC01 online ist  
Do Until Ping_Network(checkPC01)
	objResult = WSHShell.sendkeys("{NUMLOCK}{NUMLOCK}")  
	WScript.Sleep(60000)	' Eine Minute warten		  
Loop
' checkPC01 ist online  
WScript.Sleep(60000)	' Warte eine weitere Minute  


' Überprüfe ob checkPC02 online ist  
Do Until Ping_Network(checkPC02)
	objResult = WSHShell.sendkeys("{NUMLOCK}{NUMLOCK}")  
	WScript.Sleep(60000)	' Eine Minute warten  
Loop
' checkPC02 ist online  
WScript.Sleep(60000)	' Eine Minute warten  


' Einschlafen verhindern...  
Do While Ping_Network(checkPC01)	'...solange der checkPC01 online ist  
	If Ping_Network(checkPC02)= False Then	' checkPC02 ist offline gegangen  
		Do Until Ping_Network(checkPC02)	' Überprüfe fortwährend ob checkPC02 online ist  
			objResult = WSHShell.sendkeys("{NUMLOCK}{NUMLOCK}")	' Aktion ausführen  
			WScript.Sleep(60000)	' Eine Minute warten  
		Loop
		' checkPC02 ist online  
		WScript.Sleep(60000)	' Eine Minute warten, bis alle Dienste geladen sind  
	Else
		objResult = WSHShell.sendkeys("{NUMLOCK}{NUMLOCK}")	' Aktion ausführen  
	End If
	Wscript.Sleep(300000)	' Fünf Minuten warten  
Loop

' checkPC01 ist nicht mehr online => PC herunterfahren  
Dim strShutdown
' -s = shutdown, -t 10 = 10 Sekunden, -f = Proramm beenden erzwungen  
strShutdown = "shutdown.exe -s -t 10 -f"  
WSHShell.Run strShutdown, 0, false

Function Ping_Network(sHost)    
	Dim oPing, oRetStatus
	Set oPing = GetObject("winmgmts:").ExecQuery ("select * from Win32_PingStatus where address = '" & sHost & "'")  
	For Each oRetStatus In oPing
		If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
			Ping_Network= False 
		Else
			Ping_Network= True
		End If
	Next
	Set oPing = Nothing
End Function

 

Geschrieben

Genau das dachte ich eben auch. Hier schonmal vorab:

 

# Konfiguration
$checkPC01 = "192.xxx.xxx.xxx"
$checkPC02 = "192.xxx.xxx.xxx"
$intervallSekunden = 60          # Prüfintervall in Sekunden
$wartezeitBisShutdownMin = 5     # Wenn beide IPs X Minuten offline, dann shutdown

# Hilfsfunktion: Ping
function Test-HostOnline {
    param ([string]$host)
    return Test-Connection -ComputerName $host -Count 1 -Quiet -ErrorAction SilentlyContinue
}

# Hauptlogik
$offlineCounter = 0
$maxVersuche = [math]::Ceiling($wartezeitBisShutdownMin * 60 / $intervallSekunden)

Write-Host "Starte Netzwerküberwachung..."

while ($true) {
    $online01 = Test-HostOnline $checkPC01
    $online02 = Test-HostOnline $checkPC02

    if (-not $online01 -and -not $online02) {
        $offlineCounter++
        Write-Host "Beide Hosts offline ($offlineCounter/$maxVersuche)"
    } else {
        $offlineCounter = 0
        Write-Host "Mindestens ein Host online. Zähler zurückgesetzt."
    }

    if ($offlineCounter -ge $maxVersuche) {
        Write-Host "Beide Hosts seit $wartezeitBisShutdownMin Minuten offline. Fahre PC herunter..."
        Stop-Computer -Force
    }

    Start-Sleep -Seconds $intervallSekunden
}

 

Wenn du das ganze nun als C:\Scripts\CheckHosts.ps abspeicherst und ne Administrative Powershell öffnest und folgendes eingibst:

 

$taskName = "HostCheckShutdown"
$scriptPath = "C:\Scripts\CheckHosts.ps1"

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -WindowStyle Hidden -File `"$scriptPath`""
$trigger = New-ScheduledTaskTrigger -AtStartup
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force

 

hast du am Ende einen Task der beim Systemstart mit Adminrechten ausgeführt wird.

  • Lian changed the title to VBScript - Startscript Abhängigkeit zu Ping von IPs?

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...