Wie Sie das PrimaryGroupID-Attribut, um die primäre Gruppe für einen Benutzer zu finden

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 297951 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt eine effiziente Methode zum Suchen von die primäre Gruppe eines Benutzers.

Weitere Informationen

Hintergrund

Bevor das in diesem Artikel beschriebenen Verfahren entwickelt wurde, war die einzige Möglichkeit festzustellen, primäre Gruppe des Benutzers Durchführen einer Abfrage (LIGHTWEIGHT Directory Access Protocol)-Dialekt (ActiveX Data Objects) in Active Directory zum Anfordern aller Gruppenobjekte in der Domäne und Durchsuchen Sie das zurückgegebene Recordset die Gruppe mit einer PrimaryGroupToken suchen, die die PrimaryGroupID des Benutzers zugeordnet. Diese Abfrage kann sehr zeitaufwendig, je nach Anzahl der Gruppen in einer bestimmten Domäne sein.

Die PrimaryGroupToken eines Gruppenobjekts ist ein konstruierten Attribut. Dies bedeutet, dass das Attribut nicht in Active Directory gespeichert ist, jedoch wird auf dem Client vom Anbieter Active Directory Services Interface (ADSI) erstellt. Da das Attribut erstellt wird, kann nicht die Formel in ein Suchkriterium in einer LDAP-Abfrage verwendet werden.

Es ist möglich, die Sicherheitskennung (SID) für die PrimaryGroup zu erstellen, indem Sie Folgendes berücksichtigen:
  • Die SID für eine Gruppe/Benutzer besteht aus der Domäne relativen ID (RID) plus die RID der Gruppe/Benutzer. Z. B. wenn die SID für diesen Benutzer S-1-111-222-333-efg, die RID ist für diesen Benutzer "Efg" und der Domäne RID ist S-1-111-222-333 ist.
  • Das PrimaryGroupID-Attribut für ein Objekt-Benutzer-Gruppe enthält die RID der primären Gruppe.
  • Primäre Gruppe eines Benutzers muss einer Gruppe sein, die in der primären Domäne des Benutzers vorhanden ist.
  • Die SID für die primäre Gruppe kann durch Verketten der Domäne RID mit der PrimaryGroupID-Attribut des Benutzerobjekts erstellt werden. Beispielsweise konnte die Domäne RID S-1-111-222-333 werden und der Wert der PrimarygroupID konnte Abc werden. Die SID der primären Gruppe wäre dann S-1-111-222-333-abc.
Der Beispielcode in diesem Artikel veranschaulicht, wie die SID für die primäre Gruppe eines Benutzers erstellen, indem aus die SID des Benutzers RID entfernen und dann mit der PrimarygroupID (primäre Gruppe RID) ersetzen. Der Code nutzt das IADsSID-Objekt in der Datei ADsSecurity.dll implementiert. Die ADsSecurity.dll-Datei ist Teil von Active Directory Service Interfaces (ADSI) Software Development Kit (SDK) 2.5. Um Active Directory Service Interfaces SDK 2.5 downloaden, die folgende Microsoft-Website:
http://technet.microsoft.com/en-us/library/cc749949.aspx
Die IADsSID-Schnittstelle stellt eine skriptfähige Methode für die Konvertierung einer unformatierten SID in seiner Form Security Descriptor Definition Language (SDDL) mithilfe der API ConvertSidToStringSid. Diese API ist nur unter Windows 2000 und Windows Server 2003 verfügbar.

Damit diese Methode auf einem Windows NT 4.0-basierten System verwendet werden kann muss die raw-SID in seinem Gegenstück Zeichenfolge mithilfe der eine Art von COM-Wrapper-DLL konvertiert werden. Ein Beispiel zum Erstellen der SDDL-Form von einer SID unter Windows NT 4.0 ist in der folgenden Microsoft Knowledge Base bereitgestellt:

286182Microsoft Visual Basic verwenden, zum Konvertieren von Rohdaten SID in eine Zeichenfolge SID

Schritte zum Erstellen der SID für die primäre Gruppe von einem Benutzer

  1. Binden Sie an das Benutzerobjekt.
  2. Die ObjectSID -Eigenschaft des Benutzerobjekts abrufen.
  3. Verwendet das IADsSID-Objekt, aus seiner binären Form in die SID des Benutzers konvertieren ist SDDL-Form.
  4. Entfernen Sie aus RID aus dem Formular SDDL der SID des Benutzers.
  5. PrimaryGroupID -Eigenschaft des Benutzers abrufen und in eine unsigned long Zeichenfolge konvertieren.
  6. Fügen Sie die Zeichenfolgendarstellung des PrimaryGroupID an die geänderte Benutzer-SID.
  7. Verwenden Sie IADsSID, um die SDDL-Formular der SID in seinen Windows NT oder LDAP ADsPath konvertieren.
  8. Binden Sie an den ADsPath zum Abrufen von beliebige Informationen über die primäre Gruppe, die Sie möchten.

