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

Backup GPOs basing on GPO DisplayName rather than Id

所以我正在备份域控制器的所有 GPO,我注意到 Backup-GPO cmdlet 备份 GPOS 的方式非常不友好。默认情况下,它会为每个以 "ID" 命名的 GPO 创建一个文件夹,甚至不匹配其 "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 显示名称而不是那个不友好的字符串来命名这些文件夹吗?

这是我想要得到的:

N12 Workstation Policy

我之所以要那样做是因为如果我想在将来重新导入单个 GPO 而我不记得 GPO 的名称我怎么知道哪个是如果我使用那个糟糕的名称,正确的 GPO 备份文件夹可以导入吗?

谢谢

将每个 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 不支持它。