none
Lokale Admin Gruppe über GroupPrincipal auslesen

    Frage

  • Hallo,

    ich möchte für Server die Lokale Admin Gruppe auslesen mit dem folgenden Code:

    Add-Type -AssemblyName System.DirectoryServices.AccountManagement
    
    $ContextType = [System.DirectoryServices.AccountManagement.ContextType]::Machine 
            $PrincipalContext = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ContextType, $Computer 
            $IdentityType = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName 
            $GroupPrincipal = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($PrincipalContext, $IdentityType, $GroupName)


    Letzte Woche hat der Befehl noch Funktioniert und ich habe die Liste der Lokalen Administratoren bekommen.

    Auf meinem Windows Client, der auch mit der Domäne verbunden ist, konnte und kann ich diese Liste auch erstellen ohne Fehlermeldung.

    Wenn ich jetzt jedoch auf einem x beliebigen Server den Befehl ausführen möchte, bekomme ich jetzt nur noch eine Fehlermeldung

    Die Fehlermeldung: 

    format-default : Der Netzwerkpfad wurde nicht gefunden.
        + CategoryInfo          : NotSpecified: (:) [format-default], COMException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.PowerShell.Commands.FormatDefaultCommand

    Wenn ich z.B. $GroupPrincipal.Members eingebe, bekomme ich den Lokalen Admin Account angezeigt und danach die Meldung:

    Fehler beim Durchlaufen einer Auflistung: Der Netzwerkpfad wurde nicht gefunden.
    .
    In Zeile:1 Zeichen:1
    + $GroupPrincipal.Members
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.Director...ctionEnumerator:PrincipalCollectionEnumerator) [], RuntimeException
        + FullyQualifiedErrorId : BadEnumeration

    Was kann hier der Grund dafür sein? Bin im Moment etwas ratlos.

    Das Problem scheint nur auf Servern zu bestehen und nicht auf Clients




    • Bearbeitet 0liver85 Montag, 11. März 2019 16:14
    Montag, 11. März 2019 13:07

Antworten

  • Hallo,

    also der Code funktioniert. Es ist aber nicht ersichtlich ob du die Variablen $Computer und $GroupName richtig befüllt hast.

    Wenn ich z.B.: bei $Computer einen Namen hinterlege den es nicht gibt erhalte ich den Netzwerkpfad Fehler ...

    Keine Ahnung mit welchem OS du arbeitest, aber es gibt ab Windows 10 / Server 2016 CMDLets dafuer

    Get-LocalGroup usw.

    Beste Gruesse
    brima

    Montag, 11. März 2019 14:22
  • Moin,

    Deine Interpunktion am Anfang ist etwas abenteuerlich, daher ist es nicht 100% klar, wo es nun funktioniert und wo nicht. Bei mir im Lab funktioniert der Code allerdings ohne irgendwelche Einschränkungen zwischen 2012R2, 2016 und 2019. Am Client funktioniert's auch, der ist aber nicht mit seiner Domäne verbunden, daher klappt die Auflistung nicht. Ich vermute, in die Richtung geht auch Deine zweite Fehlermeldung, dass er die Domäne nicht findet, um sie aufzulösen.

    Apropos: Ich würde, um der "Administrators vs. Administratoren"-Problematik aus dem Weg zu gehen, den Code etwas modifizieren:

    $GroupName = "S-1-5-32-544"
    #...
    $IdentityType = [System.DirectoryServices.AccountManagement.IdentityType]::Sid
    Damit erwischst Du die Gruppe unabhängig von der Systemsprache.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.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, 11. März 2019 15:51

