2011-05-02 9 views
5

वीबी.नेट का उपयोग करके, आप सक्रिय निर्देशिका के साथ समूह नाम में एसआईडी कैसे परिवर्तित करते हैं?वीबीएनईटी - सक्रिय निर्देशिका के साथ एसआईडी को समूह नाम में कैसे परिवर्तित करें

उदाहरण:

Public ReadOnly Property Groups As IdentityReferenceCollection 
    Get 

     Dim irc As IdentityReferenceCollection 
     Dim ir As IdentityReference 
     irc = WindowsIdentity.GetCurrent().Groups 
     Dim strGroupName As String 

     For Each ir In irc 
      Dim mktGroup As IdentityReference = ir.Translate(GetType(NTAccount)) 
      MsgBox(mktGroup.Value) 
      Debug.WriteLine(mktGroup.Value) 
      strGroupName = mktGroup.Value.ToString 

     Next 

     Return irc 

    End Get 
End Property 

या कुछ इस तरह: मैं "group_test" मिलता है और नहीं करने के लिए "एस-1-5-32-544"

कोड मैं का उपयोग कर रहा है की जरूरत है?

 currentUser = WindowsIdentity.GetCurrent() 

     For Each refGroup As IdentityReference In currentUser.Groups 

      Dim acc As NTAccount = TryCast(refGroup.Translate(GetType(NTAccount)), NTAccount) 
      If AdminGroupName = acc.Value Then 
       ret = "999" 
      End If 
      If UsersGroupName = acc.Value Then 
       ret = "1" 
      End If 

आप इसे इस कोड में कैसे अनुकूलित करेंगे? (यदि उपयोगकर्ता xx समूह, ड्रॉप डाउन सूची पर शो एक्स एक्स समूह में है)

 For Each UserGroup In WindowsIdentity.GetCurrent().Groups 
      If mktGroup.Value = "BIG" Then 
       Dim Company = ac1.Cast(Of MarketingCompany).Where(Function(ac) ac.MarketingCompanyShort = "BIG").FirstOrDefault 
       If Company IsNot Nothing Then 
        marketingCo.Items.Add(String.Format("{0} | {1}", Company.MarketingCompanyShort, Company.MarketingCompanyName)) 
       End If 
      End If 
     Next 

उत्तर

2

यहाँ एक आसान तरीका सी # में लिखा है, मुझे लगता है कि यह अनुकूल करने के लिए कड़ी मेहनत करने के लिए नहीं है:

/* Retreiving object from SID 
    */ 
    string SidLDAPURLForm = "LDAP://WM2008R2ENT:389/<SID={0}>"; 
    System.Security.Principal.SecurityIdentifier sidToFind = new System.Security.Principal.SecurityIdentifier("S-1-5-21-3115856885-816991240-3296679909-1106"); 

    DirectoryEntry userEntry = new DirectoryEntry(string.Format(SidLDAPURLForm, sidToFind.Value)); 

    string name = userEntry.Properties["cn"].Value.ToString(); 

यहाँ यह ---- REFLECTOR

Dim SidLDAPURLForm As String = "LDAP://WM2008R2ENT:389/<SID={0}>" 
Dim sidToFind As New SecurityIdentifier("S-1-5-21-3115856885-816991240-3296679909-1106") 
Dim userEntry As New DirectoryEntry(String.Format(SidLDAPURLForm, sidToFind.Value)) 
Dim name As String = userEntry.Properties.Item("cn").Value.ToString 

को वीबी नेट धन्यवाद में है ----- संपादित तो यहाँ तुम क्या चाहता है, लेकिन यह एक ही है के रूप में है कि पहले @BiggsTRC

द्वारा दिया गया था सी # में
Private Shared Sub Main(args As String()) 
    Dim currentUser As WindowsIdentity = WindowsIdentity.GetCurrent() 

For Each iRef As IdentityReference In currentUser.Groups 
     Console.WriteLine(iRef.Translate(GetType(NTAccount))) 
    Next 
End Sub 
+0

@ जेपीब्लैंक, आपकी प्रतिक्रिया के लिए धन्यवाद। क्या आप समझा सकते हैं कि यह कोड क्या करता है? क्या मुझे प्रत्येक एसआईडी के लिए इसे अलग-अलग कोड करने की आवश्यकता होगी? –

+0

क्षमा करें, मैं आपके प्रश्न को समझ नहीं पा रहा हूं। यह कोड सक्रिय-निर्देशिका के आधार पर एक समूह नाम पर एक एसआईडी का अनुवाद करता है। आपको बस स्ट्रिंग के साथ एक विधि बनाना है क्योंकि इसके शीर्ष पर तर्क है। – JPBlanc

+0

@ जेपीब्लैंक, आपको "एस -1-5-21-3115856885-816991240-3296679909-1106" मूल्य कहां मिल रहा है? –

3

