当 GPO 无法在启动时运行(没有 DC)时触发计划任务?

当 GPO 无法在启动时运行(没有 DC)时触发计划任务?

我正在通过 GPO 推送启动脚本。该脚本会更新本地脚本(以防更改或删除),然后自行运行。

我希望仅当计算机处于离线状态且无法接收更新的脚本时,才在启动时运行本地脚本。是否有可以触发“无法到达 DC 以在启动时应用 GPO”的事件日志项?我不希望脚本在每次 DC 不可用时运行(例如,网络暂时中断),只在 DC 不可用时在启动时运行。

有一个更好的方法吗?

答案1

一种相当直接的方法是在启动时始终运行 PowerShell 脚本,然后检查域是否可用:

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

如果无法联系域控制器,则GetComputerDomain函数抛出异常,执行落入 catch 块。如果域可用,则函数成功执行,脚本结束。

当然,PowerShell 脚本中的代码需要是 PowerShell,但您可以通过将脚本转储到临时文件、运行批处理器,然后删除该文件来运行经典批处理:

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
}

批处理代码之前没有空格是故意的;对于多行字符串文字(由@"和划定的内容"@)来说,它是必需的,这样就免去了处理 PowerShell 转义的麻烦。

相关内容