基于GPO DisplayName而不是Id的备份GPO

时间:2015-10-21 09:39:48

标签: powershell backup gpo

所以我正在备份域控制器的所有GPO,我注意到Backup-GPO cmdlet备份GPOS的方式非常不友好。默认情况下,它为每个以“ID”命名的GPO创建一个文件夹,该ID甚至不匹配其“GPOID / GUID”。

以下是一个示例,我将备份特定的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如果我使用那个糟糕的名字,要导入的备份文件夹?

由于

1 个答案:

答案 0 :(得分:3)

将每个GPO备份到备份文件夹的单独子文件夹中:

id viewCopy = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:viewToCopy]];

替换是从名称中删除路径中无效的字符(如果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 } ,则子文件夹的创建将失败)。正如@briantist在他的评论中建议的那样,最好从相应的>属性中导出无效字符列表,而不是手动维护列表。您可能需要手动添加其他有问题的字符,特别是IO.Path。冒号用于访问alternate data streams,因此从技术上讲它是路径中的有效字符,但PowerShell不支持它。