none
Userliste gegen AD matchen und EIgenschaften auslesen RRS feed

  • Frage

  • Hallo,

    ich habe eine Liste (csv) mit etwa 2400 Usern mit dem LogonName (Pre Windows 2000).

    Die Applikation, die diese Liste ausgibt, hat vom AD für diese User irgendwann mal einen sperrvermerk bekommen.

    Nun haben wir festgestellt, dass dies passiert, wenn: Ein der account gelockt ist, der User deaktiviert wurde, der User gelöscht wurde usw.)

    Gibt es eine Möglichkeit diese Liste automatisiert gegen das AD zu matchen und die User Account Options abzufragen.

    Nach dem Motto Nimm den Usernamen, frage die User account Options ab, trage sie in die Liste ein.

    Nächster Username.

    Sprich, am Ende will ich in der Liste stehen haben:

    User xy - Account gelockt

    User ab - nicht vorhanden

    User cd - User deaktiviert

    Danke

    Gruß

    RomHam


    Roman Hambsch IS Operations and VIP Support

    Montag, 17. Oktober 2016 07:02

Antworten

Alle Antworten

  • Moin,

    so auf die Schnelle:

    $users = Get-Content "c:\sys\liste.txt"
    foreach ($user in $users) {
        $aduser = Get-ADUser -Properties LockedOut, Enabled -Filter {SamAccountName -eq $user}
        $status = @()
        if ($aduser) {
            if (!($aduser.Enabled)) { $status += "deaktiviert"}
            if ($aduser.LockedOut) { $status += "gesperrt"}
        } else {
            $status += "nicht vorhanden"
        }
        if ($status.Count -eq 0) { $status = "OK" }
        Write-Host "$user : $($status -join ",")"
    }

    Kann man natürlich unendlich verfeinern ;-)

    Und wenn Du noch mit 2008R2 arbeitest, vorher noch Import-Module ActiveDirectory nicht vergessen ;-)


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (in German) -> http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Montag, 17. Oktober 2016 07:29
  • Hi Evgenij,

    ich beschäftige mich auch mit Powershell...daher möchte ich es gerne komplett verstehen

    Kannst du mir zu deinem Script kurz die Schritte erklären?

    Mir sind die Punkte klar...ich habe sie mal für mich kommentiert

    # Hier die alten Daten
    $users = Get-Content "c:\sys\liste.txt"
    #Schleife..ist klar
    foreach ($user in $users) {
        #Vergleiche den aktuellen User=$Item über den SAMAccountname 
        $aduser = Get-ADUser -Properties LockedOut, Enabled -Filter {SamAccountName -eq $user}

    Aber dann.Du deklarierst ein Array um die Daten zu erfassen.Richtig?

    $status = @()

    Übergibst den Daten,je nach Status, einen " angehängten Wert"

     if ($aduser) {
            if (!($aduser.Enabled)) { $status += "deaktiviert"}
            if ($aduser.LockedOut) { $status += "gesperrt"}
        } else {
            $status += "nicht vorhanden"

    Wenn kein Zustand zutrifft Status mit "OK" überschrieben/gefüllt ?

    if ($status.Count -eq 0) { $status = "OK" }

    Da sich die Write-Host Anzeige am Ende der Schleife befindet gibt sie jeden einzelnen "Zustand" des $Array aus.

    Also ....deaktiviert, gesperrt oder OK

    Write-Host "$user : $($status -join ",")"
    }

    Hab ich das so richtig interpretiert?

    Wenn ja, ist mir nicht klar, was am Ende der Schleife im Array steht (Klar, das könnte ich testen aber ich frag es jetzt einfach mal).

    Steht dann nur der letzte "Userzustand" in der Variable $Status oder alle Durchlaufenden?

    Get-Alias liefert mir keine Antwort für "!" | get-help ! leider auch nicht .....wie hier

    if (!($aduser.Enabled)) { $status += "deaktiviert"}

    Was bedeutet es?



    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!


    • Bearbeitet tonibert Montag, 17. Oktober 2016 15:07
    Montag, 17. Oktober 2016 15:06
  • Moin,

    das mit dem Array habe ich nur gemacht, weil die Zustände "deaktiviert" und "gesperrt" theoretisch gleichzeitig vorkommen können, und dann gäbe es noch z.B. "abgefaufen", was vielleicht auch mit den anderen kombinierbar wäre. Und das Ding mit dem Join verbindet die einzelnen Werte des Array mit Komma zu einem String. Steht da nur ein Wert, gibt es natürlich auch kein Komma ;-)

    Die möglichen Werte im obigen Skript sind daher:

    OK

    nicht vorhanden

    deaktiviert

    gesperrt

    deaktiviert,gesperrt

    Das Ausrufezeichen ist die logische Verneinung, also praktisch -not .


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (in German) -> http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.


    Montag, 17. Oktober 2016 15:23
  • Danke dir!

    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!

    Montag, 17. Oktober 2016 15:39