Как использовать учетную запись gMSA с планировщиком задач и Powershell для управления фильтрами DHCP

Я изо всех сил пытаюсь поддерживать синхронизацию DHCP-фильтров между несколькими DHCP-серверами, каждый из которых работает на контроллере домена. Я написал простой сценарий для получения фильтров с главного DHCP-сервера и передачи их на другие DHCP-серверы:

 $aDhcpServers = Get-DhcpServerInDC
 New-Variable -Name sDhcpMasterServer -Value "master.server.fqdn" -Option Constant
    
 $aDhcpMacFilters = Get-DhcpServerv4Filter -ComputerName $sDhcpMasterServer
 foreach($DhcpServer in $aDhcpServers) {
        
     #Don't overwrite ourself
     if($DhcpServer.DnsName -notmatch "$sDhcpMasterServer") { 
         Invoke-Command -ComputerName $DhcpServer.DnsName -ScriptBlock {
             #Clear remote entries
             Get-DhcpServerv4Filter | Remove-DhcpServerv4Filter
                
             #Add array of MacFilters to remote filter
             $args[0] | Add-DhcpServerv4Filter
         } -ArgumentList (,$aDhcpMacFilters)
     }
 }

Затем я создал gMSA и добавил его в группу администраторов DHCP, также предоставив права «Вход в систему в качестве пакетного задания» на контроллерах домена. Главный сервер DHCP может получить пароль gMSA. Учетная запись используется в запланированной задаче, которая просто выполняет сценарий и (теоретически) должна передавать изменения с главного DHCP на другие DHCP-серверы.

Однако это не так. Сценарий выполняется, но никаких изменений в DHCP-фильтрах на других серверах не вносится (код завершения задачи - 0). Когда тот же сценарий выполняется с учетными данными администратора домена, он работает нормально. Я подозреваю, что проблема связана с удалением Powershell с использованием учетных данных gMSA, но я не могу найти никакой документации по этому поводу.

0
задан 29 April 2021 в 10:30
1 ответ

Наконец-то мне удалось решить эту проблему.

Первоначальный сценарий не выполнялся из-за того, что сценарий, выполняемый удаленно планировщиком заданий, выполнялся в режиме NoLanguage (https://docs.microsoft.com/en-us/powershell/module/microsoft .powershell.core/about/about_language_modes), что предотвращает использование ScriptBlocks.

В итоге я определил новую роль JEA с помощью пользовательского командлета для запуска нужного кода и изменил задачу планировщика заданий, чтобы использовать этот командлет вместе с учетной записью gMSA. Я считаю, что все решение немного выходит за рамки этого вопроса, поэтому я не буду публиковать здесь точный код.

0
ответ дан 6 August 2021 в 09:23

Теги

Похожие вопросы