При попытке запустить Copy-GPO
командлет для копирования объекта групповой политики с использованием предопределенного Таблица миграции Я получаю это исключение:
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
Эта статья в блоге предполагает, что это может быть связано с неразрешимыми данными целевой учетной записи в таблице миграции, но мне кажется, что я не могу определить «правильный» формат переносимых данных. Действительно, GPO просто отлично копирует при запуске Copy-GPO
без -MigrationTable
параметр.
Моя команда:
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 действительно установлено одно и то же значение.
Что меня бесконечно озадачивает, так это то, что КопироватьGPO.wsf сценарий из коллекции примеров сценариев GPMC отлично может создать копию объекта групповой политики, используя ту же самую таблицу миграции, например:
cscript "//NoLogo" "${env:ProgramFiles(x86)}\Microsoft Group Policy\GPMC Sample Scripts\CopyGPO.wsf" $sTemplateGPOName $sNewGPOName "/MigrationTable:`"$sMigrationTableFile`"" | Out-Null
Так что здесь не так?
Исходный объект GPO просто определяет группы с ограниченным доступом и назначение прав пользователей. Все участники безопасности, используемые в этих политиках, включены в файл migtable.
Это больше не проблема в более поздних версиях Powershell. Я тестировал практически тот же синтаксис в Powershell 5 и 5.1 (после установки соответствующей версии WMF на Server 2008 R2), и он работает безупречно. Похоже, это ошибка в Powershell 2.
Я потратил на это все 60 секунд, так что это снимок в темноте, но правильно ли написано имя объекта PowerShell в вашем скрипте? $sBaseRessourcenDN
Двойная 's' в Ресурс кажется неуместным, не говоря уже о случайном "n".