none
AD User- und Mitgliedschaften abfragen RRS feed

  • Frage

  • Hallo liebe Community,


    ich bin neu im Umgang mit Powershell und bisher beschrenkt sich das auf einen Befehl mal in der Shell absetzen und das Ergebnis angucken. Jetzt wurde ich aber an eine Aufgabe gesetzt, die scheinbar Verschachtelung erfordert und dessen Ergebnis für mich momenta ist, dass ich die nicht lösen kann.

    Ich soll abfragen, welche User MItglied einer Gruppe sind (ez soweit). Die Ergebnisse sollen zwingend beinhalten

    • Name des Users
    • User-ID
    • Information über Status (aktiv / inaktiv)
    • Anlagedatum
    • Letztes Login Datum
    • Ersteller des entsprechenden Users

    Diese Daten bekomme ich schonmal nicht raus, nur distinguishedName, name, objectClass, objectGUID, SamAccountName, SID. Auch bekomme ich alle Deaktivierten User dazu, bekomme aber nicht raus, wer nun aktiviert oder deaktiviert ist *hilfe?!*

    Das von ebendiesen Usern soll ich eine zweite Liste erstellen mit den letzten Logins von denen an einem spezifischen Server. Diese soll dann beinhalten

    • Name des Users
    • User-ID
    • Login Datum und Zeit der Anmeldung
    • Logout Datum und Zeit der Abmeldung
    • Was für Änderungen/ Korrekturen wurden vorgenommen --> DAFUQ?!

    Da mein Get-ADGroupMember "Gruppenname" schonmal überhauopt nicht in der Lage scheint, mir die Attribute auszuspucken die gefordert sind müsste ich aus meiner Sicht:

    Get-ADGroupMember "Gruppenname" ausführen und nur für das Ergebnis

    a) Filtern nach aktiviert und deaktiviert

    b) die geforderten Attribute der ersten Abfrage NUR für die Aktiven User des Ergebnisses abfragen und exportieren

    c) den betroffenen Server abfragen, WANN diese User sich das letzte Mal angemeldet haben

    d) die letzte Useranmeldung um die Details füllen, die gefordert sind

    Es tut mir leid, aber ab a) schon habe ich KEINE Ahnung, wie ich das machen soll. Die Theorie von Pipes kenne ich, habe aber noch nie mit ihnen arbeiten müssen. Auch habe ich keinerlei Wissen auf dass ich schon zurückgreifen kann, ich kenne keine PowerShell-Befehle und Parameter. Alles was ich bräuchte muss ich googlen.

    Kann mit irgendjemand entweder netterweise helfen, einen dieser Befehle zu erstellen oder mir sagen "das geht so eh nicht?"

    Und mir bestätigen, dass ich richtig liege und das ein paar Monate intensiven PowerShell Lernens voraussetzt?!

    Ich hänge sonst sehr zwischen den Stühlen, "das kannste alles kurz googlen" hat sich nach 3 Stunden Schmerz und Sackgassen nicht bestätigt, wie ich befürchtet habe.






    Dienstag, 22. November 2016 15:32

Antworten

  • Da hast Du Dir ja anständig was vorgenommen, als erste Aufgabe. Vielleicht zerlegst Du Dir das in kleinere Stückchen. Abgesehen davon, tust Du Dir selbst einen Gefallen, wenn Du Dir die Grundlagen aneignest. Sonst gerätst Du immer wieder sehr schnell an Grenzen. Hier sind ein paar gute Quellen für Anfänger: Beginner Sites an Tutorials.

    Hier mal ein Anfang:

    Get-ADGroupMember -Identity <Dein GruppenName> | ForEach-Object{Get-ADUser -Identity $_.Samaccountname | Select-Object -Property Name,DisplayName,enabled}

    Pipeline: Das erst cmdlet ermittelt die Gruppenmitglieder. In diesem Ergebnis, sind die SamAccountNamen der Mitglieder enthalten. Die reichst Du quasi über die Pipeline weiter, quasi als Input für das nächste cmdlet. Das ermittelt in diesem Fall die Attribute der einzelnen User und gibt Dir hier in diesem Beispiel den ObjectNamen, DisplayNamen und den Wert der Eigenschaft 'enabled' aus.

    Wenn Du wissen möchtest, welche Properties alle vorhanden sind, kannst Du ja einfach mal Deinen eigenen UserAccount per 

    Get-ADUser -Identity $ENV:UserName -Properties * | Select-Object -Property *

    abfragen und forschen.

    So, viel Spaß erst mal!  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 22. November 2016 15:52
  • Hallo Niwo,

    Ich finde es nur immer wichtig, das man auch mitbekommt, wo andere ihr wissen Herbeziehen, bzw. gute Infos sind.

    MS hat hier etwas differenziert, du möchtest mit ADGroupmember, ja nur Eigenschaften der Gruppenmitglieder haben. Genauere Infos findest du nur im direkten ADUser.

    Wenn man etwas drüber nachdenkt, auch relativ logisch.

    Praktisch kannst du schon seleektieren - du nimmst dir die Gruppe per ADgroupmember, pipes diese und nimmt dadurch die User mit nach Get-ADUser

    Wurde ja uach so gemacht:

    ->Get-ADGroupMember<- -Identity <Dein GruppenName> ->|<- ForEach-Object{->Get-ADUser <--Identity $_.Samaccountname | Select-Object -Property Name,DisplayName,enabled}

    Gruß

    Carsten


    Wenn Dir eine Antwort weiter geholfen hat dann markiere sie doch bitte als Antwort! LG Carsten

    • Als Antwort markiert Niwo Sapphire Mittwoch, 23. November 2016 12:13
    Mittwoch, 23. November 2016 10:04

