powershell统计域内计算机操作系统版本分布,需满足三前提:电脑已加入域且有ad读取权限、已安装activedirectory模块、目标机开机并wmi/cim正常;脚本自动获取启用计算机、并发采集os信息、按版本分组计数并支持导出csv或excel。
用powershell统计域内计算机的操作系统版本分布,核心是:先获取所有启用的域计算机对象,再逐台采集其操作系统信息,最后按版本归类计数。整个过程依赖active directory模块和远程系统信息读取能力,无需在每台机器上手动执行。
前提条件与环境准备
确保满足以下三点,否则命令会失败或返回不全:
- 当前电脑已加入域,且你拥有域用户权限(至少有“读取”计算机对象的权限)
- 已安装 ActiveDirectory PowerShell模块(通常由RSAT-AD-PowerShell功能提供)
- 目标域计算机处于开机状态、网络可达,且Windows Management Instrumentation(WMI)或CIM服务正常运行(默认开启)
一键统计操作系统版本分布(推荐方案)
运行以下脚本,它会自动筛选启用的计算机、并发采集系统版本,并输出带计数的汇总表:
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter {Enabled -eq $true} -Property Name,DNSHostName | Where-Object {$_.DNSHostName}
$results = $computers | ForEach-Object {
$name = $_.Name
try {
$os = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $_.DNSHostName -ErrorAction Stop
[PSCustomObject]@{
ComputerName = $name
OSName = $os.Caption
OSVersion = $os.Version
BuildNumber = $os.BuildNumber
Architecture = $os.OSArchitecture
}
} catch {
[PSCustomObject]@{
ComputerName = $name
OSName = "无法连接"
OSVersion = ""
BuildNumber = ""
Architecture = ""
}
}
}
$results | Group-Object OSName | Select-Object @{n='操作系统';e={$_.Name}}, @{n='数量';e={$_.Count}} | Sort-Object 数量 -Descending
输出示例:
Windows Server 2019 Datacenter —— 42Windows 10 Enterprise —— 217
Windows 11 Pro —— 89
无法连接 —— 12
增强版:区分客户端/服务器并标注大版本
若需进一步识别Windows 10/11或Server 2016/2019/2022,可基于BuildNumber做映射。在上一节脚本的 $os 后添加判断逻辑:
计算机网络安全服务公司网站模板是一款适合提供云安全、网络安全、服务器管理。数据安全服务公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
$majorVersion = switch ($os.BuildNumber) {
{$_ -ge 22000} { "Windows 11" }
{$_ -ge 19041 -and $_ -le 19045} { "Windows 10 20H2" }
{$_ -ge 17763} { "Windows 10 1809+" }
{$_ -ge 14393} { "Windows Server 2016 / Windows 10 1607" }
{$_ -ge 10240} { "Windows 10 1507" }
{$_ -ge 9200} { "Windows Server 2012 R2" }
default { "未知构建号 $($os.BuildNumber)" }
}
然后将 $majorVersion 加入自定义对象中,再用 Group-Object 按该字段分组即可获得更清晰的版本谱系分布。
导出为Excel便于分析
把完整明细保存下来,方便后续筛选或绘图:
$results | Export-Csv -Path "$env:USERPROFILE\Desktop\DomainOSReport.csv" -NoTypeInformation -Encoding UTF8 # 或直接打开Excel(需已安装Microsoft Excel) $results | Export-Excel -Path "$env:USERPROFILE\Desktop\DomainOSReport.xlsx" -WorksheetName "OS_Distribution"
注意:Export-Excel 需提前安装 ImportExcel 模块(Install-Module ImportExcel -Force),比CSV更友好,支持自动调整列宽、冻结首行等。










