BKL517 0 Geschrieben Gestern um 08:44 Melden Geschrieben Gestern um 08:44 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 Zitieren
testperson 1.798 Geschrieben vor 23 Stunden Melden Geschrieben vor 23 Stunden Hi, vor 43 Minuten schrieb BKL517: Da sich meine VBScript - Kenntnisse leider auf einem bescheidenen Stand befinden beste Voraussetzungen sich mit PowerShell auseinanderzusetzen und das Script neu in PowerShell umzusetzen. Viele Grüße Jan 2 Zitieren
Karl K. 15 Geschrieben vor 19 Stunden Melden Geschrieben vor 19 Stunden 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. Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.