wmi 无法直接导出系统配置快照,需分三步实现:①用 wql 查询各类系统信息(如操作系统、网络、服务、用户等);②用 powershell 封装为 json/csv 并打包;③通过 smb、winrm 或 http 安全传输至远程服务器。
wmi 本身不直接提供“导出系统配置快照”的原生功能,它更擅长查询、监控和有限控制(如启动进程、读取服务状态、获取硬件信息等)。所谓“系统配置快照”,通常指一组结构化系统状态数据(如已安装软件、启动项、网络配置、用户账户、注册表关键项、服务列表等),而 wmi 可以分项采集这些数据,再由你组合、序列化并传输到远程服务器。
要实现“使用 WMI 导出 Windows 系统配置快照至远程服务器”,实际是三步协同:采集 → 封装 → 传输。下面按实用路径说明:
使用 WMI 查询关键系统配置项
通过 WQL 查询多个 WMI 类,覆盖常见配置维度。常用类包括:
-
Win32_OperatingSystem:系统版本、安装日期、总内存 -
Win32_ComputerSystem:制造商、型号、域/工作组、启动模式 -
Win32_NetworkAdapterConfiguration(WHERE IPEnabled=TRUE):IP 地址、子网掩码、DNS、网关 -
Win32_StartupCommand:开机自启程序(含路径与参数) -
Win32_Product(慎用,慢且可能触发 MSI 扫描)或Win32_InstalledWin32Program(推荐替代):已安装应用 -
Win32_Service(WHERE State='Running' AND StartMode='Auto'):关键自启服务 -
Win32_UserAccount:本地用户列表(Name, Disabled, FullName, SID) -
Win32_Share:共享目录及权限摘要
✅ 建议用 PowerShell 脚本批量执行多条 WQL 查询,并导出为结构化 JSON 或 CSV,便于后续处理。例如:
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, TotalVisibleMemorySize, LastBootUpTime | ConvertTo-Json
将采集结果封装为可传输的快照文件
不要依赖单一 WMI 方法“一键导出”。应主动构建快照包:
- 每个 WMI 查询结果单独保存为
.json或.csv文件(如network.json,services.csv) - 添加元数据文件
snapshot_manifest.json,记录采集时间、主机名、操作系统、脚本版本 - 可选:用
Compress-Archive打包为.zip,带时间戳命名(如WIN-ABC123_config_20260619T0545.zip)
⚠️ 注意:避免在生产环境频繁调用
Win32_Product(性能开销大);优先用Get-WmiObject -Class Win32_InstalledWin32Program或Get-Package(PowerShell 5.1+)替代。
安全可靠地传输到远程服务器
WMI 不负责文件传输,需配合其他机制:
-
SMB 共享写入:确保目标服务器开放 SMB(TCP 445),且当前账号对远程共享路径有写权限
Copy-Item .WIN-ABC123_config_20260619T0545.zip \192.168.10.50ackups -Force
-
WinRM + PowerShell Remoting(推荐):在远程服务器上预先启用 WinRM(
winrm quickconfig),然后用Invoke-Command直接写入目标路径$session = New-PSSession -ComputerName 192.168.10.50 -Credential $cred Copy-Item .snapshot.zip -Destination C:snapshots -ToSession $session
-
HTTP POST(适合集中管理平台):用
Invoke-RestMethod将 JSON 内容 POST 到接收 API(如 Python Flask 接口)
? 安全提示:传输过程避免明文密码;使用 Kerberos(域环境)或证书认证;禁用 SMBv1;远程服务器需配置最小权限共享目录,禁止执行权限。
不复杂但容易忽略细节。











