# WMIC命令大全

## 目录

- [什么是WMIC](#什么是wmic)
- [基本语法](#基本语法)
- [常用命令分类](#常用命令分类)
  - [系统信息查询](#系统信息查询)
  - [硬件信息查询](#硬件信息查询)
  - [软件信息查询](#软件信息查询)
  - [进程管理](#进程管理)
  - [服务管理](#服务管理)
  - [用户账户管理](#用户账户管理)
  - [网络管理](#网络管理)
  - [文件和文件夹操作](#文件和文件夹操作)
  - [磁盘和分区管理](#磁盘和分区管理)
  - [事件日志](#事件日志)
  - [启动项管理](#启动项管理)
  - [电源管理](#电源管理)
  - [远程操作](#远程操作)
- [高级用法](#高级用法)
- [WMIC脚本示例](#wmic脚本示例)
- [常见问题](#常见问题)

## 什么是WMIC

WMIC（Windows Management Instrumentation Command-line）是Windows系统内置的命令行工具，用于查询和管理Windows系统组件。它允许用户通过命令行访问WMI（Windows Management Instrumentation）服务，可以查询系统信息、管理进程、服务、用户账户等。

## 基本语法

```
wmic [/node:<computer>] [/user:<username>] [/password:CHANGE_ME [<namespace>]::<class> [<wql>]
```

参数说明：
- `/node:<computer>`: 指定要连接的远程计算机
- `/user:<username>`: 指定远程连接的用户名
- `/password:CHANGE_ME 指定远程连接的密码
- `<namespace>`: 指定WMI命名空间（默认为root\cimv2）
- `<class>`: 指定要查询或操作的WMI类
- `<wql>`: WMI查询语言语句

## 常用命令分类

### 系统信息查询

```
# 查看操作系统信息
wmic os get Caption,Version,BuildNumber,OSArchitecture

# 查看系统启动时间
wmic os get LastBootUpTime

# 查看系统总内存和可用内存
wmic os get TotalVisibleMemorySize,FreePhysicalMemory

# 查看系统制造商和型号
wmic computersystem get Manufacturer,Model

# 查看系统序列号
wmic bios get SerialNumber
```

### 硬件信息查询

```
# 查看CPU信息
wmic cpu get Name,Manufacturer,MaxClockSpeed,NumberOfCores,NumberOfLogicalProcessors

# 查看内存信息
wmic memorychip get Capacity,Manufacturer,PartNumber,Speed

# 查看物理磁盘信息
wmic diskdrive get Caption,Size,Manufacturer,Model,SerialNumber

# 查看显示适配器信息
wmic path win32_videocontroller get Name,AdapterRAM,DriverVersion

# 查看网络适配器信息
wmic nic where "NetEnabled='TRUE'" get Name,MACAddress,Manufacturer

# 查看USB设备信息
wmic path win32_usbcontrollerdevice get Dependent
```

### 软件信息查询

```
# 查看已安装的软件列表
wmic product get Name,Version,Vendor,InstallDate

# 查找特定软件（如Office）
wmic product where "Name like '%Office%'" get Name,Version

# 查看已安装的Windows更新
wmic qfe list

# 查看启动的程序列表
wmic startup get Caption,Command,Location
```

### 进程管理

```
# 列出所有正在运行的进程
wmic process get Name,ProcessId,WorkingSetSize,ThreadCount

# 查找特定进程
wmic process where "Name='notepad.exe'" get ProcessId,Name,ThreadCount

# 终止指定进程（通过进程名）
wmic process where "Name='notepad.exe'" call terminate

# 终止指定进程（通过进程ID）
wmic process where "ProcessId=1234" call terminate

# 启动新进程
wmic process call create "notepad.exe"
```

### 服务管理

```
# 列出所有服务
wmic service get Name,DisplayName,State,StartMode

# 查找特定服务
wmic service where "Name='wuauserv'" get Name,DisplayName,State,StartMode

# 启动服务
wmic service where "Name='wuauserv'" call startservice

# 停止服务
wmic service where "Name='wuauserv'" call stopservice

# 重启服务
wmic service where "Name='wuauserv'" call stopservice
wmic service where "Name='wuauserv'" call startservice
```

### 用户账户管理

```
# 查看本地用户账户列表
wmic useraccount get Name,SID,Disabled,Lockout

# 查看用户组列表
wmic group get Name,SID

# 查看用户所属的组
wmic useraccount where "Name='Administrator'" get Name,LocalAccount,PasswordChangeable
```

### 网络管理

```
# 查看IP地址配置
wmic nicconfig where "IPEnabled='TRUE'" get IPAddress,SubnetMask,DefaultIPGateway,DNSHostName

# 查看网络连接
wmic netuse list

# 查看网络共享
wmic share get Name,Path,Type
```

### 文件和文件夹操作

```
# 创建文件夹
wmic fsdir where "Drive='C:' and Path='\\temp\\'" call create

# 删除文件夹
wmic fsdir where "Drive='C:' and Path='\\temp\\'" call delete

# 复制文件
wmic process call create "cmd.exe /c copy c:\\temp\\file.txt d:\\backup\\"
```

### 磁盘和分区管理

```
# 查看磁盘分区信息
wmic logicaldisk get DeviceID,Size,FreeSpace,VolumeName,FileSystem

# 查看磁盘使用情况
wmic logicaldisk where "DriveType=3" get DeviceID,FreeSpace,Size

# 查看卷标信息
wmic volume get DriveLetter,Label,Capacity,FreeSpace
```

### 事件日志

```
# 查看系统事件日志
wmic nteventlog get FileName,NumberOfRecords

# 查看事件日志条目
wmic nteventlog where "FileName='System'" get FileName,NumberOfRecords
```

### 启动项管理

```
# 查看启动项
wmic startup get Caption,Command,Location

# 删除启动项
wmic startup where "Caption='MyStartupItem'" delete
```

### 电源管理

```
# 查看电源状态
wmic os get BatteryStatus,SystemBatteryState

# 休眠计算机
wmic os where "Primary='True'" call Win32Shutdown 2

# 关机
wmic os where "Primary='True'" call Win32Shutdown 8

# 重启计算机
wmic os where "Primary='True'" call Win32Shutdown 24
```

### 远程操作

```
# 连接远程计算机并查询系统信息
wmic /node:远程计算机名 /user:用户名 /password:CHANGE_ME os get Caption,Version

# 在远程计算机上终止进程
wmic /node:远程计算机名 /user:用户名 /password:CHANGE_ME process where "Name='notepad.exe'" call terminate
```

## 高级用法

### 使用WQL查询语言

```
# 使用WQL查询CPU信息
wmic /namespace:\\root\cimv2 path win32_processor where "Name like '%Intel%'" get Name,NumberOfCores

# 查询特定大小以上的进程
wmic /namespace:\\root\cimv2 path win32_process where "WorkingSetSize > 100000000" get Name,WorkingSetSize
```

### 格式化输出

```
# 表格格式输出
wmic os list brief

# 详细格式输出
wmic os list full

# XML格式输出
wmic os list /format:xml

# CSV格式输出
wmic os list /format:csv
```

### 使用别名

```
# 使用别名获取系统信息
wmic computersystem list

# 查看所有可用的别名
wmic alias list
```

## WMIC脚本示例

### 备份用户安装的软件列表

```batch
@echo off
wmic product get Name,Version,Vendor,InstallDate > installed_software.txt
echo 软件列表已保存到installed_software.txt
pause
```

### 监控系统资源使用情况

```batch
@echo off
:loop
echo ============= 系统资源监控 =============
date /t & time /t
echo --------------- CPU信息 ---------------
wmic cpu get LoadPercentage
echo --------------- 内存信息 ---------------
wmic os get FreePhysicalMemory,TotalVisibleMemorySize
set /p=按Ctrl+C退出...<nul
sleep 5
echo
echo
goto loop
```

### 查找并终止占用内存过高的进程

```batch
@echo off
for /f "tokens=2,3 skip=1" %%a in ('wmic process get ProcessId^,WorkingSetSize ^| sort /r /+80') do (
    set /a mem=%%b/1048576
    if !mem! GTR 500 (
        echo 终止占用内存 !mem!MB 的进程 PID:%%a
        wmic process where "ProcessId=%%a" call terminate
    )
)
pause
```

## 常见问题

### 1. 权限不足

**问题**：运行某些WMIC命令时提示权限不足

**解决方案**：以管理员身份运行命令提示符

### 2. 远程连接失败

**问题**：无法连接到远程计算机

**解决方案**：
- 确保远程计算机已开启WMI服务
- 检查防火墙设置，允许WMI服务通信
- 确保使用的账户具有足够的权限

### 3. 命令执行缓慢

**问题**：某些WMIC命令执行非常缓慢

**解决方案**：
- 尽量使用精确的过滤条件
- 只查询必要的属性
- 避免在大型网络中对多台计算机同时执行复杂查询

### 4. 输出格式不友好

**问题**：WMIC命令输出的格式不易读

**解决方案**：使用适当的格式参数，如`/format:list`或`/format:csv`，或结合findstr、for等命令进行处理

---

## 注意事项

1. WMIC命令在Windows 10 1809及更高版本中已被弃用，微软推荐使用PowerShell中的Get-CimInstance命令
2. 某些命令可能需要管理员权限才能执行
3. 在生产环境中使用前，建议在测试环境中验证命令效果
4. 远程操作需要确保网络连接正常，且目标计算机允许远程管理