¿Activador de tarea programada para cuando GPO no puede ejecutarse al inicio (sin DC)?

1

Estoy empujando un script de inicio a través de GPO. El script actualiza un script local (en caso de cambios o eliminación) y luego se ejecuta solo.

Me gustaría que el script local se ejecute SOLO en el inicio SOLO si la máquina está fuera de línea y no puede recibir el script actualizado. ¿Hay un elemento de registro de eventos para no poder alcanzar el DC para aplicar GPO en el arranque que puedo activar? No quiero que el script se ejecute cada vez que el DC no está disponible (por ejemplo, interrupción temporal de la red), solo en el arranque cuando el DC no está disponible.

¿Hay una mejor manera de hacer esto?

Teknowledgist
fuente

Respuestas:

0

Una forma bastante directa sería ejecutar siempre un script de PowerShell al inicio que luego verifique si el dominio está disponible:

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

Si no se puede contactar a ningún controlador de dominio, la GetComputerDomainfunción genera una excepción y la ejecución cae en el bloque catch. Si el dominio está disponible, la función tiene éxito y el script termina.

Por supuesto, el código en un script de PowerShell debe ser PowerShell, pero puede ejecutar un lote clásico volcando un script en un archivo temporal, ejecutando el procesador por lotes y luego eliminando ese archivo:

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
}

La falta de espacios en blanco antes del código de lote es intencional; es necesario para el literal de cadena multilínea (lo delineado por @"y "@), lo que le evita tener que lidiar con el escape de PowerShell.

Ben N
fuente
No es exactamente lo que estaba buscando, pero creo que hará lo que necesito. El guión es powershell. Ejecutando desde GPO, copia su versión actual localmente y actualiza una tarea de inicio. Usando su sugerencia, si el dominio está disponible Y se está ejecutando desde el DC, hace X. Si el dominio no está disponible, también hace X. Eso debería hacer que solo haga X una vez por arranque.
Teknowledgist