如何用PowerShell 2.0或命令行获取域内所有计算机的操作系统信息
获取域内计算机名称与操作系统的方法(Windows Server 2007 SP2/PowerShell 2.0)
一、传统命令行方式(原生工具组合)
用Windows自带的dsquery和dsget命令即可实现,无需额外安装组件:
dsquery computer domainroot -limit 0 | dsget computer -dn -operatingSystem -operatingSystemVersion
- 细节说明:
dsquery computer domainroot -limit 0:查询域内所有计算机(-limit 0取消默认100条结果限制,返回全部数据)dsget computer -dn -operatingSystem -operatingSystemVersion:提取计算机的可分辨名称、操作系统名称和版本
如果需要更简洁的输出(仅保留计算机名和系统信息),可以用for命令处理:
for /f "tokens=*" %a in ('dsquery computer domainroot -limit 0') do dsget computer "%a" -samid -operatingSystem
注:-samid返回的名称格式为COMPUTERNAME$,可通过字符串处理去掉末尾的$。
二、PowerShell 2.0原生实现(无需AD模块)
利用.NET原生类直接查询LDAP,不需要安装Active Directory模块:
# 替换为你的域名称 $domain = "yourdomain.com" $searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://$domain") $searcher.Filter = "(objectCategory=computer)" # 指定需要加载的属性,减少查询开销 $searcher.PropertiesToLoad.AddRange(@("name", "operatingsystem")) | Out-Null $results = $searcher.FindAll() foreach ($result in $results) { [PSCustomObject]@{ ComputerName = $result.Properties["name"][0] OperatingSystem = $result.Properties["operatingsystem"][0] } }
如果需要操作系统版本信息,添加operatingsystemversion属性即可:
$searcher.PropertiesToLoad.Add("operatingsystemversion") | Out-Null # 在输出对象中新增字段 OperatingSystemVersion = $result.Properties["operatingsystemversion"][0]
三、域控制器本地备选方法(不推荐日常使用)
如果这台服务器是域控制器,可通过ntdsutil工具读取AD数据库,但需停止AD服务,会影响域功能,仅作为极端场景备选,优先使用前两种方法。
内容的提问来源于stack exchange,提问作者Brute
相关产品推荐
相关产品推荐

