所以我正在备份域控制器的所有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如果我使用那个糟糕的名字,要导入的备份文件夹?
由于
答案 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不支持它。