使用组策略和vbs脚本实现域用户首次登录绑定计算机并获取域计算机当前登录的用户信息

背景描述

公司有这样的一个需求,要求实现域用户只能在自己的电脑上进行本地登录。这个需求要实现并不难,ad上有“登录工作站”属性可以实现,设置完之后域用户就只能在列表里的计算机进行本地登录了。
在这里插入图片描述
在这里插入图片描述

但是难的地方在于我们并没有域用户和计算机名的对应关系,一个个收集再手动设置的话太过于繁琐了,就算有,后面入职的新员工也得手动设置,太麻烦了。
受以下文章启发,可以使用组策略和vbs脚本来实现,让组策略把vbs脚本设置成登录脚本,脚本读取当前用户和计算机,将相关属性写入到ad中,只要用户第一次在域环境中使用自己的电脑上登录,就能实现自动绑定当前计算机,感谢这位博主!

使用组策略获取AD中所有计算机当前登录用户信息


一、给与Authenticated Users组相关属性的写入权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、vbs脚本实现登录时写入相关属性

REM Author: Junson
REM Last update date: 2022-07-14
REM Function: Write the userworkstations property and get the computer login username

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo")

Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)

Set objUser = GetObject("LDAP://" & objSysInfo.UserName)

if objUser.CN <> "" then

   objComputer.Description = objUser.CN & " | " & date & " " & time

   objComputer.SetInfo

   if objUser.userWorkstations = "" and objUser.pager = "" then

      objUser.Put "userWorkstations",objComputer.CN

      objUser.SetInfo

   end if

end if

Set objUser = Nothing

Set objComputer = Nothing

Set objSysInfo = Nothing

如果有公共机需要让大家都能登录的话,可以把第21行修改成下面这样子,这样脚本上线后用户个人PC和公共机都能登录了;如果是脚本上线之后突然有公共机的登录需求,除了需要修改下登录脚本外,还需要写一个脚本在ad上把当前所有用户的userWorkstations属性新增一下公共机的计算机名。

objUser.Put "userWorkstations",objComputer.CN & ",DESKTOP-Shared01,DESKTOP-Shared02"

如果有个别用户(例如域管理员)或者公用账号不需要限制登录工作站的,可以在寻呼机属性填写任意值,因为我在脚本中还设置了用户的pager属性必须为空的条件才会执行写入userWorkstations的属性,所以寻呼机这里填写任意值就不会被脚本匹配到。
在这里插入图片描述

三、设置组策略

先给与Authenticated Users读取用户所在OU的权限,否则组策略会无法更新成功
在这里插入图片描述

设置组策略,将上面的脚本保存为.vbs格式,放在“显示文件”所打开的文件夹里
在这里插入图片描述

四、验证效果

组策略默认自动更新周期是90分钟,可以用gpupdate /force强制更新组策略,随后登录验证效果。

在确保计算机能与ad通讯的前提下登录,就可以看到计算机描述这里可以显示最新的登录用户名和时间,登录工作站这里也能自动添加上用户所登录的计算机名。
在这里插入图片描述
在这里插入图片描述

五、扩展阅读——获取电脑序列号并写入ad计算机属性

有的公司可能还需要计算机名和电脑序列号的对应关系,以便于查询资产信息。这个开机脚本同样可以实现收集这个信息,把脚本再加上一段代码即可。

REM Author: Junson
REM Last update date: 2022-07-18
REM Function: Write the userworkstations property, get the computer login username and get the computer Serial Number

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo")

Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)

Set objUser = GetObject("LDAP://" & objSysInfo.UserName)

Set wmi = GetObject("winmgmts:\\")

if objUser.CN<>"" then

   objComputer.Description = objUser.CN & " | " & date & " " & time

   Set bios=wmi.instancesof("win32_bios")

   For Each bio In bios

      SerialNumber=bio.SerialNumber

   Next

   objComputer.serialNumber = SerialNumber
   
   objComputer.SetInfo

   if objUser.userWorkstations = ""  and objUser.pager = "" then

      objUser.Put "userWorkstations",objComputer.CN

      objUser.SetInfo

   end if

end if

Set wmi = Nothing

Set objUser = Nothing

Set objComputer = Nothing

Set objSysInfo = Nothing

同时还要给与Authenticated Users组写入后代计算机对象serialNumber属性的权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

之后跑完脚本就能在ad计算机的serialNumber属性这里看到电脑序列号,由于我使用的是虚拟机,所以序列号是这个格式,在真实物理机上获取到的序列号是会和电脑背面的标签是一致的,可以便于根据计算机名来查询资产信息。

在这里插入图片描述

另外,我们不仅可以收集序列号,还能收集电脑型号,cpu型号,内存大小等信息,更多资讯可参考以下这篇文章。

WMI的讲解(是什么,做什么,为什么)

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值