Windows Server - 运维篇
第二章 域用户登录自动记录计算机名称到备注栏
系列文章回顾
下章内容
域用户登录自动记录计算机名称到备注栏
前言
内网使用多分支架构部署了域控,并分发给每个域控拥有可写权限。由于加域的计算机账号的命名无规律且未制定命名规范,导致域用户无法跟计算机账号一一对应,无法达到用户与计算机的一致性。
现决定采用域用户登录脚本(VBS脚本)来自动收集用户登录的计算机信息,自动写入属性到域用户和计算机账号里,使之拥有对应关系,方便IT运维人员后续的疑难解答。写入属性如下列表
写入属性1 | 写入属性2 | 写入属性3 | 写入属性4 | |
---|---|---|---|---|
域计算机账号(Computer) | 域PC的描述,格式如"Login PC: PCXXX | xxxx/xx/xx xx:xx:xx" 字段:Description | PC的序列号,从bios信息中获取 字段:SerialNumber | IP地址和MAC地址,从网卡中获取,格式如"x.x.x.x/ff:ff:ff:ff:ff:ff" 字段:ipHostNumber | 位置,根据IP地址可得,格式如"DC01/Site01" 字段:info |
域用户(User) | 域用户的描述,格式如"XXX@samid | xxxx/xx/xx xx:xx:xx" 字段:Description |
前置条件
- 内网已部署AD域控服务、DNS服务。
- AD DS的组策略服务正常运行。
实施步骤
1. 给域用户所属OU添加字段的可写权限
2. 给域计算机所属OU添加字段的可写权限
3. 编写域用户登录使用的VBS脚本
4. Default Domain Policy应用VBS登录脚本
5. 利用PowerShell合并查询域User和域PC的关联列表
给域用户所属OU添加字段的可写权限
先全部清除之后再勾选属性
“写入描述”
给域计算机所属OU添加字段的可写权限
先全部清除之后再勾选属性
“写入描述”,“写入info”,“写入ipHostNumber”,“写入SerialNumber”
编写域用户登录使用的VBS脚本
WriteADUserInfo.vbs
REM Copyright @ 2022 wendr.top
REM Author: ww1372247148@163.com
On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
Set objWMI = GetObject("winmgmts:\\")
If objUser.CN <> "" Then
Set IPConfigSet = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
IpAddr = ""
MACAddr = ""
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
If Left(IPConfig.IPAddress(i),4) <> "fe80" Then
IpAddr = IpAddr & IPConfig.IPAddress(i) & ","
MACAddr = MACAddr & IPConfig.MACAddress & ","
End If
Next
End If
Next
IpAddr = Split(IpAddr,",")(0)
MACAddr = Split(MACAddr,",")(0)
objComputer.Description = objUser.CN & Chr(64) & objUser.sAMAccountName & Chr(32) & Chr(124) & Chr(32) & date & Chr(32) & time
objComputer.SetInfo
objUser.Description = "Login PC: " & objComputer.CN & Chr(32) & Chr(124) & Chr(32) & date & Chr(32) & time
objUser.SetInfo
objComputer.ipHostNumber = IpAddr & Chr(47) & MACAddr
objComputer.SetInfo
Select Case Left(IpAddr,5)
Case "172.16" ' Site01
objComputer.info = "DC01/Site01"
objComputer.SetInfo
Case "172.17" ' Site02
objComputer.info = "DC01/Site02"
objComputer.SetInfo
Case "172.18" ' Site03
objComputer.info = "DC01/Site03"
objComputer.SetInfo
Case Else ' is 192.168 ?
If Left(IpAddr,6) = "192.168" Then ' DC02/Site01
objComputer.info = "DC02/Site01"
objComputer.SetInfo
End If
End Select
Set BIOSSet = objWMI.instancesof("win32_bios")
For Each BIOS In BIOSSet
objComputer.serialNumber = BIOS.SerialNumber
objComputer.SetInfo
Exit For
Next
End If
Set objUser = Nothing
Set objComputer = Nothing
Set objSysInfo = Nothing
Set objWMI = Nothing
Wscript.Quit
Default Domain Policy应用VBS登录脚本
编辑Default Domain Policy的GPO,【用户配置】 / 【策略】 / 【Windows 设置】 / 【脚本(登录/注销)】 / 【登录】
【显示文件】把VBS脚本复制到该路径
注意事项:
Domain Admins用户组的默认权限是不应用组策略,已添加过Domain Admins的域用户可能会应用到Domain Users的权限,但Domain Admins的优先级更高,可能会不生效。需在Default Domain Policy组策略的委派里把Domain Admins组的权限添加"应用组策略"。并取消"写入"权限(避免Domain Admins组用户执行修改)
利用PowerShell合并查询域User和域PC的关联列表
Get-ADUser
### Format-Table 查询
Get-ADUser -Filter "Description -like 'Login*'" -Properties Description | ft SamAccountName,Description
SamAccountName Description
-------------- -----------
samid01 Login PC: PC001 | 2022/xx/xx x:xx:xx
samid02 Login PC: PC002 | 2022/xx/xx x:xx:xx
...
### Format-List 查询
Get-ADUser -Filter "Description -like 'Login*'" -Properties Description | fl SamAccountName,Description
SamAccountName : samid01
Description : Login PC: PC001 | 2022/xx/xx x:xx:xx
SamAccountName : samid02
Description : Login PC: PC002 | 2022/xx/xx x:xx:xx
...
Get-ADComputer
### Format-Table 查询
Get-ADComputer -Filter "Description -like '*@*'" -Properties Description,SerialNumber,ipHostNumber,info | ft Description,SerialNumber,ipHostNumber,info
Description SerialNumber ipHostNumber info
----------- ------------ ------------ ----
用户A1@samid01 | 2022/xx/xx x:xx:xx {XXXXXXXXXXXXXXXXXX} {172.16.0.1/FF:FF:FF:FF:FF:FF} DC01/Site01
...
### Format-List 查询
Get-ADComputer -Filter "Description -like '*@*'" -Properties Description,SerialNumber,ipHostNumber,info | fl Description,SerialNumber,ipHostNumber,info
Description : 用户A1@samid01 | 2022/xx/xx x:xx:xx
SerialNumber : {XXXXXXXXXXXXXXXXXX}
ipHostNumber : {172.16.0.1/FF:FF:FF:FF:FF:FF}
info : DC01/Site01
...
### 去除属性字段, 过滤域PC对应的域CN和域User, 按Format-List 查询
Get-ADComputer -Filter "Description -like '*@*'" -Properties Description,SerialNumber,ipHostNumber,info | ForEach {
$_.Description.Split(" |")[0],$_.SerialNumber,$_.ipHostNumber,$_.info,""}
用户A1@samid01
XXXXXXXXXXXXXXXXXX
172.16.0.1/FF:FF:FF:FF:FF:FF
DC01/Site01
...