1

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

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

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

1 ответ1

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .