Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: Расширенный диспетчер групповой политики 4.0 с пакетом обновления 3 (SP3)
Пример скрипта, включенного в эту статью, может помочь с несоответствиями архива, которые приводят к ошибкам в управлении объектами групповой политики (ГОП) в средстве.
Примеры ошибок, которые могут возникнуть, если в файле gpostate.xml есть несогласованные сведения:
Create GPO: Test...Failed.
[Error] The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
--------------------------------------------------------------------------------------------------------
1 actions failed.
Сценарий
Скрипт работает так:
- Останавливает службу расширенного управления групповыми политиками (AGPM).
- Сканирует файлgpostate.xml и удаляет ссылки (если таковые) для архивации несуществующих или неполных папок GUID.
- Переименовывает файл gpostate.xml с меткой времени при обнаружении каких-либо изменений и сохраняет новый файл gpostate.xml .
- Запускает службу AGPM.
Это важно
Этот пример скрипта не поддерживается в любой стандартной программе или службе поддержки Майкрософт.
Пример сценария приводится в виде "как есть", без каких-либо гарантий. Кроме того, корпорация Майкрософт отказывается от всех подразумеваемых гарантий, включая, но не ограничиваясь указанным, все подразумеваемые гарантии пригодности для продажи или определенной цели.
Все риски, возникающие в результате использования примеров сценариев и документации, берет на себя пользователь. Корпорация Майкрософт, ее штатные авторы и другие лица, принимающие участие в создании, подготовке и выпуске сценариев, ни при каких обстоятельствах не несут ответственность за какой-либо ущерб (в том числе, ущерб, вызванный потерей доходов предприятия, остановкой его работы, потерей бизнес-данных и другими материальными потерями), вызванный использованием или неспособностью использовать примеры сценариев и документацию, даже если корпорации Майкрософт известно о возможности нанесения такого ущерба.
Write-Host "Stopping AGPM Service"
Stop-Service "AGPM Service" -ErrorAction Stop
$AGPMArchivePath = Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\AGPM" -Name "ArchivePath" -ErrorAction Stop
$AGPMFile =$AGPMArchivePath + "gpostate.xml"
[xml]$AGPMArchive = Get-Content -Path $AGPMFile -ErrorAction Stop
$bChangesMade = $false
foreach( $GPODomain in $AGPMArchive.Archive.GPODomain )
{
Write-Host "Processing archive information for domain: $($GPODomain.domain)"
$ArchiveGPO = if( $GPODomain.GPO -is [array] ){ $GPODomain.GPO[0] } else { $GPODomain.GPO }
While( $ArchiveGPO -ne $null )
{
$TempGPONext = $ArchiveGPO.NextSibling
Write-Host "Checking GPO $($ArchiveGPO.id)"
if( $ArchiveGPO.state.archiveId -ne $null ){
$TestArchivePath = $AGPMArchivePath + $ArchiveGPO.state.archiveId
if( -not (Test-Path $TestArchivePath ) )
{
Write-Host "$($ArchiveGPO.state.archiveId) is not in archive - Removing"
$ArchiveGPO.ParentNode.RemoveChild($ArchiveGPO) > $null
$bChangesMade = $true
}
}
else
{
$ArchiveGPOHistoryItem = $ArchiveGPO.History.FirstChild
While( $ArchiveGPOHistoryItem -ne $null )
{
$TempNext = $ArchiveGPOHistoryItem.NextSibling
$TestArchivePath = $AGPMArchivePath + $ArchiveGPOHistoryItem.archiveId
if( -not (Test-Path -Path $TestArchivePath) )
{
Write-Host "History '$($ArchiveGPOHistoryItem.archiveId)' for State '$($ArchiveGPOHistoryItem.state)' on '$($ArchiveGPOHistoryItem.time)' is not in archive - Removing"
$ArchiveGPOHistoryItem.ParentNode.RemoveChild($ArchiveGPOHistoryItem) > $null
$bChangesMade = $true
}
elseif( -not (Test-Path -Path ($TestArchivePath + "\bkupinfo.xml") ) )
{
Write-Host "'$($ArchiveGPOHistoryItem.archiveId)' does not have bkupinfo.xml - Removing"
$ArchiveGPOHistoryItem.ParentNode.RemoveChild($ArchiveGPOHistoryItem) > $null
$bChangesMade = $true
}
$ArchiveGPOHistoryItem = $TempNext
}
if( -not $ArchiveGPO.History.HasChildNodes )
{
Write-Host "GPO $($ArchiveGPO.id) has no History removing."
$ArchiveGPO.ParentNode.RemoveChild($ArchiveGPO) > $null
$bChangesMade = $true
}
}
$ArchiveGPO = $TempGPONext
}
}
if( $bChangesMade )
{
$BackupFileName = "gpostate\_bak\_$((Get-Date).ToString('yyyymmdd-hhmmss')).xml"
Write-Host "Backing up gpostate.xml file to $BackupFileName"
Move-Item -Path $AGPMFile -Destination ($AGPMArchivePath + $BackupFileName) -Force -ErrorAction Stop
Write-Host "Saving updates"
$AGPMArchive.Save($AGPMArchivePath + "gpostate.xml")
}
else
{
Write-Host "No Changes made."
}
Write-Host "Starting AGPM service."
Start-Service "AGPM Service"