Powershell Get-ADGroup mit vertrauter Domäne

Andreas Sperling 40 Zuverlässigkeitspunkte
2024-03-22T14:00:29.0266667+00:00

Hallo zusammen,
ich nutze folgenden Code um eine Liste mit allen AD-Gruppen und deren Mitglieder zu ermitteln.

#Diese Powershell Datei liefert die alle Mitglieder von AD-Gruppen
$data = @()
Get-ADGroup -Filter * | %{
    $members = (Get-ADGroupMember $_.SamAccountName -Recursive -EA SilentlyContinue | select -Expand Name) -join ';'
    $data += New-Object PSObject -Property @{'Gruppe' = $_.Name;'Mitglieder' = $members}
}
$data |Export-CSV -Path \\sv001\test\'AllGroupMember.txt' -Encoding 'utf8' -NoTypeInformation -Delimiter  ';'

das funktioniert auch super, solange in keiner Sicherheitsgruppe ein User einer vertrauten Domäne ist.

Ich habe das mal auf zwei Testgruppen reduziert.

$data = @()
Get-ADGroup -Filter {name -like "*-Test-Gruppe"} | %{
    $members = (Get-ADGroupMember $_.SamAccountName -Recursive -EA SilentlyContinue | select -Expand Name) -join ';'
    $data += New-Object PSObject -Property @{'Gruppe' = $_.Name;'Mitglieder' = $members}
}

User's image

In der 00-TestGruppe sind zwei User: test.User1;test.User2
In der 01-TestGruppe sind drei User: test.User3;test.VertrauterDomUser

Das Ergebnis ist eine Wiederholung des Inhalts von der vorherigen Gruppe.

"Gruppe";"Mitglieder"

"00-Test-Gruppe";"test.User1;test.User2"

"01-Test-Gruppe";"test.User1;test.User2"

Hat Jemand eine Idee wie ich das in den Griff bekomme?
Meine Powershell Kenntnisse sind aber sehr bescheiden.

Gruß
Andreas

PowerShell für Windows Server
PowerShell für Windows Server
Windows Server: Eine Familie von Microsoft-Serverbetriebssystemen, die die Verwaltung, Datenspeicherung, Anwendungen und Kommunikation unternehmensweit unterstützen.PowerShell: Eine Microsoft-Frameworkfamilie für die Aufgabenautomatisierung und Konfigurationsverwaltung, die aus einer Befehlszeilenshell und der zugehörigen Skriptsprache besteht
1 Frage
PowerShell
PowerShell
Eine Microsoft-Frameworkfamilie für die Aufgabenautomatisierung und Konfigurationsverwaltung, die aus einer Befehlszeilenshell und der zugehörigen Skriptsprache besteht
3 Fragen
0 Kommentare Keine Kommentare
{count} Stimmen

2 Antworten

Sortieren nach: Am hilfreichsten
  1. Dominik Hasenkopf 5 Zuverlässigkeitspunkte
    2024-03-24T06:35:04.72+00:00

    Hi,

    du kannst jeweils nur eine Domäne abfragen. du kannst also foreach verwenden, um alle Domänen für jede Gruppe zu durchlaufen. hier ist ein Beispiel :)

    $domains = @("localDomain.local", "trustDomain.local")
    
    $groups = Get-ADGroup -Filter { name -like "*-Test-Gruppe" } 
    $data = @();
    foreach ($group in $groups) {
      $members = $null;
    
      foreach ($domain in $domains) {
        $members += (Get-ADGroupMember $group.SamAccountName -Server $domain -Recursive -EA SilentlyContinue | select -Expand Name) -join ';'
      }
      $data += [PSCustomObject]@{
        name       = $group.name
        Mitglieder = $members
    
    
      }
    }
    
    $data
    
    

  2. Ian Xue (Shanghai Wicresoft Co., Ltd.) 30.361 Zuverlässigkeitspunkte Microsoft-Anbieter
    2024-03-25T07:41:31.3833333+00:00

    Hi.,

    Das Skript sieht für mich gut aus. Es scheint ein Problem mit dem Cmdlet get-adgroupmember zu sein. Bitte prüfen Sie, ob diese Funktion der AD-Benutzer der vertrauenswürdigen Domänen abrufen kann.

    Function Get-ADGroupMemberFix {
        [CmdletBinding()]
        param(
            [Parameter(
                Mandatory = $true,
                ValueFromPipeline = $true,
                ValueFromPipelineByPropertyName = $true,
                Position = 0
            )]
            [string[]]
            $Identity,
    
            [string]
            $Server
        )
    
        begin {
            $additionalArguments = @{}
            if($PSBoundParameters.ContainsKey('Server')){
                $additionalArguments['Server'] = $Server
            }
        }
    
        process {
            foreach ($GroupIdentity in $Identity) {
                $Group = $null
                $Group = Get-ADGroup -Identity $GroupIdentity -Properties Member @additionalArguments
                if (-not $Group) {
                    continue
                }
                Foreach ($Member in $Group.Member) {
                    Get-ADObject $Member 
                }
            }
        }
    }
    

    https://stackoverflow.com/questions/58221736/powershell-5-1-16299-1146-get-adgroupmember-an-operations-error-occurred

    Ian Xue


    Wenn die Antwort hilfreich ist, klicken Sie bitte auf "Annahme der Antwort" und bewerten Sie sie hoch.