WedX - журнал о программировании и компьютерных науках

Использование Powershell для редактирования/изменения объекта групповой политики

Цель: я пытаюсь изменить объект групповой политики (2008R2 AD) через Powershell (v3). В частности, значение параметра Конфигурация пользователя -> Политики -> Параметры Windows -> FileRedirection -> Путь UNC к документам.

Первоначальная попытка:

import-module grouppolicy;
$StringToFind = "\\this\is\a\template\path";
$StringToRepalce="\\server123\%CustomerID%\%username%\Documents\";
$GPOBackupFolder = "C:\src\psh\gpoBackupEditRestore\backups";
$GPO = copy-gpo -SourceName "Customer GPO Template v1.4" -targetName "Customer $CustomerID" -CopyACL;
$GPOBackup = $Backup-GPO -guid $gpo.id -path $GPOBackupFolder;
$GPOBackupXMLPath="$GPOBackupFolder\$($GpoBackup.ID)\Backup.xml";
$GPOGPReportXMLPath="$GPOBackupFolder\$($GpoBackup.ID)\GPReport.xml";
$NewBackupXMLPath="$GPOBackupFolder\$($GpoBackup.ID)\nBackup.xml";
$NewGPReportXMLPath="$GPOBackupFolder\$($GpoBackup.ID)\nGPReport.xml";

$GPOBackup=gc $GPOBackupXMLPath;
$GPOGPReport= gc $GPOGPReportXMLPath;
foreach($line in $GPOBackup){ac $NewBackupXMLPath $line.Replace($StringToFind,$StringToReplace);}
foreach($line in $GPOGPReport){ac $NewGPReportXMLPath $line.Replace($StringToFind,$StringToReplace);}

remove-item -force $GPOBackupXMLPath;
remove-item -force $GPOGPReportXMLPath;
move-item -force $NewBackupXMLPath $GPOBackupXMLPath
move-item -force $NewGPReportXMLPath $GPOGPReportXMLPath

Remove-GPO -ID $GPO.ID   #remove GPO before restore. deleting/commenting this line does not change outcome.
Restore-GPO -BackupID $GPOBackup.ID -Path $GPOBackupFolder

Предполагая, что я правильно прочитал информацию на https://technet.microsoft.com/en-us/library/ee461027.aspx, приведенный выше фрагмент кода Powershell должен восстановить XML из локальной папки в GPO в AD. [[Я подтвердил, что значения шаблона ($StringToFind) не встречаются ни в каком другом файле в каталоге GPOBackupFolder.]]

Однако измененные значения из локальных файлов XML НЕ восстанавливаются в AD. Я подтвердил это, выполнив дополнительную резервную копию объекта групповой политики после его восстановления и сравнив исходные (измененные) файлы резервной копии (которые были восстановлены) со значением резервной копии после восстановления (теперь содержащим значения /Исходные/!).

Кто-нибудь еще пытался это сделать и/или может объяснить такое поведение, почему Restore-GPO не восстанавливает содержимое файлов резервных копий?


Ответы:


1

ОБНОВЛЕНИЕ: я нашел способ напрямую изменить ini-файл объекта групповой политики на контроллере домена.

Поскольку это решение НЕ использует какой-либо API, я считаю это HACK; однако пока это единственное решение, с которым я столкнулся.

Из того, что мне удалось узнать (из моей ограниченной работы в этом мире) об архитектуре AD и репликации контроллера домена, раздел SYSVOL контроллера домена будет реплицирован на другие контроллеры домена в лесу, как если бы изменения были внесены через MMC. . Кто-нибудь может это подтвердить?

Примечание. Насколько я могу судить, этот сценарий должен запускаться локально с контроллера домена в той же организации, что и затрагиваемый объект групповой политики.

$GPO = copy-gpo -SourceName "$GPOTemplateName" -TargetName "$NewGPOName" -CopyACL
#Found post referencing how to Manually Edit GPO's: https://blogg.husbanken.no/it/2013/04/13/manually-edit-gpo-settings/
$adGPO=[ADSI]"LDAP://$($GPO.path)";
$GPOFilePath = $adGPO.psbase.properties.gPCFileSysPath;

#Specifically the path to the GPO section affecting Folder Redirection
$GPOFolderRedirectionINIPath = "$GPOFilePath\User\Documents & Settings\fdeploy.ini";

#Functions for importing/exporting an INI file with Powershell in a very standard way:  https://blogs.technet.com/b/heyscriptingguy/archive/2011/08/20/use-powershell-to-work-with-any-ini-file.aspx
. ".\get-inicontent.ps1"; # From:  https://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8fb-ebd7a76e8d91
. ".\out-inifile.ps1";   # From: https://gallery.technet.microsoft.com/scriptcenter/7d7c867f-026e-4620-bf32-eca99b4e42f4

$GPOFolderRedirectionINI = get-iniContent $GPOFolderRedirectionINIPath;
$GPOFolderRedirectionINI["My Documents"]["s-1-1-0"]="\\New\Path\To\CustomerFolder\%USERNAME%\"
$GPOFolderRedirectionINI | out-iniFile $GPOFolderRedirectionINIPath -Force

Я проверил это, и он работает правильно, и если повезет, кто-то еще найдет этот метод полезным; однако я надеюсь, что кто-то найдет лучший способ сделать это.

Ваше здоровье!

10.07.2013
  • Я могу подтвердить, что любые изменения, внесенные в общий ресурс SYSVOL на любом контроллере домена в домене, будут реплицированы на все другие контроллеры домена в домене, независимо от того, внесете ли вы изменение вручную или с помощью встроенного -в инструментах. Источник 12.08.2014

  • 2

    Я наткнулся на этот пост и решил взять его на себя, не делая хаков. Хотя на самом деле содержимое было в XML-файле, вместо этого GPO Restore просматривает реестр.pol. Я выполнял политики на уровне машины, поэтому это было в DomainSysvol\GPO\Machine\registry.pol.

    Однажды я отредактировал этот файл (который несколько запутан — смотрите здесь инструкции) — https://gallery.technet.microsoft.com/scriptcenter/Read-or-modify-Registrypol-778fed6e

    ...Мне удалось восстановить скопированный объект групповой политики, и он имел правильные настройки.

    У меня есть 300 объектов групповой политики, которые мне нужно создать, и все они выглядят примерно одинаково, так что это сэкономит бессчетное количество часов времени.

    29.11.2014

    3
  • Было бы здорово, если бы вы оставили несколько пояснений. 04.05.2018
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]