Geplanter Task-Trigger für den Fall, dass das Gruppenrichtlinienobjekt beim Start nicht ausgeführt werden kann (kein Domänencontroller)?

1

Ich drücke ein Startskript über GPO. Das Skript aktualisiert ein lokales Skript (bei Änderungen oder Löschungen) und führt es dann selbst aus.

Ich möchte, dass das lokale Skript NUR beim Start ausgeführt wird, wenn der Computer offline ist und das aktualisierte Skript nicht empfangen kann. Gibt es ein Ereignisprotokollelement für "Kann das DC beim Booten nicht erreichen, um das Gruppenrichtlinienobjekt anzuwenden", das ich auslösen kann? Ich möchte nicht, dass das Skript jedes Mal ausgeführt wird, wenn der DC nicht verfügbar ist (z. B. vorübergehende Netzwerkstörung), sondern nur beim Booten, wenn der DC nicht verfügbar ist.

Gibt es einen besseren Weg, dies zu tun?

Teknowledgist
quelle

Antworten:

0

Eine recht einfache Möglichkeit wäre, beim Start immer ein PowerShell-Skript auszuführen, das dann prüft, ob die Domäne verfügbar ist:

Try {
    [System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain() | Out-Null
} Catch {
    # Code here
}

Wenn kein Domänencontroller kontaktiert werden kann, löst die GetComputerDomainFunktion eine Ausnahme aus und die Ausführung fällt in den catch-Block. Wenn die Domäne verfügbar ist, ist die Funktion erfolgreich und das Skript ist beendet.

Natürlich muss der Code in einem PowerShell-Skript PowerShell sein, aber Sie können einen klassischen Batch ausführen, indem Sie ein Skript in eine temporäre Datei sichern, den Batch-Prozessor ausführen und diese Datei anschließend löschen:

Try {
    [System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain() | Out-Null
} Catch {
    $tmpBat = [System.IO.Path]::GetTempFileName() + '.bat'
    @"
rem                              PUT YOUR BATCH CODE HERE
"@ | Out-File $tmpBat -Encoding ASCII
    cmd /c $tmpBat
    Remove-Item $tmpBat
}

Das Fehlen von Leerzeichen vor dem Batch-Code ist beabsichtigt. Dies ist für das mehrzeilige Zeichenfolgenliteral (das von @"und umrissene Element "@) erforderlich , sodass Sie sich nicht mehr mit dem Entkommen von PowerShell befassen müssen.

Ben N
quelle
Nicht genau das, wonach ich gesucht habe, aber ich denke, es wird das tun, was ich brauche. Das Skript ist Powershell. Wenn es vom Gruppenrichtlinienobjekt aus ausgeführt wird, kopiert es die aktuelle Version lokal und aktualisiert eine Startaufgabe. Verwenden Sie Ihren Vorschlag, wenn die Domäne verfügbar ist UND auf dem Domänencontroller ausgeführt wird, führt sie X aus. Wenn die Domäne nicht verfügbar ist, führt sie auch X aus. Daher sollte sie X nur einmal pro Start ausführen.
Teknowledgist