4

我想用他们的名字而不是他们的 ID 来备份 GPO。目前我有:

$GPO_Temp_Backup = get-gpo -all -domain $domain

Foreach ($GPO in $GPO_Temp_Backup) {

$GPOBackup = Backup GPO -name $GPO.DisplayName -path ($Current_Drive + $GPO_Backup_Location) -Domain $domain;
write-host $GPO.DisplayName
}

我可以根据需要发布脚本的任何其他部分,但大多数缺失的变量值对于这个问题应该无关紧要。截至目前,它仍将 GPO 备份为他们的 ID

4

3 回答 3

2

所以我决定稍微改变一下代码,这样我就可以调试发生了什么。我添加了writeout $GPOBackupwriteout $GPO。有趣的是,这与我看到的相似。(示例取自 Microsoft 页面)

writeout $GPOBackup为我提供:

C:\PS>
Backup-Gpo -Name TestGPO -Path C:\GpoBackups -Comment "Weekly Backup"
DisplayName     : TestGPO
GpoId           : 35c12ab3-956c-45d5-973b-46b17d225f47
Id              : 2b509d4e-40f5-4337-82f7-458584555d0c
BackupDirectory : C:\GpoBackups
CreationTime    : 2/25/2009 8:48:19 PM
DomainName      : contoso.com
Comment         : Weekly Backup  

writeout $GPO为我提供:

Id: 35c12ab3-956c-45d5-973b-46b17d225f47
DisplayName : TestGPO
Path: cn={35c12ab3-956c-45d5-973b-46b17d225f47}

正如您在第一个输出中看到的那样,有一个 GpoId 和一个 Id。第二个命令的输出突然将 Id 更改为最初的 GpoID。当backup-gpo命令保存 GPO 时,它会使用您从第一个代码块收到的 Id 来保存它。然后 Id 更改为GpoId. 我不知道为什么会发生这种情况,但无论如何,一旦我弄清楚了这一点,对我的修复就很简单了。以下代码允许我backup GPOs作为DisplayName

Foreach ($GPO in $GPO_Temp_Backup) {
$GPOBackup = Backup-GPO -name $GPO.DisplayName -path ($Current_drive + $GPO_Backup_Location + "\" + "{" + $GPO.Id + "}") -domain $domain
rename-item -path ($Current_drive + $GPO_Backup_Location + "\" + "{" + $GPOBackup.Id + "}") -newname $GPO.DisplayName
}
$oldfilename = ($Current_drive + $GPO_Backup_Location + "\" + "{" + $GPOBackup.Id + "}")
write $oldfilename
于 2013-04-17T20:00:39.800 回答
1

这是我编写的一个小脚本,用于备份域中的所有 GPO。这利用了 Backup-GPO 创建的 manifest.xml 文件来解决 Id 问题:

[CmdletBinding()]
param(
    [parameter()]
    [ValidateScript({Test-Path $_ -PathType Container})]
    [string]$Path = 'C:\GroupPolicy'
)

Get-GPO -All | Backup-GPO -Path $Path -Comment ('Backup taken: {0}' -f (Get-Date -Format G))
[xml]$manifest = Get-Content (Join-Path $Path 'manifest.xml')
foreach ($gpBackup in $manifest.Backups.BackupInst) {
    Rename-Item -Path (Join-Path $Path $gpBackup.Id.InnerText) -NewName ($gpBackup.GPODisplayName.InnerText -replace '[:\\/]','')
}
于 2013-08-15T21:00:40.633 回答
0

我想你可能只是使用 $gpobackup.id 来获取 guid,将其转换为文件夹路径,然后简单地使用重命名。例子:

$GPOBackup = Backup-GPO -name $GPO.DisplayName -path ($Current_Drive + $GPO_Backup_Location) -Domain $domain;
$guidpath = $($Current_Drive + $GPO_Backup_Location + '{' + $x.id.tostring() + '}' )
$newpath = $($Current_Drive + $GPO_Backup_Location + $GPOBackup.DisplayName)
rename-item -Path $guidpath -newname $newpath
于 2013-04-17T18:43:03.867 回答