【问题标题】:Backup GPOs basing on GPO DisplayName rather than Id基于 GPO DisplayName 而不是 Id 的备份 GPO
【发布时间】:2015-10-21 09:39:48
【问题描述】:

所以我正在备份域控制器的所有 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如果我使用那个糟糕的名称,要导入的备份文件夹?

谢谢

【问题讨论】:

    标签: powershell backup gpo


    【解决方案1】:

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

    【讨论】:

    • 伟大的工作;打败我。我喜欢$name = $_.DisplayName -creplace "[$([RegEx]::Escape(([System.IO.Path]::InvalidPathChars) -join ''))]", '_' 以确保您替换所有内容。
    • @briantist 确实如此。固定。
    • 很好地使用一元-join
    • 我向你们脱帽致敬,我要向你们学习很多东西 :)
    • 啊,不。该列表中的反斜杠转义下一个字符(\| = 文字管道,\t = 制表符,\n = 换行符等)。您需要手动将\(和/)添加到$invalidChars。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多