Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Nutzer einer Gruppe sprachneutral(!) remote auslesen: "Administratoren" vs. "Administrators"
SeriouslyNot
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

Nutzer einer Gruppe sprachneutral(!) remote auslesen: "Administratoren" vs. "Administrators"

beantworten | zitieren | melden

Guten Morgen,

ich versuche mittels u.s. Methode alle Nutzer der Gruppe Administratoren auszulesen.
Funktioniert soweit auch ganz gut, einziges Problem sind verschiedene Sprachen. Im deutschen heißt die Gruppe "Administratoren", im englischen "Administrators" etc.
Kennt ihr eine Möglichkeit, statt dem exakten Namen der Gruppe anzugeben, die ganze Sache etwas Sprachneutraler zu gestalten?

private void GetUsers(String strHost, int Line)
        {
            using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://" + strHost + "/Administratoren,group"))
            {
                int i = 0;
                foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
                {
                    using (DirectoryEntry memberEntry = new DirectoryEntry(member))
                    {
                        string fullUser = memberEntry.Path;
                        char[] strTrim = { 'W', 'i', 'n', 'N', 'T', ':', '/', '/'};
                        string shortUser = fullUser.TrimStart(strTrim);
                        user[i] = shortUser;
                        dgvItems.Rows[Line].Cells[i+2].Value = user[i];
                        i += 1;
                    }
                }
            }
        }
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

per SID: Bekannte Sicherheits-IDs in Windows-Betriebssystemen

Mit dem PrincipalContext (und einer Architektur wie Repositoy Pattern) würdest Du Dir das Leben zusätzlich leichter machen.
private Nachricht | Beiträge des Benutzers
Sykwitit
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Hallo!

Ich interessiere mich auch für so eine Lösung. Derzeit hab ich es über "net localgroup" gelöst und die Gruppen ausgelesen.

Also ich lese die SID aus für die Administratorgruppe und speiche sie in einem string.

var sidLocalAdmin = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);     
            var admingroup = sidLocalAdmin.Translate(typeof(NTAccount)).ToString();
            string admin = Regex.Match(admingroup, @".+\\(.+)", RegexOptions.Compiled).Groups[1].Value;

Aber derzeit liest er es ja nur auf den lokalen Rechner aus. Wie kann ich den auf einen anderen PC die Gruppe auslesen?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Sykwitit am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Einfach einen PrincipalContext des anderen PCs erstellen und darauf die Abfrage ausführen.
Die PrincipalContext Klasse hat dafür passende Überladungen im Konstruktor. Siehe die verlinkte Doku.

Und bevor die Frage kommt: ja, auch die Admingruppe kriegt man über die passenden GroupPrincpal-Find()-Methoden
private Nachricht | Beiträge des Benutzers
SeriouslyNot
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Hallo,

hab das jetzt mal probiert und folgendes ist dabei entstanden:

PrincipalContext ctx = new PrincipalContext(ContextType.Machine, strHost);
            GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Sid, "S-1-5-32-544");

Leider wirft er nur folgenden Felher aus:
Zitat
Unbekannter Fehler (0x80005000)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Folgendes geht bei mir:

            var adminGroupSID = "S-1-5-32-544";

            PrincipalContext ctx = new PrincipalContext( ContextType.Machine );
            GroupPrincipal grp = GroupPrincipal.FindByIdentity( ctx, IdentityType.Sid, adminGroupSID );

Wenns Remote nicht geht fehlen Dir wohl die Rechte.
private Nachricht | Beiträge des Benutzers
Sykwitit
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Also nach Abt's Code geht es nur, wenn ich die Gruppe auf meinen Server abrufen, auf einen anderen Client(gleicher Account mit Lokale Adminrechte) hab ich auch eine Zugriffsverweigerung.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Gleicher Account, lokale Rechte?
Sowas gibt's nicht.

Entweder Du hast eine Domäne und Domänenrechte oder Du nutzt einen Nutzer, der auf der anderen Maschine bekannt ist und dort die nötigen Rechte hat. Dafür ist aber eine Impersonation notwendig.
private Nachricht | Beiträge des Benutzers
SeriouslyNot
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Folgendes geht bei mir:

            var adminGroupSID = "S-1-5-32-544";

            PrincipalContext ctx = new PrincipalContext( ContextType.Machine );
            GroupPrincipal grp = GroupPrincipal.FindByIdentity( ctx, IdentityType.Sid, adminGroupSID );

Wenns Remote nicht geht fehlen Dir wohl die Rechte.

Danke, das funktioniert - zumindest lokal. Wenn ich noch einen Host angebe, kommt folgender Fehler:
Fehler
Die Bindungsnummer ist unzulässig.
private Nachricht | Beiträge des Benutzers
Sykwitit
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Liegt wirklich wohl an meinem Domainaccount.
Hab es jetzt in einer anderen Domäne probiert und das Funktioniert wunderbar. Kann jetzt ohne Probleme per Remote Benutzer zur gruppen hinzufügen oder löschen.

Funktioniert prächtig!

Vielen Dank
private Nachricht | Beiträge des Benutzers