Alle Antworten

  • Da hast Du Dir ja anständig was vorgenommen, als erste Aufgabe. Vielleicht zerlegst Du Dir das in kleinere Stückchen. Abgesehen davon, tust Du Dir selbst einen Gefallen, wenn Du Dir die Grundlagen aneignest. Sonst gerätst Du immer wieder sehr schnell an Grenzen. Hier sind ein paar gute Quellen für Anfänger: Beginner Sites an Tutorials.

    Hier mal ein Anfang:

    Get-ADGroupMember -Identity <Dein GruppenName> | ForEach-Object{Get-ADUser -Identity $_.Samaccountname | Select-Object -Property Name,DisplayName,enabled}

    Pipeline: Das erst cmdlet ermittelt die Gruppenmitglieder. In diesem Ergebnis, sind die SamAccountNamen der Mitglieder enthalten. Die reichst Du quasi über die Pipeline weiter, quasi als Input für das nächste cmdlet. Das ermittelt in diesem Fall die Attribute der einzelnen User und gibt Dir hier in diesem Beispiel den ObjectNamen, DisplayNamen und den Wert der Eigenschaft 'enabled' aus.

    Wenn Du wissen möchtest, welche Properties alle vorhanden sind, kannst Du ja einfach mal Deinen eigenen UserAccount per 

    Get-ADUser -Identity $ENV:UserName -Properties * | Select-Object -Property *

    abfragen und forschen.

    So, viel Spaß erst mal!  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 22. November 2016 15:52
  • Hallo Niwo,

    ich kann dir 2 Seiten dazu empfehlen.

    http://www.active-directory-faq.de/2015/05/ad-powershell-basics-2-get-aduser/

    und

    http://www.computerperformance.co.uk/powershell/index.htm

    Schau mal ob du damit weiter kommst, kleiner tipp "

    Get-ADUser -filter * -properties *"

    Gibt dir alle ADUser aus mit sämtlichen Eigenschaften.... das ist aber wahrscheinlich ziemlich viel.

    Gruß

    Carsten


    Wenn Dir eine Antwort weiter geholfen hat dann markiere sie doch bitte als Antwort! LG Carsten

    Dienstag, 22. November 2016 15:53
  • Klasse, vielen Dank. Der Befehl funktioniert natürlich und ich merke, dass ich doch schon recht weit war.

    Denn genau diese Ausgabe hatte ich auch schon (bis auf "enabled") aber:

    Gat-ADGroupMember wirft, wenn ich mir -Property * ausgeben lasse folgendes aus:

    DistinguishedName

    Enabled

    GiveName

    Name

    ObjectClass

    ObjectGUID

    SamAccountName

    SID

    Surname

    UserPrincipalName

    PropertyNames

    AddedProperties

    ModifiedProperties

    PropertyCount

    Das heißt doch, dass durch Get-ADGroupMember nicht alle Parameter ausgegeben werden können die ich brauche, oder?

    Wie bekomme ich denn für die Ergebnisse z.B. Created und LastLogon? Das kann mir Get-ADUser liefern, aber ich will doch nicht für hunderte Ergebnisse einzeln einen Get-ADUser Befehl absetzen.

    Kann ich die nicht verpipen? Das Ergebnis nehmen und nur FÜR DIE USER, die als Ergebnis vom Get-ADGroupMember herausbekomme, nachfolgend einen Get-ADUser ausführen (ohne ihn einzeln zu tippen User für User), um die fehlenden Werte zu ergänzen?

    Leider glaube ich, dass ich die nicht verpipen kann, denn die Meldung die ich bekomme besagt "...the command does not take pipeline input"

    Versuche habe ich get-ADUser -filer * -properties * | get-ADGroupMember ...blabla und auch andersrum.

    SRY, wie Carsten Heins es vorschlägt, mal eben kurz Grundlagen anlesen schaffe ich in der kurzen Zeit nicht. Klar, wer mit sowas arbeitet sollte die Syntax kennen ... *sigh*

    Ist halt nur grad ein Zeittehema


    --------------------------------- ...ich bin der Jäger des Mondes, bis der Morgen erwacht!



    Mittwoch, 23. November 2016 09:22

  • Kann ich die nicht verpipen? Das Ergebnis nehmen und nur FÜR DIE USER, die als Ergebnis vom Get-ADGroupMember herausbekomme, nachfolgend einen Get-ADUser ausführen (ohne ihn einzeln zu tippen User für User), um die fehlenden Werte zu ergänzen?




    Jetzt verwirrst Du mich. Genau das ist doch in dem Code-Beispiel passiert. Get-ADGroupMember gibt eben nicht alle User-Attribute aus. Deshalb haben wir die in der Gruppe gefundenen Mitglieder/User genommen und mittels der Pipe an Get-ADUser 'verfüttert'.

    Du solltest Dir wirklich erstmal die Grundlagen draufschaffen. Es wird Dir das Leben in Zukunft erleichtern. Wenn Du nicht verstehst, was Du machst, legst Du Dir bei der Fehlersuche die Karten.  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 23. November 2016 10:01
  • Hallo Niwo,

    Ich finde es nur immer wichtig, das man auch mitbekommt, wo andere ihr wissen Herbeziehen, bzw. gute Infos sind.

    MS hat hier etwas differenziert, du möchtest mit ADGroupmember, ja nur Eigenschaften der Gruppenmitglieder haben. Genauere Infos findest du nur im direkten ADUser.

    Wenn man etwas drüber nachdenkt, auch relativ logisch.

    Praktisch kannst du schon seleektieren - du nimmst dir die Gruppe per ADgroupmember, pipes diese und nimmt dadurch die User mit nach Get-ADUser

    Wurde ja uach so gemacht:

    ->Get-ADGroupMember<- -Identity <Dein GruppenName> ->|<- ForEach-Object{->Get-ADUser <--Identity $_.Samaccountname | Select-Object -Property Name,DisplayName,enabled}

    Gruß

    Carsten


    Wenn Dir eine Antwort weiter geholfen hat dann markiere sie doch bitte als Antwort! LG Carsten

    • Als Antwort markiert Niwo Sapphire Mittwoch, 23. November 2016 12:13
    Mittwoch, 23. November 2016 10:04
  • Hi, wie beschrieben würde auch ich dir raten dich mit dem Thema mehr zu beschäftigen.Es lohnt sich in jedem 

    Fall.Mir haben neben den PS Büchern auch sehr die beiden Webinare geholfen

    Getting Started with PowerShell 3.0 Jump Start

    Advanced Tools & Scripting with PowerShell 3.0 Jump Start

    Dazu hatte David auch mal etwas geschrieben

    Ich hoffe es hilft dir weiter


    Bis dann, Toni! Wenn Dir meine Antwort hilft dann markiere sie bitte als Antwort! Vielen Dank!

    Mittwoch, 23. November 2016 10:17
  • Okay, ich hab's.

    Es gab tatsächlich jemanden in meinem Bekanntenkreis, der mir helfen konnte. Warum auch immer (ich war der Meinung, EXAKT dasselbe getippt zu haben) klappt sein Befehl.

    Get-ADGroupMember -Identity "Domain Admins" | Get-ADUser -properties * | format-list name,SamAccountName,Enabled,Created,Lastlogondate >c:\Liste_17.txt

    Vielen DanK für Eure Denkanstöße ;)


    --------------------------------- ...ich bin der Jäger des Mondes, bis der Morgen erwacht!



    Mittwoch, 23. November 2016 10:28
  • Na dann is ja jut.  

    Sei doch bitte so nett, wenn Du das nächste mal hier Code postest, diesen auch als solchen zu formatieren. Und wenn Du der Meinung bist, dass Dir hier der ein oder andere Beitrag geholfen hat, markiere diesen oder diese doch bitte als Antwort. Das hilft dann auch anderen, die ähnlich Fragen oder Probleme haben.

    Danke und einen schönen Tag!


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 23. November 2016 10:58
  • OK, klasse, ja werde ich tun ;)

    Danke für den Hinweis.


    --------------------------------- ...ich bin der Jäger des Mondes, bis der Morgen erwacht!

    Mittwoch, 23. November 2016 12:13
  • Mich hat das "ForEach-Object" in die Irre geführt.

    Weil ich eine Pipe bzw. Verknüpfung der Beiden Abfragen nur mit dem "|" Zeichen kenne. Ihr seht ja auch meine Lösung, mit FOR konnte mir da auch keiner helfen.

    Mit der hier vorgeschlagenen Methode bekam ich komischerweise immernoch nur die beschränkten Parameter der Get-ADGroupMember Abfrage raus.

    Und, ja, ich sage ja selber ich bräuchte Grundlagen.

    Wenn ich dir aber nen Motor vor die Nase schmeiße und sage "zerleg den mal, tune ihn auf und bau ihn wieder zusammen, du hast anderthalb Tage" dann ist KLAR, dass du dir eigentlich erst Wissen ansammeln müsstest.

    Aber das wird grad nicht berücksichtigt. In dem Moment wärst du auch froh, im KFZ-Forum wen zu finden, der das kurz für dich macht.

    Vielleicht brauche ich das nie wieder, vielleicht musst auch du nie wieder Autos zerlegen. Oder vielleicht ist das unsere jeweilige, zukünftige Aufgaben. Klar, dann wird es ein Lernen geben..

    Jetzt ... in diesem Moment ... gibt es nunmal nur das "hauptsache erledigt".


    --------------------------------- ...ich bin der Jäger des Mondes, bis der Morgen erwacht!

    Mittwoch, 23. November 2016 12:22