Wie finde ich einen Benutzer in meiner Anzeige, wenn ich seine SID habe? Ich möchte mich nicht auf andere Attribute verlassen, da ich versuche, Änderungen an diesen zu erkennen. Beispiel: Ich erhalte eine Nachricht über eine Änderung des Benutzerdatensatzes, die Folgendes enthält:
Message: User Account Changed:
Target Account Name: test12
Target Domain: DOMAIN
Target Account ID: %{S-1-5-21-3968247570-3627839482-368725868-1110}
Caller User Name: Administrator
Caller Domain: DOMAIN
Caller Logon ID: (0x0,0x62AB1)
Privileges: -
Ich möchte den Benutzer über die Änderung informieren. Also brauche ich ihre Kontoinformationen von AD.
windows
active-directory
vbscript
er4z0r
quelle
quelle
Antworten:
Starten Sie Windows PowerShell und führen Sie Folgendes aus:
Die Ausgabe sollte ungefähr so aussehen:
quelle
Die "LDAP-Methode", um dies zu tun, besteht darin, das Basisobjekt mit der GUID (oder SID) abzurufen, die nur das Basisobjekt abruft und keine zusätzlichen Klassendaten anhängt. Von diesem Basisobjekt können Sie jedoch den tatsächlichen "DistinguishedName" für das Benutzerobjekt abrufen. Wenn Sie das Benutzerobjekt mit dem Attribut "DistinguishedName" abrufen, wird ein DirectoryEntry-Objekt (.Net / C # / PowerShell) oder ein iadsUser-Objekt (VBScript) mit vollständigen Klassendaten zurückgegeben, und Sie können alle anderen benötigten Attributdaten abrufen.
Das Problem besteht darin, das ursprüngliche Objekt mit der GUID (oder SID) abzurufen. Einige Quellen sagen, dass Sie die GUID des Zeichenfolgenformats (dh {28c67c50-9778-47a4-a77a-bf56f238a0c4}) in eine Zeichenfolgendarstellung des Byte-Arrays (dh "\ 50 \ 7c \ c6 \ 28 \ 78" konvertieren müssen \ 97 \ a4 \ 47 \ 7a \ a7 \ bf \ 56 \ f2 \ 38 \ a0 \ c4 "), um an LDAP übergeben zu werden. Laut Microsoft-Dokumentation ist dies nicht der Fall. Eine einfache Zeichenfolgendarstellung der GUID / SID ist ausreichend.
Hier ist ein Beispiel, wie Sie über die GUID eine Bindung an das Objekt herstellen und dann das tatsächliche Benutzerobjekt mit vollständigen Klassendaten abrufen können. Powershell zieht tatsächlich das gesamte Objekt, wenn Sie mit der GUID binden. Wenn Sie VBScript verwenden, müssen Sie den zweistufigen Prozess ausführen.
Beachten Sie außerdem, dass, obwohl in den Microsoft-Dokumenten angegeben ist, dass mehrere GUID-Zeichenfolgenformate akzeptabel sind, das einzige, das ich erfolgreich verwenden konnte, das Entfernen der {} - Zeichen ist. ALSO , bitte beachten Sie, das ist nicht ein korrekter „Byte-Array“ string, sondern einfach die GUID - Zeichenfolge von Sonderzeichen gestrippt.
Der gleiche Prozess kann für eine SID-Bindung verwendet werden. Auf der MSDN-Seite, auf der dies beschrieben wird, heißt es, dass mehrere Fstring-Formate verfügbar sind. Am häufigsten wird jedoch das Format s-1-5 -...-...-...-... verwendet.
* QUERYING *
Wenn Sie eine LDAP-Abfrage ausführen, um das Objekt zu finden (z. B. indem Sie 'objectGUID' mit einem Byte-Array oder 'objectSID' mit einem Byte-Array vergleichen), müssen Sie das "richtige" Byte ausführen. Array-Konvertierung. Es ist wichtig zu beachten, dass das Byte-Array eine andere Reihenfolge als die Zeichenfolgendarstellung hat, da es als DWORD-WORD-WORD-WORD-BYTES für GUID gespeichert ist und die Endian-Reihenfolge berücksichtigt. Das Konvertieren des Byte-Arrays für eine SID weist ähnliche Bedingungen auf.
Es gibt verschiedene Möglichkeiten, die Konvertierung durchzuführen . Technet verfügt über einen einfachen vbScript-Algorithmus . Sie können mit C # / VB.Net auch etwas ausgefalleneres tun, indem Sie die System.Guid oder ein einfaches Skript in PowerShell verwenden (ich muss PowerShell lieben!):
Sie sollten dann in der Lage sein, das Objekt mithilfe eines Standard-LDAP-Filters abzufragen:
... oder was auch immer Sie sonst noch fragen. Dies sollte auch für eine SID funktionieren.
quelle
OK. Ich habe einen Weg gefunden, dies über Active Directory zu tun. Der Vollständigkeit halber hier der Code:
Hoffe, dass dies für andere nützlich sein wird.
quelle
Verwenden Sie PS:
quelle