PowerShell内置WMI/CIM命令可一键采集Windows硬件快照:用Get-CimInstance获取CPU、内存、BIOS、磁盘、网卡、显卡等结构化信息,支持筛选、关联与导出CSV/HTML报告,需管理员权限及WinRM实现远程批量采集。
powershell 是 windows 系统内置的强力自动化工具,无需额外安装即可快速获取全面、结构化的硬件快照。关键在于用好 get-wmiobject(旧版)或更推荐的 get-ciminstance(现代、安全、支持远程),配合合理筛选和格式化输出。
核心硬件信息一键采集
一条命令即可汇总 CPU、内存、主板、BIOS 和磁盘基本信息:
-
Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer, Model, TotalPhysicalMemory, NumberOfLogicalProcessors, NumberOfProcessors—— 获取整机型号、物理内存总量(字节)、逻辑/物理 CPU 核心数 -
Get-CimInstance Win32_Processor | Select-Object Name, MaxClockSpeed, NumberOfCores, NumberOfLogicalProcessors—— 提取 CPU 型号、主频(kHz)、核心与线程数 -
Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum | ForEach-Object { [math]::Round($_.Sum / 1GB, 2) }—— 计算实际插槽总内存(GB) -
Get-CimInstance Win32_BIOS | Select-Object SMBIOSBIOSVersion, Manufacturer, ReleaseDate—— 获取 BIOS 版本及发布时间(注意 ReleaseDate 是 DMTF 格式,可用[Management.ManagementDateTimeConverter]::ToDateTime()转换)
磁盘与存储拓扑清晰呈现
区分物理磁盘与逻辑卷,避免混淆“C盘容量”和“SSD 实际大小”:
-
Get-CimInstance Win32_DiskDrive | Select-Object Model, Size, MediaType, InterfaceType, SerialNumber—— 列出所有物理硬盘(含 NVMe/SATA/USB),Size单位为字节 -
Get-CimInstance Win32_Volume | Where-Object {$_.DriveType -eq 3} | Select-Object DriveLetter, Capacity, FreeSpace, FileSystem—— 筛选本地固定卷,显示可用空间与文件系统 - 关联二者:用
Get-CimAssociatedInstance链接Win32_DiskDrive和Win32_DiskPartition,再连到Win32_Volume,可生成完整存储映射关系
网络与显卡设备精准识别
避开设备管理器里“Microsoft Basic Display Adapter”这类占位符,直取真实硬件:
-
Get-CimInstance Win32_NetworkAdapter | Where-Object {$_.NetEnabled -and $_.Name -notmatch "VMware|Virtual|Hyper-V"} | Select-Object Name, NetConnectionID, MACAddress, Speed—— 过滤启用的真实网卡,排除虚拟适配器 -
Get-CimInstance Win32_VideoController | Where-Object {$_.Name -notmatch "Microsoft|Basic"} | Select-Object Name, VideoProcessor, AdapterRAM, DriverVersion—— 排除软件渲染器,聚焦独立/核显真实型号与显存 - 补充 GPU 温度或负载需 WMI 扩展(如 Open Hardware Monitor 提供的 WMI 接口)或第三方工具,原生 WMI 不提供实时传感器数据
导出为结构化报告便于归档对比
将多类信息整合为统一对象,导出为 CSV 或 HTML 报告:
- 用
[PSCustomObject]构建自定义快照对象,例如:
$snapshot = [PSCustomObject]@{<br> Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"<br> Hostname = $env:COMPUTERNAME<br> CPU = (Get-CimInstance Win32_Processor).Name<br> RAM_GB = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)<br> DiskCount = (Get-CimInstance Win32_DiskDrive).Count<br>} -
$snapshot | Export-Csv -Path "HW_Snapshot_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation—— 生成带时间戳的 CSV,适合长期跟踪 -
$snapshot | ConvertTo-Html -Fragment | Out-File "report.html",再拼接 HTML 头尾,生成可读性更强的网页快照
不复杂但容易忽略:执行前以管理员身份运行 PowerShell,确保能访问全部 WMI 类;若目标系统启用了 WinRM 远程管理,同一套脚本还能通过 -ComputerName 参数批量采集多台机器——真正实现“一次编写,随处运行”。


















