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 $GPOBackupしましwriteout $GPOた。興味深いことに、これは私が見たものと似ています。(マイクロソフトのページからの例)

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 があります。2 番目のコマンドの出力では、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
于 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 に答える