2015-10-21 64 views
3

因此,我備份了域控制器的所有GPO,並注意到Backup-GPO cmdlet備份GPOS的方式非常不友好。默認情況下,它爲以「ID」命名的每個GPO創建一個文件夾,該ID甚至不與其「GPOID/GUID」匹配。基於GPO DisplayName而非Id的備份GPO

下面是一個例子,我將只備份特定GPO:

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} 

備份所有GPO我爲每個GPO獲取一個文件夾。有什麼方法可以根據GPO DisplayName命名這些文件夾,而不是那些不友好的字符串嗎?

這是我想獲得:

N12 Workstation Policy 

我爲什麼要那樣做的原因是因爲如果我要重新導入一個GPO在未來,我不請記住GPO的名稱,如果我使用那個可怕的名稱,我該怎麼知道哪個GPO備份文件夾是要導入的?

感謝

回答

3

備份每個GPO分開你的備份文件夾的子文件夾:

$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 
} 

更換的是去除是路徑無效從名字(創建子文件夾會失敗字符如果GPO的名稱包含例如>)。正如@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