GPO — сиротки.


Продолжаем тему групповых политик- ранее мы говорили о небольшом аудите Active Directory.

Как выражаются западные коллеги, «script please».  А то не модно, и качать что-то надо,  и страшные пугающие окна о несовместимости, и вообще не одной строкой.

Да нет проблем- забираем тут.

<# Скрипт находит и выводит все осиротевшие объекты групповой политики (orphaned Group Policy Objects).

Объекты Групоовых политик хранятся в двух частях:

1) GPC (Group Policy Container). Контейнер групповых политик это объект Active Directory, хранящий свойства GPO,     находящийся в контейнере CN=Policies,CN=System,DC=…, и реплицируемый с помощью репликации AD. 2) GPT (Group Policy Templates). Шаблоны групповых политик хранятся в папке Policies, находящейся в SYSVOL    каждого контроллера, и реплицируемой с помощью  File Replication Services (FRS) или    Distributed File System (DFS).

Данный скрипт поможет найти несоответствия между этими двумя частями, и найти «утерянные» объекты, объекты без связей с родителем.

GPO обычно теряет связь с одним из элементов в случае:

1) Если GPO был удален напрямую, через Active Directory Users and Computers или ADSI edit. 2) Если GPO был удален в SYSVOL.

Оригинал скрипта написан Sean Metcalf http://blogs.metcorpconsulting.com/tech/?p=1076 #> ipmo activedirectory $Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() # Get AD Domain Name $DomainDNS = $Domain.Name # Определяем имя домена $DomainDistinguishedName = $Domain.GetDirectoryEntry() | select -ExpandProperty DistinguishedName 

$GPOPoliciesDN = «CN=Policies,CN=System,$DomainDistinguishedName» $GPOPoliciesSYSVOLUNC = «\\$DomainDNS\SYSVOL\$DomainDNS\Policies«

Write-Host -ForegroundColor Green «Находим все осиротевшие объекты групповой политики…`n»

Write-Host -ForegroundColor Green «Считываем информацию GPO из Active Directory ($GPOPoliciesDN)…» $GPOPoliciesADSI = [ADSI]»LDAP://$GPOPoliciesDN» [array]$GPOPolicies = $GPOPoliciesADSI.psbase.children ForEach ($GPO in $GPOPolicies) { [array]$DomainGPOList += $GPO.Name } #$DomainGPOList = $DomainGPOList -replace(«{«,»») ; $DomainGPOList = $DomainGPOList -replace(«}»,»») $DomainGPOList = $DomainGPOList | sort-object [int]$DomainGPOListCount = $DomainGPOList.Count Write-Host -ForegroundColor Green «Найдено $DomainGPOListCount GPC (Group Policy Containers) в Active Directory ($GPOPoliciesDN)`n»

Write-Host -ForegroundColor Green «Считываем информацию GPO из SYSVOL ($GPOPoliciesSYSVOLUNC)…» [array]$GPOPoliciesSYSVOL = Get-ChildItem $GPOPoliciesSYSVOLUNC ForEach ($GPO in $GPOPoliciesSYSVOL) {If ($GPO.Name -ne «PolicyDefinitions») {[array]$SYSVOLGPOList += $GPO.Name }} #$SYSVOLGPOList = $SYSVOLGPOList -replace(«{«,»») ; $SYSVOLGPOList = $SYSVOLGPOList -replace(«}»,»») $SYSVOLGPOList = $SYSVOLGPOList | sort-object [int]$SYSVOLGPOListCount = $SYSVOLGPOList.Count Write-Host -ForegroundColor Green «Найдено $SYSVOLGPOListCount GPT (Group Policy Templates) в SYSVOL ($GPOPoliciesSYSVOLUNC)`n»

## COMPARE-OBJECT cmdlet note: ## The => sign indicates that the item in question was found in the property set of the second object but not found in the property set for the first object. ## The <= sign indicates that the item in question was found in the property set of the first object but not found in the property set for the second object.

# Проверка, что шаблоны  GPT в SYSVOL не существуют в AD [array]$MissingADGPOs = Compare-Object $SYSVOLGPOList $DomainGPOList -passThru | Where-Object { $_.SideIndicator -eq ‘<=’ } [int]$MissingADGPOsCount = $MissingADGPOs.Count $MissingADGPOsPCTofTotal = $MissingADGPOsCount / $DomainGPOListCount $MissingADGPOsPCTofTotal = «{0:p2}» -f $MissingADGPOsPCTofTotal  Write-Host -ForegroundColor Yellow «Найдено $MissingADGPOsCount GPT в SYSVOL, которые не существуют в Active Directory ($MissingADGPOsPCTofTotal of the total)» If ($MissingADGPOsCount -gt 0 ) {   Write-Host «Вот они:»   $MissingADGPOs } Write-Host «`n»

# Проверка контейнеров GPC, которые находятся в AD, но не существуют в SYSVOL [array]$MissingSYSVOLGPOs = Compare-Object $DomainGPOList $SYSVOLGPOList -passThru | Where-Object { $_.SideIndicator -eq ‘<=’ } [int]$MissingSYSVOLGPOsCount = $MissingSYSVOLGPOs.Count $MissingSYSVOLGPOsPCTofTotal = $MissingSYSVOLGPOsCount / $DomainGPOListCount $MissingSYSVOLGPOsPCTofTotal = «{0:p2}» -f $MissingSYSVOLGPOsPCTofTotal  Write-Host -ForegroundColor Yellow «Найдено $MissingSYSVOLGPOsCount GPC в Active Directory, которые не существуют в SYSVOL ($MissingSYSVOLGPOsPCTofTotal всего)» If ($MissingSYSVOLGPOsCount -gt 0 ) {   Write-Host «Вот они:»   $MissingSYSVOLGPOs } Write-Host «`n»

Выглядит это вот так:

posh

 

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s