यहाँ कैसे एक नाम करने के लिए एक सिड कन्वर्ट करने के लिए एक कड़ी है: http://vbdotnet.canbal.com/view.php?sessionid=JEf85K%2B%2BeBj9Pz%2BWz9hJJicW%2FYEPtADXfcpYCovZ7js%3D

असल में, तुम वापस एक DirectoryEntry वस्तु मिल जिसे आप नाम पाने के लिए उपयोग कर सकते हैं। हालांकि, अगर आप ऐसा करने के लिए एक आसान तरीका मानते हैं, तो बस वर्तमान उपयोगकर्ता को लें और अपनी समूह सदस्यता के लिए एडी में एक लुकअप करें। यहां ऐसा करने का एक उदाहरण दिया गया है (आपको वास्तव में अपने कार्य को पूरा करने के लिए बड़े लेख की आवश्यकता होगी लेकिन यह कोड आपके प्रश्न का विशिष्ट उत्तर है): http://www.codeproject.com/KB/system/everythingInAD.aspx#39

इस तथ्य के बारे में क्षमा करें कि कोड C# में है। हालांकि, आप किसी समस्या के बिना इसे VB.NET में परिवर्तित करने के लिए कनवर्टर का उपयोग करने में सक्षम होना चाहिए।

प्राप्त उपयोगकर्ता समूह सदस्यता सी # में ASP.NET से उपयोगकर्ता में लॉग इन

public ArrayList Groups() 
{ 
    ArrayList groups = new ArrayList(); 

    foreach (System.Security.Principal.IdentityReference group in 
      System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups) 
    { 
     groups.Add(group.Translate(typeof 
     (System.Security.Principal.NTAccount)).ToString()); 
    } 

    return groups; 
} 

प्राप्त उपयोगकर्ता VB.NET में ASP.NET से उपयोगकर्ता में लॉग इन Developer Fusion's Converter Tool का उपयोग करने का समूह सदस्यता:

Public Function Groups() As ArrayList 
     Dim groups__1 As New ArrayList() 

     For Each group As System.Security.Principal.IdentityReference In     System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups 

       groups__1.Add(group.Translate(GetType(System.Security.Principal.NTAccount)).ToString()) 
     Next 

    Return groups__1 
    End Function 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद। क्या आप कुछ उदाहरण कोड पोस्ट कर सकते हैं? –

7

कोड:

public static string GetGroupNameBySid(string sid) 
    { 
     PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 
     GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, IdentityType.Sid, sid); 
     return group.SamAccountName; 
    } 

आप विधानसभा System.DirectoryServices.AccountManagement.dll जोड़ना होगा। यदि आपको AD के संबंध में कोई समस्या है, तो आप प्रिंसिपल कॉन्टेक्स्ट कन्स्ट्रक्टर में AD सर्वर नाम जोड़ने का प्रयास कर सकते हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! क्या आपका मतलब है कि मुझे "आयात प्रणाली। डायरेक्टरी सर्विसेज। खाता प्रबंधन" को Default.aspx.vb में जोड़ना चाहिए? मैं प्रिंसिपल कॉन्टेक्स्ट कन्स्ट्रक्टर कहां घोषित करूं? मैं एमएसडीएन पर http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principal.aspx#Y40 पर देख रहा हूं, http://msdn.microsoft.com/en-us/library /system.directoryservices.accountmanagement.principalcontext.aspx, और निम्न विधियों: GetGroups, GetGroups (PrincipalContext), IsMemberOf (प्रिंसिपल कॉन्टेक्स्ट, पहचान टाइप, स्ट्रिंग), IsMemberOf (GroupPrincipal)। –

+0

@ ब्रायन-मक्कार्थी अपनी परियोजना के संदर्भों पर राइट क्लिक करें, फिर "संदर्भ जोड़ें ..."। .NET टैब में "System.DirectoryServices.AccountManagement" घटक ढूंढें और डबल क्लिक करें या ठीक दबाएं। आपको प्रिंसिपल कॉन्टेक्स्ट कन्स्ट्रक्टर घोषित करने की आवश्यकता नहीं है क्योंकि इस वर्ग को पहले से ऊपर असेंबली में परिभाषित किया गया है। उदाहरण में मैं एक तर्क कन्स्ट्रक्टर का उपयोग करता हूं। यदि आपको एडी के संबंध में परेशानी है (मेरे पास नहीं था, लेकिन हो सकता है कि यह हो सकता है यदि आपका एडी क्लाइंट (यानी आपका एप्लिकेशन) डोमेन में नहीं है), तो आप प्रिंसिपल कॉन्टेक्स्ट के दो तर्क कन्स्ट्रक्टर का उपयोग कर सकते हैं और एडी सर्वर होस्ट नाम को पास कर सकते हैं दूसरा तर्क – meir

+0

शानदार ढंग से! बस मैंने क्या देखा – Vlad

संबंधित मुद्दे