Я изо всех сил пытаюсь поддерживать синхронизацию 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, но я не могу найти никакой документации по этому поводу.
Наконец-то мне удалось решить эту проблему.
Первоначальный сценарий не выполнялся из-за того, что сценарий, выполняемый удаленно планировщиком заданий, выполнялся в режиме NoLanguage (https://docs.microsoft.com/en-us/powershell/module/microsoft .powershell.core/about/about_language_modes), что предотвращает использование ScriptBlocks.
В итоге я определил новую роль JEA с помощью пользовательского командлета для запуска нужного кода и изменил задачу планировщика заданий, чтобы использовать этот командлет вместе с учетной записью gMSA. Я считаю, что все решение немного выходит за рамки этого вопроса, поэтому я не буду публиковать здесь точный код.