| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何根据组成员身份来映射驱动器?
如何根据组成员身份来映射驱动器?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-23 19:50:17
问:

嗨,Scripting Guy!如何在登录脚本中根据每个用户所属的安全组来映射驱动器?

-- RO

答:

嗨,RP。考虑到大约有 3,755,392 名读者问过这个问题,现在又增加了一名,总数达到 3,755,393 名。我们决定最好还是解答一下这个问题吧。那么,让我们开始吧。

此处共有两个问题。其一,您需要确定用户属于哪个组;其二,您需要基于某个特定组中用户的成员身份来映射驱动器。因为要解决两个问题,所以我们还是沿用以前常用的老方法,先介绍如何完成第一步,接着介绍如何完成第二步,然后将两者综合到一起,就是实际完成相关任务的最终方法。

首先,您需要确定用户属于哪个组;在实际执行 操作之前,需要先确定该用户的名称。因为您将此脚本作为登录脚本运行,所以这实际上非常容易:您可以使用 ADSystemInfo 对象来确定刚登录的用户的可分辨名称:

Set objSysInfo = CreateObject("ADSystemInfo")

Wscript.Echo strUser.UserName

为什么我们需要可分辨名称,而不是用户的登录名称呢?可分辨名称(类似于“CN=Ken Myer, OU=Finance, DC=fabrikam, DC=com”)为用户的 Active Directory 用户帐户提供了近乎完整的路径;事实上,只需将“LDAP://”添加到前面,我们就已经成功了一半。登录名(例如,“kmyer”)的用处就差多了;如果我们只知道登录名,则必须进行 Active Directory 搜索以确定该帐户的 Active Directory 路径。如果一开始就知道可分辨名称,则可以跳过所有这些步骤。

在添加 LDAP:// 并构造 Active Directory 路径后,就可以立即绑定到 Active Directory 中的用户帐户,并报告该用户所属的组;只需要枚举“MemberOf”属性的值,即可完成此操作。因此:

On Error Resume Next



Set objSysInfo = CreateObject("ADSystemInfo")

Set objNetwork = CreateObject("Wscript.Network")



strUserPath = "LDAP://" & objSysInfo.UserName

Set objUser = GetObject(strUserPath)



For Each strGroup in objUser.MemberOf

    strGroupPath = "LDAP://" & strGroup

    Set objGroup = GetObject(strGroupPath)

    Wscript.Echo objGroup.CN

Next

注意,我们此处执行的操作是使用下面一行代码构造该组的 Active Directory 路径:

strGroupPath = "LDAP://" & strGroup

然后,绑定到该组本身并回显 CN 的值。为什么?MemberOf 属性返回用户所属的每个组的可分辨名称;因此,您可以得到类似于“CN=Finance Users, OU=Finance, DC=fabrikam, DC=com”的名称。这很好,但我们更希望得到类似于“Finance Users”的组名(即 CN)。因此,我们继续绑定到该组并获取 CN。

对于第二步“映射网络驱动器”,这非常容易;以下代码将驱动器 X 映射到共享 //atl-fs-01/finance:

Set objNetwork = CreateObject("Wscript.Network")

objNetwork.MapNetworkDrive "X:", "//atl-fs-01/finance"

我们只需要创建一个 WSH Network 对象实例,然后调用 MapNetworkDrive 方法并为该方法传递两个参数:驱动器号和要映射到的文件共享。

因此,此处所说的“最后!”就是指以下脚本:它用来确定用户所属的组;然后根据组成员身份将驱动器 X 映射到相应的网络共享。为此,我们返回一个包含所有组的列表,然后使用 Select Case 语句来查看用户是否属于目标组之一。例如,以下代码检查用户是否属于 Finance Users 组;如果属于,则脚本将驱动器 X 映射到共享 //atl-fs-01/finance:

Case "Finance Users"

        objNetwork.MapNetworkDrive "X:", "//atl-fs-01/finance"

以下是最终的脚本:

On Error Resume Next



Set objSysInfo = CreateObject("ADSystemInfo")

Set objNetwork = CreateObject("Wscript.Network")



strUserPath = "LDAP://" & objSysInfo.UserName

Set objUser = GetObject(strUserPath)



For Each strGroup in objUser.MemberOf

    strGroupPath = "LDAP://" & strGroup

    Set objGroup = GetObject(strGroupPath)

    strGroupName = objGroup.CN



    Select Case strGroupName

        Case "Finance Users"

            objNetwork.MapNetworkDrive "X:", "//atl-fs-01/finance"

        

        Case "Human Resource Users" 

            objNetwork.MapNetworkDrive "X:", "//atl-fs-01/hr"



        Case "Manufacturing Users"

            objNetwork.MapNetworkDrive "X:", "//atl-fs-01/manufacturing"



        Case "Shipping and Receiving Users"

            objNetwork.MapNetworkDrive "X:", "//atl-fs-01/shipping"

    End Select

Next

有关此脚本的一些注意事项:第一,此脚本假定用户只属于相关组之一。假定用户同时属于 Manufacturing Users 和 Shipping and Receiving Users。在这种情况下,驱动器 X 将映射到 //atl-fs-01/manufacturing,但在脚本试图将驱动器 X 映射到 //atl-fs-01/shipping 时,将会发生错误;发生此错误的原因是驱动器已被使用。如果用户可能属于多个组,则必须使用某种方法解决这一问题:也许可以通过允许多个驱动器映射来实现(例如,映射驱动器 X,然后如果使用了驱动器 X,则将下一组的驱动器映射到驱动器 Y)。我们改日再进行详细介绍。

此外,该脚本假定按名称列出安全组中的用户。然而,如果用户 Ken Myer 恰好是 Accounting 组的成员,而该(不是个别用户)是 Finance Users 的成员,那该怎么办呢?在这种情况下,无法正确映射该驱动器,因为此脚本无法解决嵌套组(组中包含其他组)问题。您需要使用更复杂的脚本,我们将在不久以后介绍完成此操作的脚本。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客
    如何在一个文件被添加到
    如何将“珊瑚虫”好友请

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览