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-Key: 495391

Url: https://administrator.de/contentid/495391

Printed on: April 26, 2024 at 08:04 o'clock

Mitglied: 140913
140913 Sep 16, 2019 updated at 15:40:47 (UTC)
Goto Top
Member: emeriks
emeriks Sep 16, 2019 updated at 15:58:51 (UTC)
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
}