Visual Basic Script primäre Gruppe für ein bestimmtes ADsPath zu finden

'
' The following VBS code illustrates how to determine the primary group
' given an ADsPath as a single argument. The script determines if the
' string passed is a WinNT or LDAP path and then uses the appropriate
' method for retrieving the Primary Group path.
'
' ADsSecurity Constants
'
const ADS_SID_RAW         = 0
const ADS_SID_HEXSTRING	  = 1
const ADS_SID_SAM         = 2
const ADS_SID_UPN         = 3
const ADS_SID_SDDL        = 4
const ADS_SID_WINNT_PATH  = 5
const ADS_SID_ACTIVE_DIRECTORY_PATH = 6
const ADS_SID_SID_BINDING = 7
'-------------------------------------------------
' Function StrRID returns and unsigned long of
' the given RID value
' 
' If the most significant bit is set in a VB Long
' then VB will interpret the value as a negative number
' and CStr will convert the unsigned long into a string with a leading
' "-" sign.
'
' This function checks to see if the most significant bit
' is set, then tricks the CStr function into outputting
' and unsigned long value by using a double float value
' to store the RID value, then uses the CStr function to get the
' string version.
'
function StrRID( inVal )
  dim dLocal
  if( (inVal and &H80000000) <> 0 ) then
    dLocal = CDbl((inval and &H7FFFFFFF))
    dLocal = dLocal + 2^31
    StrRID = cstr(dLocal)
  else
    StrRID = Cstr(inVal)
  end if
end function
'=================================================
' Main Script
'
' Assumes that the first argument is a WinNT or
' LDAP user path
'
set args = WScript.Arguments
WScript.Echo "Start: "& Now
set ADsSid = CreateObject("ADsSID")
'
' Determine if we are using the LDAP or WinNT providers
'
userAdsPath = args(0)
if( InStr(userAdsPath,"LDAP") <> 0 ) then
  '
  ' LDAP ADS Path, need to work with the an Active Directory Path
  '
  ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH
else
  '
  ' WinNT Path, working with the WinNT provider
  '
  ADS_SID_Constant = ADS_SID_WINNT_PATH
end if
'  
' Initialize the IADsSID object and retrieve
' the SDDL form of the SID
'
ADsSID.SetAs ADS_SID_Constant, CStr(userADsPath)
DomainSID = ADsSID.GetAs(ADS_SID_SDDL)
'
' We have the SDDL form of the user's SID.
' Remove the user's RID ( the last sub authority)
' up to the "-"
'
DomainSID = mid(DomainSID,1,(InStrREV(DomainSID,"-")))
'
' Bind to the user object to retrieve the PrimaryGroupID.
' Build the SID of the Primary group
' from the domainSID and the Primary Group RID in
' the PrimaryGroupID.
'
set obj = GetObject(userADsPath)
lngGroupID = obj.Get("primaryGroupID")
strGroupRID = StrRID( lngGroupID )
DomainSID = DomainSID & strGroupRID
'
' Use ADsSID to retrieve a WinNT path or 
' a SID Bind string to locate the LDAP path
'
ADsSID.SetAs ADS_SID_SDDL, CStr(DomainSID)
if( ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH ) then
   '
   ' With the LDAP provider, build a SID bind string and
   ' retrieve the Group object via this bind string
   '
   SIDBindStr = ADsSID.GetAs(ADS_SID_HEXSTRING)
   SIDBindStr = "LDAP://<SID=" & SIDBindStr & ">"
   set oGrp = GetObject(SIDBindStr)
   strPrimaryGroupADsPath = oGrp.Get("DistinguishedName")
   set oGrp = Nothing
else
   '
   ' Its a WinNT path, retrieve the ADsPath for the WinNT object
   '
   strPrimaryGroupADsPath = ADsSID.GetAs( ADS_SID_Constant )
end if
WScript.Echo "Primary group ADS Path for user : " & userADsPath
WScript.Echo "Is: " & strPrimaryGroupADsPath
WScript.Echo "Finished: " & Now
				

Eigenschaften

Artikel-ID: 297951 - Geändert am: Montag, 15. Januar 2007 - Version: 6.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Active Directory Client Extension, wenn verwendet mit:
    • Microsoft Windows NT 4.0
Keywords: 
kbmt kbdswadsi2003swept kb32bitonly kbhowto KB297951 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 297951
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com