emeriks
Goto Top

Get-GPOReport und domänenübergreifend verknüpfte GPO

Hi,
mit Get-GPOReport kann man sich einen Report über alle GPO's erstellen lassen. z.B. als XML-Report.
Unter LinksTo sind dann die OU's aufgeführt, mit welchen eine GPO verknüpft ist. Allerdings nur für jene Domäne, in welcher man gesucht hat, bzw. in welcher eine GPO gespeichert ist.

Wir haben nun auch GPO's, welche in anderen Domänen der Gesamtstruktur verknüpft sind. Weiß jemand, ob und - wenn ja - wie man mit Get-GPOReport die Verknüpfungen in anderen Domänen auflisten kann?

Alternativ arbeite ich gerade an einem Script, welches die gPLink-Attribute auswertet. Aber das macht Arbeit ... face-wink

E.

Content-ID: 495391

Url: https://administrator.de/forum/get-gporeport-und-domaenenuebergreifend-verknuepfte-gpo-495391.html

Ausgedruckt am: 12.04.2025 um 17:04 Uhr

140913
140913 16.09.2019 aktualisiert um 17:40:47 Uhr
Goto Top
emeriks
emeriks 16.09.2019 aktualisiert um 17:58:51 Uhr
Goto Top
Ja, danke. So habe ich jetzt auch selbst erledigt. face-smile Bloß einfacher.

Anwendungsbeispiele:
Get-GPOLinks --> liefert alle Verknüpfungen aller GPO der Gesamtstruktur und alle nicht verknüpften GPO's
Get-GPOLinks WSUS --> das Gleiche für alle GPO's mit "WSUS" im Anzeigenamen


Function Get-GPOLinks {
  Param([string]$DisplayNameSearchString)

  If($DisplayNameSearchString -eq "*") { $DisplayNameSearchString = $null }  

  $ReturnValue = @()
  $LinkedGPOs = @()

  $Anchors = Get-ADObject -filter "gPLink -like '*'" -properties canonicalName,gPLink -Server "$((Get-ADForest).Name):3268"  

  ForEach($Anchor in $Anchors) {
    ForEach($gPLink In $Anchor.gPLink.Split("][")) {  
      If($gPLink) {
        $gPLink = $gPLink.Trim()
        If($gPLink.Length -gt 0) {
          $GPODN = $gPLink.SubString(0,$gPLink.Length - 2).Replace("LDAP://","")  
          $GPODomainDN = $GPODN.Substring($GPODN.IndexOf(",DC=") + 1)  
          $GPODomainDNS = $GPODomainDN.Replace("DC=","").Replace(",",".")  
          $GPO = $null
          Try {
            $GPO = Get-ADObject $GPODN -Server $GPODomainDNS -properties displayName
            If((-not $DisplayNameSearchString) -or ($GPO.DisplayName -like "*$DisplayNameSearchString*")) {  
              $ReturnValue += New-Object -TypeName PSObject -Property @{GPO=$GPODomainDNS + "\" + $GPO.DisplayName  
                                                                        Container=$Anchor.canonicalName}
            }
            $LinkedGPOs += $GPODN
          }
          Catch {
              $ReturnValue += New-Object -TypeName PSObject -Property @{GPO="unbekannt: " + $GPODN   
                                                                        Container=$Anchor.canonicalName}
          }
        }
      }
    }
  }

  # Alle nicht verlinkten (ungenutzten) GPO's suchen 
  ForEach($GPO in (Get-ADObject -filter "objectClass -eq 'groupPolicyContainer'" -properties canonicalName,DisplayName -Server "$((Get-ADForest).Name):3268")) {  
    If((-not $DisplayNameSearchString) -or ($GPO.DisplayName -like "*$DisplayNameSearchString*")) {  
      $Key = $GPO.CanonicalName.Split("/")[0] + "\" + $GPO.DisplayName  
      If(($ReturnValue | ?{ $_.GPO -eq $key }).Count -eq 0) {
        $ReturnValue += New-Object -TypeName PSObject -Property @{GPO=$Key
                                                                  Container=""}  
      }
    }
  }

  $ReturnValue | Sort GPO, Container | Select GPO, Container
}