nagus
Goto Top

Powershell: Funktion zum auslesen der Gruppen eines Referenzusers

Moin zusammen,

ich habe mal wieder ein Problem und bin mir nicht sicher ob es sich um einen Bug oder einen Fehler von mir handelt.

Ich habe die folgende Funktion gebaut, die mir von einem Benutzer im AD die Gruppen auslesen soll und gegen eine Blackliste prüft. Nur Gruppen die nicht in der Blacklist sind, sollen zugewiesen werden. Ich habe das Problem, das immer nur 46 Gruppen ausgelesen werden - und dann ist ohne Fehler schluss.
 ----- Funktion Referenz-User - liest Refernz User Gruppen aus --- return= $RefUserGrp
Function Referenz-User([String]$RefUserGrp)
{
    try
        {
            $RefUserGrp = @()
            $CountAddGrp=0
            $CountDenGrp=0
            $CountBlkGrp=0

            $RefUserGrpTmp = get-aduser $RefUser -Properties * | select SamAccountName,@{n='Groups';e={$_.memberof | %{(get-adgroup $_).Name}}}  
            sleep 2
            ForEach($r in $RefUserGrpTmp.Groups)
                {                                                                       
                    $r=$r.trim()
                    Write-host "prüfe auf $($r)"  
                    $CountAllGrp ++
                    $countBlkGrp=0
                    ForEach($b in $Gruppen_Blacklist.gruppen)
                        {
                            $b=$b.trim()
                            $countBlkGrp++                                    
                            if($r -eq $b)
                                {
                                    $AddGrp="nok"  
                                    write-log "Gruppe $($r) ist auf BLACKLIST und wird nicht zugewiesen" 1  
                                    $CountDenGrp++
                                }
                            else
                                {
                                    $AddGrp = "OK"  
                                }
                            
                        }
                    if($AddGrp -ne "OK")  
                        {
                            $RefUserGrp += "$r;"  
                            #write-log "Zuweisung Gruppe $($r)" 
                            $CountAddGrp++
                            
                        }
                }    
            
            return $RefUserGrp
        }
    catch
        {
            If($RefUser -eq "")  
                {
                    Write-log "Der Referenz User wurde nicht angegeben und ist leer" 1  
                }
            else
                {
                    Write-Log "Der Referenz User $($RefUser) existiert nicht" 1  
                }
                $RefUser
                $error

        }
    finally
        {
            Write-log "$($CountAllGrp) geprüfte Gruppen"  
            Write-log "$($CountAddGrp) Gruppen werden $($u.Kürzel) zugewiesen"  
            Write-Log "$($CountDenGrp) Gruppen werden $($u.Kürzel) nicht zugewiesen"  
            Write-Log "$($CountBlkGrp) Blacklist-Gruppen durchsucht"  
        }
            
}

Nach Aufruf der Funktion erhalte ich die folgende Rückmeldung:
[2021-01-07 19:18:36] - [INFO] 46 geprüfte Gruppen
[2021-01-07 19:18:36] - [INFO] 0 Gruppen werden XXXXX zugewiesen
[2021-01-07 19:18:36] - [INFO] 8 Gruppen werden XXXXX nicht zugewiesen
[2021-01-07 19:18:36] - [INFO] 670 Blacklist-Gruppen durchsucht

Wenn ich aber die folgende Zeile manuell ausführe, erhalte ich alle Gruppen des Users (bei mir mehr als 90):
$RefUserGrpTmp = get-aduser $RefUser -Properties * | select SamAccountName,@{n='Groups';e={$_.memberof | %{(get-adgroup $_).Name}}}  

Habe ich was übersehen? Wo liegt der Fehler??
Thx
Nagus

Content-ID: 638599

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

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

147069
147069 07.01.2021 aktualisiert um 23:54:45 Uhr
Goto Top
Habe ich was übersehen? Wo liegt der Fehler??
Ja hast du, du hast die Zähler-Variablen erst zu spät innerhalb des try Blocks angelegt und diese sind im finally Block nicht mehr die gleichen(nicht sichtbar) weil das dort ein anderer Scope ist.
Das was du dort siehst sind wohl Ergebnisse dieser Variablen die du bei deinen Tests angelegt hast und noch in der PS-Session vorhanden waren nur aber eben mit alten Ergebnissen.
Definiere sie außerhalb des try catch finally dann sind die Variablen auch in allen Blocks des try catch finally sichtbar.

Beschäftige dich also mal mit dem Variable Scope.
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...