我正在使用Powershell脚本导入已另存为GUID的GPO(默认设置)。
我希望将GPO导入其他系统上,此时GPO已保存到CD。因此,导入单个GPO的简单方法是:
$domain=[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
$import_array = get-childitem ($current_drive + $gpo_backup_location) | Select name
foreach ($GPO in $import_array) {
Import-GPO |
-backupgponame $GPO.name -path ($Current_Drive + $gpo_backup_location) |
-domain $domain |
-Targetname $GPO.name |
-migrationtable ($Current_drive + $mig_table_path) |
-Createifneeded;
}
}
$ import_array命令给我我的文件夹名称
Name
----------
GPO-1
GPO-2
GPO-3
GPO-4
and so on...
我想遍历这些并导入每个。使用另一个代码块保存GPO,以备份GPO作为其显示名称。 (GPO-1,GPO-2等)
我一辈子都无法弄清楚如何强制它查看文件夹名称并将其导入
编辑
备份是使用以下代码创建的:
Function GPO_Backup_DisplayName ($MenuChoice) {
write 'Backing Up GPOs by Display Name'
Foreach ($GPO in $GPO_Temp_Backup) {
$GPOBackup = Backup-GPO `
-name $GPO.DisplayName `
-path ($Current_drive + $GPO_Backup_Location) `
-Domain $domain;
Get-GPOReport $GPO.DisplayName `
-reporttype HTML `
-Domain $domain `
-path ($Current_drive + $GPO_Backup_HTML_Report + $GPO.DisplayName + ".html");
Rename-item
-path ($Current_drive + $GPO_Backup_Location + "{" + $GPOBackup.Id + "}") `
-newname $GPO.DisplayName
}
}
最佳答案
如果将每个GPO导出到其自己的文件夹并在GPO之后命名该文件夹,则可以在foreach
循环中遍历这些文件夹以导入GPO,并将目标名称设置为文件夹名称。这样的事情应该起作用:
Get-ChildItem "C:\backup" | % {
$name = $_.name
$id = (get-childitem $_) -replace '[{}]', ''
Import-GPO -BackupId $id -TargetName $name -path $_.Path -CreateIfNeeded
}
前提条件是您使用以下内容创建了备份:
Get-GPO -All | % {
$name = $_.DisplayName
$dir = New-Item "C:\backup\$name" -Type Directory
Backup-GPO -Guid $_.Id -Path $dir
}
另外,备份目录应仅包含具有单个GPO备份的文件夹,否则,您将不得不在
Get-ChildItem
和ForEach-Object
之间添加过滤器。关于powershell - 使用以其DisplayName命名的文件夹导入Import-GPO-Powershell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15980430/