Jak najít primární skupiny uživatele pomocí atributu PrimaryGroupID

Překlady článku Překlady článku
ID článku: 297951 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje účinnou metodou hledání primární skupiny uživatele.

Další informace

Základní informace

Před technika popsané v tomto článku byl vyvinut, bylo jediným způsobem, jak určit primární skupiny uživatele provést dotaz Lightweight Directory Access Protocol (LDAP) dialekt ActiveX Data Objects (ADO) proti Active Directory požadovat všechny objekty skupiny v doméně a poté procházet vrácených záznamů vyhledat skupiny s PrimaryGroupToken spárováno PrimaryGroupID uživatele. Tento dotaz může být velmi náročné, v závislosti na počtu skupin v dané doméně.

PrimaryGroupToken objekt skupiny je vytvořený atribut. To znamená, že atribut není uložen v aktivním adresáři, ale zkonstruovat na klienta zprostředkovatelem Active Directory Services Interface (ADSI). Protože zkonstruovat atribut nelze použít ve vyhledávací kritéria v dotazu LDAP.

Je možné sestavit pomocí zvážení následující identifikátor zabezpečení (SID) pro primaryGroup:
  • SID skupiny a uživatelská relativní identifikátor v doméně (RID) skládá plus RID skupiny či uživatele. Pro příklad Pokud SID pro tohoto uživatele je S-1-111-222-333-efg RID pro tohoto uživatele je "efg" a RID v doméně je S-1-111-222-333.
  • Atribut PrimaryGroupID na objektu uživatel/skupina uchovává RID primární skupina.
  • Primární skupiny uživatele musí být skupina existuje v primární doméně uživatele.
  • SID primární skupiny můžete integrována zřetězením domény RID s atributem primaryGroupID objekt uživatele. Například RID domény může být S-1-111-222-333 a hodnota primarygroupID mohl být abc. SID primární skupiny by pak S-1-111-222-333-abc.
Ukázkový kód uvedený v tomto článku znázorňuje způsob sestavení SID primární skupiny uživatele odebráním RID uživatele z jeho SID a potom jeho nahrazením primarygroupID (primární skupiny RID). Kód využívá objekt IADsSID implementována v souboru ADsSecurity.dll. Soubor ADsSecurity.dll je součástí Active Directory Service Interfaces (ADSI) software development kit (SDK) 2.5. Active Directory Service Interfaces SDK 2.5 stáhnout, navštivte následující web:
http://technet.microsoft.com/en-us/library/cc749949.aspx
Rozhraní IADsSID poskytuje skriptovatelné metody pro převod raw SID do jeho formuláře jazyka SDDL (Security Descriptor Definition Language) pomocí API ConvertSidToStringSid. Toto rozhraní API je pouze k dispozici v systému Windows 2000 a Windows Server 2003.

Nezpracovaná SID v pořadí Tato metoda používá v systému Windows NT 4.0, musí být převeden do jeho protějšku řetězec prostřednictvím použití některé typ obálky COM DLL. Příklad sestavení SDDL formuláře SID na vzniku NT 4.0 je poskytována v následujícím článku znalostní báze Microsoft Knowledge Base:

286182Převést do řetězec SID nezpracovaných SID použití jazyka Visual Basic

Kroky vytvořit SID primární skupiny uživatele

  1. Vytvořit vazbu na objekt uživatele.
  2. Vlastnost ObjectSID objekt uživatele načíst.
  3. Je použití objektu IADsSID převést číslo SID uživatele z jeho binární formuláře do formuláře SDDL.
  4. Odstranit vypnout RID z formuláře SDDL SID uživatele.
  5. Vlastnost uživatele PrimaryGroupID načíst a převést na nepodepsaný dlouhý řetězec.
  6. APPEND řetězec reprezentace PrimaryGroupID upravené SID uživatele.
  7. Pomocí formuláře SDDL SID převést WINDOWSNT nebo LDAP ADsPath IADsSID.
  8. Načíst jakákoli informace o primární skupině, které chcete vytvořit vazbu ADsPath.

Vyhledejte primární skupinu pro danou ADsPath skriptu jazyka

'
' 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
				

Vlastnosti

ID článku: 297951 - Poslední aktualizace: 15. ledna 2007 - Revize: 6.2
Informace v tomto článku jsou určeny pro produkt:
  • 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 na těchto platformách
    • Microsoft Windows NT 4.0
Klíčová slova: 
kbmt kbdswadsi2003swept kb32bitonly kbhowto KB297951 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:297951

Dejte nám zpětnou vazbu

 

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