Запланированная задача запускается, когда GPO не может запускаться при запуске (без DC)?

1

Я нажимаю сценарий запуска через GPO. Сценарий обновляет локальный сценарий (в случае изменения или удаления) и затем запускается сам.

Я хотел бы, чтобы локальный скрипт запускался ТОЛЬКО при запуске, если машина находится в автономном режиме и не может получить обновленный скрипт. Есть ли какой-либо элемент журнала событий для объекта «Не удается получить доступ к DC-to-apply-GPO-on-boot», с которого я могу сработать? Я не хочу, чтобы скрипт запускался каждый раз, когда контроллер домена недоступен (например, временное нарушение работы сети), только при загрузке, когда контроллер домена недоступен.

Есть лучший способ сделать это?

Teknowledgist
источник

Ответы:

0

Одним из довольно простых способов будет всегда запускать скрипт 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.

Бен Н
источник
Не совсем то, что я искал, но я думаю, что это сделает то, что мне нужно. Сценарий PowerShell. Работая из GPO, он локально копирует свою текущую версию и обновляет задачу запуска. Используя ваше предложение, если домен доступен И он работает от DC, он делает X. Если домен недоступен, он также делает X. Это должно заставить его делать X только один раз за загрузку.
Teknowledgist