可通过powershell的activedirectory模块执行get-adcomputer命令筛选primarygroupid为515且系统名含“server”的计算机,导出含名称、系统版本、补丁包、最后登录天数及启用状态的csv文件。
可以通过 powershell 的 activedirectory 模块快速获取域内所有成员服务器(即已加入域但非域控制器的 windows 服务器计算机)。
确认前提条件
确保运行环境满足以下要求:
- 已安装 Remote Server Administration Tools (RSAT) 中的“Active Directory 模块”(Windows 10/11 或 Server 系统)
- 当前用户对目标域具有读取计算机对象的权限(如域用户、Domain Admins 成员等)
- 能正常解析并连接到域控制器(DNS 可用,网络连通)
执行基础查询命令
在 PowerShell 中以普通域用户身份运行以下命令(无需管理员权限,只要 AD 权限足够):
Get-ADComputer -Filter {(OperatingSystem -like "*Server*") -and (PrimaryGroupID -eq 515)} -Property Name,OperatingSystem,OperatingSystemServicePack,LastLogonDate | Select-Object Name,OperatingSystem,OperatingSystemServicePack,LastLogonDate | Sort-Object Name
说明:
-
-Filter 中
(OperatingSystem -like "*Server*")匹配系统名称含 “Server” 的计算机(如 “Windows Server 2019 Datacenter”) -
(PrimaryGroupID -eq 515)确保只选成员服务器(515 是内置组 Domain Computers 的 SID 后缀,域控制器主组为 516) - 排除了 DC(Domain Controllers 组成员,PrimaryGroupID=516),也自然过滤掉工作站(无 “Server” 字样)
导出为 CSV 文件(便于查看或交接)
添加导出逻辑,例如保存到桌面:
Get-ADComputer -Filter {(OperatingSystem -like "*Server*") -and (PrimaryGroupID -eq 515)} -Property Name,OperatingSystem,OperatingSystemServicePack,LastLogonDate |
Select-Object Name,OperatingSystem,OperatingSystemServicePack,@{Name='LastLogonDaysAgo';Expression={if($_.LastLogonDate){((Get-Date)-$_.LastLogonDate).Days} else {'Never'}}},Enabled |
Sort-Object Name |
Export-Csv "$env:USERPROFILE\Desktop\AD_MemberServers.csv" -NoTypeInformation -Encoding UTF8
该版本额外计算了距上次登录天数,并包含启用状态(Enabled),方便识别长期离线或已禁用的服务器。
补充说明与注意事项
注意:
- 若提示
Get-ADComputer : 找不到名称为“...”的 cmdlet,请先运行Import-Module ActiveDirectory,或检查 RSAT 是否安装完整 - 某些精简部署的服务器可能未上报完整 OS 信息(如 Core 版本显示为 “Windows Server Datacenter” 而不含 “Core”),但仍会被
*Server*匹配到 - 如需限定特定 OU,可加参数
-SearchBase "OU=Servers,DC=contoso,DC=com" - 避免使用
OperatingSystem -notlike "*Domain Controller*"做排除——因 DC 的OperatingSystem属性实际也显示为 “Windows Server xxx”,不包含 “Domain Controller” 文字











