尝试运行Copy-GPO
cmdlet 以使用预定义迁移表我收到此异常:
System.Runtime.InteropServices.COMException (0x8007000D): The data is invalid. (Exception from
HRESULT: 0x8007000D)
at Microsoft.GroupPolicy.GPMResultClass.OverallStatus()
at Microsoft.GroupPolicy.Gpo.CopyTo(GPDomain targetDomain, String newDisplayName, Boolean copyAcl, GPMigrationTable
migrationTable, GPStatusMessageCollection& statusMessages)
at Microsoft.GroupPolicy.Commands.CopyGpoCommand.ProcessRecord()
at System.Management.Automation.CommandProcessor.ProcessRecord()
At C:\Users\djedig\Documents\OUCopy.ps1:335 char:2
+ NewGPOsFromTemplate "OU=$sSubDomain,OU=$sDivision,$sBaseRessourcenDN" $sTmplBas ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,NewGPOsFromTemplate
这篇博客文章这表明这可能是由于迁移表中的目标帐户数据无法解析,但我似乎无法找出可迁移数据的“正确”格式。事实上,在Copy-GPO
没有-MigrationTable
参数的情况下运行时,GPO 复制得很好。
我的命令是:
Copy-GPO -SourceName $sTemplateGPOName -TargetName $sNewGPOName -MigrationTable $sMigrationTableFile
迁移表包含以下两种类型的少量条目:
<?xml version="1.0" encoding="utf-16"?>
<MigrationTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.microsoft.com/GroupPolicy/GPOOperations/MigrationTable">
<Mapping>
<Type>LocalGroup</Type>
<Source>[email protected]</Source>
<Destination>[email protected]</Destination>
</Mapping>
[...]
<Mapping>
<Type>Unknown</Type>
<Source>Administrators</Source>
<DestinationSameAsSource />
</Mapping>
</MigrationTable>
安全RA-K17-DE-allow-logon
组是作为本地域组存在,并且 sAMAccountName 属性确实设置为相同的值。
让我困惑不已的是复制GPO.wsfGPMC 脚本示例集合中的脚本完全能够使用完全相同的迁移表创建 GPO 副本,如下所示:
cscript "//NoLogo" "${env:ProgramFiles(x86)}\Microsoft Group Policy\GPMC Sample Scripts\CopyGPO.wsf" $sTemplateGPOName $sNewGPOName "/MigrationTable:`"$sMigrationTableFile`"" | Out-Null
那么这里出了什么问题?
编辑:
源 GPO 对象仅定义受限组和用户权限分配。这些策略中使用的所有安全主体都包含在可迁移文件中。
答案1
我花了整整 60 秒来研究这个问题,所以这是瞎猜,但是这个 PowerShell 对象名称在你的脚本中拼写正确吗 $sBaseRessourcenDN
?资源似乎不合适,更不用说随机的“n”。
答案2
在较新的 Powershell 版本中,这不再是问题。我在 Powershell 5 和 5.1 中测试了基本相同的语法(在 Server 2008 R2 上安装了适当的 WMF 版本后),它运行完美。所以这似乎是 Powershell 2 中的一个错误。