繁体   English   中英

通过displayname而不是ID备份GPO - powershell

[英]Backup GPO by displayname and not ID - powershell

我想使用他们的名称而不是他们的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

所以我决定稍微更改代码,以便我可以调试正在进行的操作。 我添加了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 GPOsDisplayName

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

这是我编写的用于备份域中所有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 '[:\\/]','')
}

我想你可能只是使用$ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM