Я использую модуль PowerShell GroupPolicy для создания и связывания новых объектов групповой политики. Мне нужно создать большое количество объектов групповой политики, и поэтому я хочу автоматизировать процесс, не взаимодействуя с редактором групповой политики.
При создании объектов групповой политики в редакторе я заметил, что каждый объект политики будет содержаться либо в одном, либо в нескольких файлах XML или файлах .INI.
Отметив выше, я начал создавать объекты групповой политики с помощью команды New-GPO, передавая флаги -Name и -Domain. После того, как объект групповой политики будет успешно создан, я (с помощью своего сценария) сгенерирую XML-файл, содержащий всю информацию, которую будет использовать политика. Ниже показан фрагмент XML-файла, который я бы создал для настройки политики подключенных дисков.
При проверке политики в редакторе все выглядит нормально. Отображаются правильные диски, и все настройки кажутся правильными. Однако политика никогда не применяется. Если я создам идентичную политику вручную через редактор групповой политики, все политики начнут работать, включая те, которые я создал с помощью powershell.
Таким образом, ошибка, по-видимому, заключается в том, что контроллер домена никогда не узнает об изменениях, но они применяются, когда вносятся изменения вручную.
Я попытался запустить gpupdate /force, который, похоже, не обновляет и не распространяет изменения.
New-Item \\$($MappedDrivesGPO.DomainName)\SYSVOL\$($MappedDrivesGPO.DomainName)\Policies\$("{"+$MappedDrivesGPO.Id+"}")\User\Preferences\Drives\Drives.xml -ItemType File -Force
Set-Content \\$($MappedDrivesGPO.DomainName)\SYSVOL\$($MappedDrivesGPO.DomainName)\Policies\$("{"+$MappedDrivesGPO.Id+"}")\User\Preferences\Drives\Drives.xml $xml
<?xml version = "1.0" encoding = "utf-8"?>
<Drives clsid = "{8FDDCC1A-0C3C-43cd-A6B4-71A6DF20DA8C}">
<Drive clsid = "{935D1B74-9CB8-4e3c-9914-7DD559B7A417}" name = "P:" status = "P:" image = "2" changed = "2019-04-26 10:41:54" uid = "{$guid1}" bypassErrors = "1">
<Properties action = "U" thisDrive = "NOCHANGE" allDrives = "NOCHANGE" userName = "" path = "\\fs1\Projects" label = "Projects" persistent = "0" useLetter = "1" letter = "P"/>
<Filters>
<FilterGroup bool = "AND" not = "0" name = "$($domainName)\Drive P Access" sid = "$($filterGroupSidDriveP)" userContext = "1" primaryGroup = "0" localGroup = "0"/>
</Filters>
</Drive>
<Drive clsid = "{935D1B74-9CB8-4e3c-9914-7DD559B7A417}" name = "S:" status = "S:" image = "2" changed = "2019-04-26 10:39:21" uid = "{$guid2}" bypassErrors = "1">
<Properties action = "U" thisDrive = "NOCHANGE" allDrives = "NOCHANGE" userName = "" path = "\\as1\Software" label = "Software" persistent = "0" useLetter = "1" letter = "S"/>
<Filters>
<FilterGroup bool = "AND" not = "0" name = "$($domainName)\Drive S Access" sid = "$($filterGroupSidDriveS)" userContext = "1" primaryGroup = "0" localGroup = "0"/>
</Filters>
</Drive>
</Drives>
Я ожидал, что политика начнет работать должным образом после создания XML-файла.
Фактический результат заключается в том, что политика кажется хорошо сформированной, но никогда не применялась.
Мне удалось решить эту проблему самостоятельно, опубликовав здесь, если кто-то еще столкнется с той же проблемой. Если вы создаете объекты групповой политики программно, а не через редактор, вам придется расширить свой сценарий/программу, чтобы добавить CSE (в данном случае для сопоставления дисков) и SnapIn GUID в gPCUserExtensionNames.
[{00000000-0000-0000-0000-000000000000}{2EA1A81B-48E5-45E9-8BB7-A6E3AC170006}][{5794DAFD-BE60-433F-88A2-1A31939AC01F}{2EA1A81B-48E5-45E9-8BB7-A6E3AC170006}]
0000.. — это основной механизм GPO, 23EA — это диски GUID CSE Preference Tool, 5794.. — это Preference Tool CSE GUID Drives.
Если вы создаете политику вручную с нужными изменениями, вы можете затем открыть dsa.msc, включить дополнительные функции, а затем просмотреть свойства объекта политики. В разделе gPCUserExtensionNames вы сможете увидеть массивы, содержащие идентификаторы GUID, которые необходимо включить в ваше программное обеспечение.