使用Excel数据透视表统计工作站上的唯一应用程序数量
嘿,这个需求我熟,刚好之前帮企业做过类似的批量采集和分析,给你整理一套完整的落地方案,从数据采集到Excel分析全流程都给你理清楚:
第一步:用PowerShell批量采集5000+工作站的应用数据
要搞定这么多机器的应用采集,PowerShell是最高效的工具,我给你写了带错误处理的脚本,能兼顾采集效率和异常排查:
# 先把所有工作站的主机名整理到一个txt文件里,每行一个主机名 $workstationList = Get-Content -Path "D:\Assets\workstations.txt" # 初始化空数组存结果 $appInventory = @() foreach ($pc in $workstationList) { Write-Host "正在采集 $pc 的应用数据..." try { # 同时采集64位和32位应用(避免漏采32位软件) $apps64 = Get-CimInstance -Class Win32_Product -ComputerName $pc -ErrorAction Stop | Select-Object Name $apps32 = Get-CimInstance -Class Win32_Product -ComputerName $pc -Namespace "root\CIMV2\Wow6432Node" -ErrorAction Stop | Select-Object Name # 合并应用列表并去重,避免同一台机器重复记录同一个软件 $allApps = ($apps64 + $apps32).Name | Select-Object -Unique # 把每个应用和对应主机名绑定,加入结果数组 foreach ($app in $allApps) { $appInventory += [PSCustomObject]@{ AppName = $app HostName = $pc } } } catch { Write-Warning "采集 $pc 失败:$($_.Exception.Message)" # 把采集失败的机器记录下来,后续排查权限或网络问题 Add-Content -Path "D:\Assets\failed_pcs.txt" -Value "$pc : $($_.Exception.Message)" } } # 导出为UTF-8编码的CSV,避免Excel乱码 $appInventory | Export-Csv -Path "D:\Assets\all_installed_apps.csv" -NoTypeInformation -Encoding UTF8
小提示:提前确保所有工作站开启了WinRM服务(远程管理权限),不然Get-CimInstance会连不上;如果觉得采集速度慢,可以换成多线程并行采集,比如用
Start-Job或者ForEach-Object -Parallel(PowerShell 7+支持)。
第二步:用Excel数据透视表找出最常用的应用
拿到CSV文件后,打开Excel按以下步骤操作:
- 点击「数据」选项卡 → 「自文本/CSV」,选中导出的
all_installed_apps.csv,导入时注意选择UTF-8编码 - 导入完成后,点击「插入」选项卡 → 「数据透视表」,选择整个数据区域,把透视表放在新工作表
- 配置透视表字段:
- 把「AppName」拖到「行」区域
- 把「HostName」拖到「值」区域,右键值区域→「值字段设置」,选择「计数」(默认是求和,改过来才是统计安装了该应用的机器数量)
- 点击行区域的「AppName」,选择「排序」→「降序」,这样安装量最高的应用就直接排在最顶部
第三步:分析非常规软件与设备的关联
要找出偏离标准配置的设备,你可以这么做:
- 先整理出公司标准装机应用列表(比如Office、企业杀毒软件、内部办公系统客户端等)
- 在数据透视表的「行」区域筛选框里,勾选「选择多项」,然后去掉标准应用的勾选,剩下的就是非常规软件
- 想查看某款非常规软件安装在哪些机器上?直接点击该应用的行标签,右键→「显示详细信息」,Excel会自动生成新工作表,列出所有安装了这款软件的工作站主机名,方便你后续关联设备属性做分析
内容的提问来源于stack exchange,提问作者powershellFan83
相关产品推荐
相关产品推荐

