因此,我正在备份域控制器的所有 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 DisplayName 而不是那个不友好的字符串来命名这些文件夹?
这就是我想要得到的:
N12 Workstation Policy
我之所以要这样做,是因为如果我想在将来重新导入单个 GPO,并且我不记得该 GPO 的名称,我该如何知道哪个是正确的 GPO 备份文件夹呢?如果我使用那个可怕的名字,导入?
Thanks
将每个 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
属性而不是手动维护列表。不过,您可能需要手动添加其他有问题的字符,特别是:
。冒号用于访问备用数据流 http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx,因此从技术上讲它是路径中的有效字符,但 PowerShell 不支持它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)