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

编程入门 行业动态 更新时间:2024-10-11 17:26:55

使用组策略和vbs脚本实现域用户首次登录绑定<a href=https://www.elefans.com/category/jswz/34/1770118.html style=计算机并获取域计算机当前登录的用户信息"/>

使用组策略和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 usernameOn Error Resume NextSet objSysInfo = CreateObject("ADSystemInfo")Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)Set objUser = GetObject("LDAP://" & objSysInfo.UserName)if objUser.CN <> "" thenobjComputer.Description = objUser.CN & " | " & date & " " & timeobjComputer.SetInfoif objUser.userWorkstations = "" and objUser.pager = "" thenobjUser.Put "userWorkstations",objComputer.CNobjUser.SetInfoend ifend ifSet objUser = NothingSet objComputer = NothingSet 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 NumberOn Error Resume NextSet objSysInfo = CreateObject("ADSystemInfo")Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)Set objUser = GetObject("LDAP://" & objSysInfo.UserName)Set wmi = GetObject("winmgmts:\\")if objUser.CN<>"" thenobjComputer.Description = objUser.CN & " | " & date & " " & timeSet bios=wmi.instancesof("win32_bios")For Each bio In biosSerialNumber=bio.SerialNumberNextobjComputer.serialNumber = SerialNumberobjComputer.SetInfoif objUser.userWorkstations = ""  and objUser.pager = "" thenobjUser.Put "userWorkstations",objComputer.CNobjUser.SetInfoend ifend ifSet wmi = NothingSet objUser = NothingSet objComputer = NothingSet objSysInfo = Nothing

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



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

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

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

更多推荐

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

本文发布于:2024-03-14 11:46:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736401.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:计算机   首次   绑定   用户信息   脚本

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!