Alle Antworten

  • Hallo,

    also der Code funktioniert. Es ist aber nicht ersichtlich ob du die Variablen $Computer und $GroupName richtig befüllt hast.

    Wenn ich z.B.: bei $Computer einen Namen hinterlege den es nicht gibt erhalte ich den Netzwerkpfad Fehler ...

    Keine Ahnung mit welchem OS du arbeitest, aber es gibt ab Windows 10 / Server 2016 CMDLets dafuer

    Get-LocalGroup usw.

    Beste Gruesse
    brima

    Montag, 11. März 2019 14:22
  • $Computer ist einfach nur der Computername z.B. 'Testrechner2' und $GroupName ist 'Administrators'

    Leider sind nicht alle Server auf 2016, es schwirren hier noch 2012 Server rum und da das WMF 5.1 nicht automatisch über WSUS verteilt wird, haben die den Patch entsprechend nicht. Daher kann ich das CMDLet leider nicht nutzen. War auch mein erster Gedanke ;)

    Das Script hat ja auch so schon Funktioniert letzte Woche und jetzt nicht mehr, ohne das ich was verändert hab. Ich komme halt mit der Fehlermeldung nicht klar. Die ist so nicht sagend. Ich denke, das im Netzwerk irgendwas geändert wurde, oder ein Patch installiert wurde. Ich habe nur keine Ahnung wo ich ansetzten kann.

    Montag, 11. März 2019 14:31
  • Hallo,

    wie gesagt, bei einem falschen Computernamen bekomme ich die gleiche Fehlermeldung ...

    Hat sich also z.B.: der Computername verändert, stimmt was mit DNS nicht oder so.

    Verwende mal anstelle des Computer Namen dessen IP. 

    Beste Gruesse
    brima

    Montag, 11. März 2019 14:51
  • Mit der IP sieht es genauso aus. 

    Test-Connection Funktioniert problemlos

    Wenn ich einen falschen Computernamen nutze, bekomme ich noch zusätzlich die Meldung:

    Ausnahme beim Aufrufen von "FindByIdentity" mit 3 Argument(en):  "Der Netzwerkpfad wurde nicht gefunden.

    Montag, 11. März 2019 15:16
  • Moin,

    Deine Interpunktion am Anfang ist etwas abenteuerlich, daher ist es nicht 100% klar, wo es nun funktioniert und wo nicht. Bei mir im Lab funktioniert der Code allerdings ohne irgendwelche Einschränkungen zwischen 2012R2, 2016 und 2019. Am Client funktioniert's auch, der ist aber nicht mit seiner Domäne verbunden, daher klappt die Auflistung nicht. Ich vermute, in die Richtung geht auch Deine zweite Fehlermeldung, dass er die Domäne nicht findet, um sie aufzulösen.

    Apropos: Ich würde, um der "Administrators vs. Administratoren"-Problematik aus dem Weg zu gehen, den Code etwas modifizieren:

    $GroupName = "S-1-5-32-544"
    #...
    $IdentityType = [System.DirectoryServices.AccountManagement.IdentityType]::Sid
    Damit erwischst Du die Gruppe unabhängig von der Systemsprache.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.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, 11. März 2019 15:51
  • Ich habe den Text nochmal etwas umgeschrieben. Hoffe es ist nun klarer was ich für ein Problem habe. 

    Das mit der SID ist ein guter Tipp. Die Server sollten aber alle auf Englisch sein. Werde ich trotzdem anpassen, wenn ich es wieder zum laufen bekomme.

    Nach einigen Test hier, Funktioniert es scheinbar bei allen Clients Problemlos, aber bei keinem getesteten Server. So wie es ausschaut, bekomme ich Lokale Accounts angezeigt und danach, sobald er auf AD Gruppen zugreift, kommt die Fehlermeldung. Kann es sein, das der Versucht die AD Gruppen aufzulösen und das nicht hin bekommt? Also das eine Bestimmte Gruppe da Probleme macht? 

    Es sind 2-3 Gruppen pro Server. Die Domain Admin Gruppe, unsere Admin Gruppe und ggf. noch eine für diesen Server. Auf den Clients sind es andere Gruppen

    Montag, 11. März 2019 16:13
  • Was auch immer das Problem war, es ist wieder weg. Ich kann jetzt wieder das Script so ausführen ohne das ich was geändert habe.

    Trotzdem danke für die Unterstützung.

    Donnerstag, 14. März 2019 15:50
  • Ich weiß zwar nicht, wieso Posts als Lösung markiert wurden, die das Problem nicht gelöst haben, aber gut

    Inzwischen stellt es sich so da, das ich das Script ausführen kann auf den Servern und kurz drauf für mehrere Tage nicht mehr Funktioniert.

    Nach einer weile Funktioniert es dann wieder wie gewünscht und das Spiel geht von vorne los. Gibt es hier irgendwas, was ein Limit setzten kann, bei zu vielen Anfragen?

    Ich bin aktuell beim error Handling und führe deswegen das Script häufiger aus, bzw würde es gerne

    Mittwoch, 20. März 2019 14:40
  • > Ich weiß zwar nicht, wieso Posts als Lösung markiert wurden, die das Problem nicht gelöst haben, aber gut
     

    Dein letzter Eintrag war "es geht wieder" und du weisst nicht warum. Ich auch nicht, aber da die Chance besteht das es die Tips hier waren, wurde die als Antwort markiert. :)
    Wenn du einen Grund hast, kannst du solche Antwortmarkierungen auch selbst rückgängig machen. Aber bitte dann kurz erklären.

    Grüße, Denniver


    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Donnerstag, 21. März 2019 16:53
    Moderator