Windows-Server-2008-R2

PowerShell:複製 GPO 失敗,HRESULT:0x8007000D

  • September 12, 2018

在嘗試執行Copy-GPOcmdlet 以使用預定義的遷移表複製組策略對象時,我收到此異常:

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

This blog article表明這將是由於遷移表中無法解析的目標帳戶數據,但我似乎無法弄清楚可遷移數據的“正確”格式。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>Template-allow-logon@ad.syneticon.net</Source>
   <Destination>RA-K17-DE-allow-logon@ad.syneticon.net</Destination>
 </Mapping>
[...]
 <Mapping>
   <Type>Unknown</Type>
   <Source>Administrators</Source>
   <DestinationSameAsSource />
 </Mapping>
</MigrationTable>

RA-K17-DE-allow-logon安全組作為本地域組存在,並且 sAMAccountName 屬性確實設置為相同的值。

令我困惑的是,GPMC 腳本範例集合中的CopyGPO.wsf腳本完全能夠使用相同的遷移表創建 GPO 副本,如下所示:

cscript "//NoLogo" "${env:ProgramFiles(x86)}\Microsoft Group Policy\GPMC Sample Scripts\CopyGPO.wsf" $sTemplateGPOName $sNewGPOName "/MigrationTable:`"$sMigrationTableFile`"" | Out-Null

那麼這裡出了什麼問題呢?

編輯:

源 GPO 對象僅定義受限組和使用者權限分配。這些策略中使用的所有安全主體都包含在可遷移文件中。

在較新的 Powershell 版本中,這不再是問題。我已經在 Powershell 5 和 5.1 中測試了基本相同的語法(在 Server 2008 R2 上安裝了適當的 WMF 版本之後)並且它完美地工作。所以這似乎是 Powershell 2 中的一個錯誤。

我花了整整 60 秒的時間看這個,所以這是在黑暗中拍攝的,但是這個 PowerShell 對象名稱在你的腳本中拼寫正確嗎? Resource$sBaseRessourcenDN中的雙“s”似乎不合適,更不用說隨機的“n”了。

引用自:https://serverfault.com/questions/491505