2015-10-21 3 views
3

Итак, я создаю резервную копию всех объектов групповой политики контроллера домена, и я заметил, что способ резервного копирования GPO-резервного копирования в GPOS настолько недружелюбен. По умолчанию создается папка для каждого отдельного объекта групповой политики с именем «ID», который даже не соответствует его «GPOID/GUID».Резервное копирование объектов групповой политики на основе имени объекта групповой политики, а не Id

Вот пример, я буду просто резервное копирование конкретного объекта групповой политики:

backup-gpo -guid ff8de365-0842-46ab-9ac7-64ebd8dd4614 -path C:\ 


DisplayName  : N12 Workstation Policy 
GpoId   : ff8de365-0842-46ab-9ac7-64ebd8dd4614 
Id    : dd33c220-bac8-4ebd-a9d9-7729fcea9c38 
BackupDirectory : C:\ 
CreationTime : 20/10/2015 17:41:43 
DomainName  : martyn.local 

Это имя папки резервного копирования, которая создается после выпуска предыдущей команды:

{DD33C220-BAC8-4EBD-A9D9-7729FCEA9C38} 

Если я пытаюсь Резервное копирование всех объектов групповой политики Я получаю папку для каждого отдельного объекта групповой политики. Есть ли способ называть эти папки на основе имени объекта групповой политики, а не этой недружественной строки?

Это то, что я хотел бы получить:

N12 Workstation Policy 

Причина, почему я хочу сделать это так, потому что, если я хочу, чтобы повторно импортировать один объект групповой политики в будущем, и я не помните имя объекта групповой политики, как я должен знать, какая из них является резервной копией GPO для импорта, если я использую это ужасное имя?

Благодаря

ответ

3

резервного копирования каждого объекта групповой политики, чтобы отделить вложенные папки резервного копирования папки:

$invalidChars = ':\\/' + [RegEx]::Escape(-join [IO.Path]::InvalidPathChars) 

$backupDir = 'C:\backup' 
Get-GPO -All | ForEach-Object { 
    $name = $_.DisplayName -replace "[$invalidChars]", '_' 
    $gpoDir = Join-Path $backupDir -ChildPath $name 
    New-Item $gpoDir -Type Directory | Out-Null 
    Backup-GPO -Guid $_.Id -Path $gpoDir 
} 

Замена, чтобы удалить символы, которые являются недопустимыми в пути от имени (создание вложенной провалится если имя объекта групповой политики содержит, например, >). Как предложил @briantist в своем комментарии, лучше получить список недопустимых символов из соответствующего свойства IO.Path, чем сохранить список вручную. Возможно, вам придется вручную добавить другие проблемные символы, в частности, :. Двоеточие используется для доступа к alternate data streams, поэтому это технически допустимый символ в пути, но PowerShell его не поддерживает.

+3

Отличная работа; Избили меня. Мне нравится '$ name = $ _. DisplayName -creplace" [$ ([RegEx] :: Escape (([System.IO.Path] :: InvalidPathChars) -join ''))] ", '_'' для обеспечения вы заменяете все. – briantist

+0

@briantist Действительно. Исправлена. –

+0

ooo приятное использование унарного '-join'! – briantist