क्या मौजूदा सक्रिय निर्देशिका उपयोगकर्ता को पकड़ने के लिए एमएस एक्सेस के लिए कोई तरीका है?

मैं अपनी कंपनी के लिए सॉफ़्टवेयर के एक टुकड़े के लिए एक spec पर काम कर रहा हूं और ऑडिटिंग सिस्टम के हिस्से के रूप में मुझे लगता है कि वर्तमान सक्रिय निर्देशिका उपयोगकर्ता को पकड़ने का कोई तरीका होने पर यह साफ होगा।

उम्मीद है कि कुछ ऐसा है:

Dim strUser as String
strUser = ActiveDirectory.User()
MsgBox "Welcome back, " & strUser
0
ro fr bn

4 उत्तर

Try this article - I have some code at work that will erm, work if this doesn't...

प्रासंगिक उद्धरण:

  निजी घोषणा समारोह GetUserName Lib "advapi32.dll" उपनाम "GetUserNameA" _
                    (ByVal आईपी बफर स्ट्रिंग के रूप में, लंबे समय तक nSize) लंबे समय तक
निजी घोषणा समारोह GetComputerName Lib "kernel32" उपनाम "GetComputerNameA" _
                    (ByVal lpBuffer स्ट्रिंग के रूप में, लंबे समय तक nSize) लंबे समय तक

फंक्शन इस यूज़रनाम() स्ट्रिंग के रूप में
    दीम LngBufLen के रूप में लंबे समय तक
    स्ट्रिंग के रूप में मंद strUser

    strUser = स्ट्रिंग $ (15, "")
    LngBufLen = 15

    अगर GetUserName (strUser, LngBufLen) = 1 फिर
        ThisUserName = बाएं (strUser, LngBufLen - 1)
    अन्य
        ThisUserName = "अज्ञात"
    अगर अंत
अंत समारोह

फंक्शन यह कॉम्प्यूटर आईडी() स्ट्रिंग के रूप में
    दीम LngBufLen के रूप में लंबे समय तक
    स्ट्रिंग के रूप में मंद strUser

    strUser = स्ट्रिंग $ (15, "")
    LngBufLen = 15

    अगर GetComputerName (strUser, LngBufLen) = 1 फिर
        यह कॉम्प्यूटर आईडी = बाएं (strUser, LngBufLen)
    अन्य
        यह कॉम्प्यूटर आईडी = 0
    अगर अंत
अंत समारोह
 
0
जोड़ा
सब अच्छा। प्रतिबिंब पर एक सुंदर shitty जवाब था। शुरुआती दिनों में, केवल जवाबों को लिंक न करें, मेरी रक्षा में आज जैसी चीजें उतनी कठोर नहीं थीं;) वैसे भी, संपादन के लिए धन्यवाद।
जोड़ा लेखक JamesSugrue, स्रोत
मैं आपके लिंक-केवल उत्तर को कम करने का लुत्फ उठा रहा था, लेकिन मेह, चलो बस सौभाग्य से सड़े हुए लिंक को उद्धृत न करें;)
जोड़ा लेखक Tobias Kienzler, स्रोत

यहां मेरा संस्करण है: यह आपको पसंद की कुछ भी लाएगा:

'gets firstname, lastname, fullname or username
Public Function GetUser(Optional whatpart = "username")
    Dim returnthis As String
    If whatpart = "username" Then GetUser = Environ("USERNAME"): Exit Function
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objUser = GetObject("LDAP://" & objSysInfo.USERNAME)
    Select Case whatpart
        Case "fullname": returnthis = objUser.FullName
        Case "firstname", "givenname": returnthis = objUser.givenName
        Case "lastname": returnthis = objUser.LastName
        Case Else: returnthis = Environ("USERNAME")
    End Select
    GetUser = returnthis
End Function

I got the original idea from Spiceworks.

0
जोड़ा

वैध रहने के लिए पर्यावरण चर के आधार पर एक बुरा विचार है, क्योंकि उन्हें उपयोगकर्ता सत्र में आसानी से बदला जा सकता है।

0
जोड़ा
बहुत अच्छा मुद्दा!
जोड़ा लेखक Yarik, स्रोत

डेविड ने पर्यावरण चर का उपयोग करने के जोखिम के बारे में बहुत अच्छा मुद्दा बनाया। मैं केवल इतना जोड़ सकता हूं कि पर्यावरण चर के साथ अन्य समस्याएं हो सकती हैं। बस हमारे 5 साल की पुरानी परियोजना से इस वास्तविक कोड खंड को देखें:

Public Function CurrentWorkbenchUser() As String

    ' 2004-01-05, YM: Using Application.CurrentUser for identification of 
    ' current user is very problematic (more specifically, extremely 
    ' cumbersome to set up and administer for all users). 
    ' Therefore, as a quick fix, let's use the OS-level user's 
    ' identity instead (NB: the environment variables used below must work fine
    ' on Windows NT/2000/2003 but may not work on Windows 98/ME)
    ' CurrentWorkbenchUser = Application.CurrentUser
    '
    ' 2005-06-13, YM: Environment variables do not work in Windows 2003. 
    ' Use Windows Scripting Host (WSH) Networking object instead.
    ' CurrentWorkbenchUser = Environ("UserDomain") & "\" & Environ("UserName")
    '
    ' 2007-01-23, YM: Somewhere between 2007-01-09 and 2007-01-20, 
    ' the WshNetwork object stopped working on CONTROLLER3. 
    ' We could not find any easy way to fix that.
    ' At the same time, it turns out that environment variables 
    ' do work on Windows 2003.
    ' (Apparently, it was some weird configuration problem back in 2005: 
    ' we had only one Windows 2003 computer at that time and it was 
    ' Will's workstation).
    '
    ' In any case, at the time of this writing, 
    ' returning to environment variables 
    ' appears to be the simplest solution to the problem on CONTROLLER3.
    ' Dim wshn As New WshNetwork
    ' CurrentWorkbenchUser = wshn.UserDomain & "\" & wshn.UserName

    CurrentWorkbenchUser = Environ("USERDOMAIN") & "\" & Environ("USERNAME")

End Function
0
जोड़ा
यदि आप वास्तव में जेट उपयोगकर्ता-स्तरीय सुरक्षा का उपयोग कर रहे हैं तो CurrentUser() के साथ कुछ भी गलत नहीं है। दूसरी तरफ, यदि आपको जेट यूएलएस की कोई आवश्यकता नहीं है, तो विंडोज लॉगऑन एक उत्कृष्ट विकल्प है (हालांकि आपको अभी भी अपने ऐप में समूह सदस्यता के किसी प्रकार की तालिका को बनाए रखना पड़ सकता है)।
जोड़ा लेखक David-W-Fenton, स्रोत