在VBScript中针对Active Directory域测试用户名/密码?

在VBScript中针对Active Directory域测试用户名/密码?,vbscript,active-directory,Vbscript,Active Directory,我需要在VBScript中针对给定域测试用户名和密码对。脚本将知道需要检查访问权限的用户名、密码和域,我需要返回的只是帐户是否有效的true或false 有人能提出一个好的方法来实现这一点吗?谢谢 以下函数将针对给定域测试用户名/密码: function fnCheckAccess(strDomain, strUserID, strUserPWD) const ADS_SECURE_AUTHENTICATION = &h0001 const ADS_CHASE_REFERRALS_AL

我需要在VBScript中针对给定域测试用户名和密码对。脚本将知道需要检查访问权限的用户名、密码和域,我需要返回的只是帐户是否有效的true或false


有人能提出一个好的方法来实现这一点吗?谢谢

以下函数将针对给定域测试用户名/密码:

function fnCheckAccess(strDomain, strUserID, strUserPWD)

const ADS_SECURE_AUTHENTICATION = &h0001
const ADS_CHASE_REFERRALS_ALWAYS = &H60

dim objDSO
dim objUser
dim strPath

strPath = "LDAP://" & strDomain & "/OU=Users,DC=" & strDomain

On Error Resume Next
set objDSO = GetObject("LDAP:")
set objUser = objDSO.OpenDSObject (strPath, strUserID, strUserPWD, ADS_SECURE_AUTHENTICATION OR ADS_CHASE_REFERRALS_ALWAYS)
if Err.Number <> 0 then
    MsgBox "Incorrect Password for " & g_strDomain & "\" & g_strUserID & "." & vbCRLF & vbCRLF & "Error " & Err.Number & ": " & Err.Description, 16, "Access Denied"
    fnCheckAccess = False
else
    fnCheckAccess = True
end if
Err.Clear
On Error Goto 0

set objDSO = Nothing
set objUser = Nothing

end function
功能fnCheckAccess(strDomain、strUserID、strUserPWD)
const ADS\u SECURE\u身份验证=&h0001
const ADS\u CHASE\u reforts\u ALWAYS=&H60
迪姆奥比索
暗色objUser
暗通道
strPath=“LDAP://”&strDomain&“/OU=Users,DC=“&strDomain
出错时继续下一步
设置objDSO=GetObject(“LDAP:”)
设置objUser=objDSO.OpenDSObject(strPath、strUserID、strUserPWD、ADS\u SECURE\u身份验证或ADS\u CHASE\u references\u始终)
如果错误号为0,则
MsgBox“错误密码用于”&g_strodomain&“\”&g_strusterid&“&vbCRLF&vbCRLF&“错误”&errr.Number&“:”&Err.Description,16,“访问被拒绝”
fnCheckAccess=False
其他的
fnCheckAccess=True
如果结束
呃,明白了
错误转到0
设置objDSO=Nothing
set objUser=Nothing
端函数
这不是“Microsoft认可的”凭证验证方法:

对于XP+操作系统,“登录用户”API应该可以很好地工作

下面的文章也非常有助于解决这个问题(VB.NET):


由于我的域OU结构在OU=users中没有用户,因此发布的fnCheckAccess(strDomain、strUserID、strUserPWD)有问题。基于MSDN,文章提出了以下适用于任何领域的建议:

    'http://msdn.microsoft.com/en-us/library/windows/desktop/aa706065%28v=vs.85%29.aspx
    Set objNetwork = CreateObject("WScript.Network")
    strDomain = objNetwork.UserDomain
    Const ADS_SECURE_AUTHENTICATION = 1
    strUsername=InputBox("Enter Username:")
    strPassword=InputBox("Enter Password:")
    Set objDS = GetObject("LDAP:")
    On Error Resume Next
    Set objDomain = objDS.OpenDSObject("LDAP://" & strDomain, strUsername, strPassword, ADS_SECURE_AUTHENTICATION)
    If Err.Number Then
        WScript.Echo _
            "For user:" & vbCrLf & _
            "   " & strDomain & "\" & strUsername & vbCrLf & _ 
            "Error Number:" & vbCrLf & _
            "   " & Err.Number & vbCrLf & _
            "Error Description:" & vbCrLf & _
            "   " & Err.Description
    Else
        WScript.Echo _
            "Valid password entered for user" & vbCrLf & _
            "   " & strDomain & "\" & strUsername
    End If
    On Error Goto 0
在.NET中,这是一个很好的方法,但是一个直接的VBScript解决方案是最好的。
runas /u:domain\user notepad.exe