基于 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 不支持它。
所以我正在备份域控制器的所有 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 不支持它。