检查用户组成员身份

时间:2013-03-19 10:02:21

标签: windows vbscript dns

我一直在快速开发一个小脚本,以便我可以设置和删除网络驱动器或创建文件夹,具体取决于个人组成员身份,它似乎无法正常工作且没有错误消息,可以用第二双眼睛,我真的很感激!

DIM CHS
SET CHS = CreateObject("Scripting.FileSystemObject")
SET CHSshell = CreateObject("WScript.Shell")
SET CHSnetwork = CreateObject("WScript.Network")

PRIVATE FUNCTION isMember( Group )
    SET netCHS = CreateObject("WScript.Network")
    Domain = netCHS.UserDomain
    User = netCHS.UserName
    isMember = false
    SET userCHS = GetObject("WinNT://" & Domain & "/" & User & ",user")
        FOR EACH Group in userCHS.Groups
            IF (Group.Name = GroupName) THEN
                isMember = true
        EXIT FOR
            END IF
    NEXT    
    SET userCHS = NOTHING
    SET netCHS = NOTHING
END FUNCTION

SET CHS = NOTHING

IF ( isMember("Domain Admins") = "True" ) THEN
    CHSnetwork.RemoveNetworkDrive "z:"
    WSript.Echo "CHSnetwork.UserName"
END IF

2 个答案:

答案 0 :(得分:1)

你打电话

isMember("Domain Admins")

功能

PRIVATE FUNCTION isMember( Group )

选择名称Group中的参数。但你(重新/错误)在

中使用Group
FOR EACH Group in userCHS.Groups

循环遍历userCHS.Groups

IF (Group.Name = GroupName) THEN

.NameGroupName进行比较。 GroupName来自哪里?尝试将函数标题更改为

PRIVATE FUNCTION isMember( GroupName )

并考虑使用Option Explicit来避免此类错误。

答案 1 :(得分:0)

此VBS脚本将显示用户所属的所有组:

Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim oNetwork: Set oNetwork = CreateObject("WScript.Network")

Dim sUserName: sUserName = oNetwork.UserDomain & "/" & oNetwork.UserName
sUserName = InputBox("Windows User Name","Enter Windows User Name", sUserName)

If sUserName <> "" Then
    GetGroups
End If

Sub GetGroups
    Const ADS_READONLY_SERVER = 4
    Dim oGroup, oUser
    Dim oShell: Set oShell = Wscript.CreateObject("WScript.Shell")
    Dim sFolderPath: sFolderPath = GetFolderPath()
    Dim oNS: Set oNS = GetObject("WinNT:")
    Dim oList: Set oList = CreateObject("System.Collections.ArrayList")

    Dim sFilePath: sFilePath = sFolderPath & "\" & Replace(Replace(sUserName,"\","-"),"/","-") & "_groups.txt"

    Set oUser = oNS.OpenDSObject("WinNT://" & sUserName, "", "", ADS_READONLY_SERVER)
    For Each oGroup In oUser.groups
        oList.Add oGroup.Name
    Next

    oList.Sort()

    Dim oLog: Set oLog = fso.CreateTextFile(sFilePath, True)
    For Each sItem in oList
        oLog.Write sItem & vbCrLf
    Next

    oLog.Close
    oShell.Run sFilePath
End Sub

Function GetFolderPath()
    Dim oFile 'As Scripting.File
    Set oFile = fso.GetFile(WScript.ScriptFullName)
    GetFolderPath = oFile.ParentFolder
End Function
相关问题