Windows管理规范-WMI
Windows管理规范(英语:Windows Management Instrumentation,缩写WMI)由一系列对Windows Driver Model的扩展组成,它通过仪器组件提供信息和通知,并提供了一个操作系统的接口。WMI是微软对分布式管理工作组(DMTF)的基于Web的企业管理类(WBEM)和通用信息模型(CIM)标准的实现。
WMI预装在Windows 2000及更新的微软操作系统中,适用于Windows 9x、NT等操作系统,并允许使用脚本语言(例如VBScript或Windows PowerShell)来本地或远程管理Microsoft Windows个人电脑和服务器。对于愿意开发一个或多个WMI提供者的人来说,WMI提供了许多“开箱即用”的特性。提供了从命令行接口和批处理脚本执行系统管理的支持。
微软还为命令提示符提供了一个名为“Windows Management Instrumentation Command-line”(WMIC)的接口来调用 WMI。
WMI通过提供统一的模型来补充其他标准,该模型表示可以通过一种常用方式来访问受管环境的任何来源的管理数据。其规范目的是定义一系列独立于环境的专有规范,并允许管理信息在管理应用程序之间共享。此规范规定了企业管理标准以及现有的适用于Windows的相关技术,例如桌面管理接口(DMI)和简单网络管理协议(SNMP)。自从首个面向外部提供的WMI(Windows NT 4.0 SP4)发布以来,微软一直向Windows WMI新增功能:
1.在Windows NT 4.0中,安装WMI后,微软提供了大约15个可用的WMI资料提供者
2.在Windows 2000发布时,微软已发布29个WMI资料提供者作为操作系统预装的一部分
3.在Windows Server 2003发布时,微软在平台上包含80多个WMI资料提供者
4.Windows Vista中包含13个新的WMI资料提供者,总数量接近100个
5.Windows Server 2008包含更多资料提供者,例如用于IIS 7、PowerShell和虚拟化的资料提供者
即使微软从未明确承诺,有许多客户将资料提供者数量的增长解释为WMI已经成为微软Windows一项“无处不在”管理层的标志。
由于Windows中通过WMI管理数据不断增加,信息技术系统管理领域的人员开始开发基于WMI的脚本和自动化程序。除了脚本需求外,大多数领先的管理软件(包括MOM、SCCM、ADS、HP OpenView for Windows(HPOV)、BMC软件公司、CA科技)都提供WMI功能,亦允许通过各种用户接口使用或提供WMI信息。这使得无法在WMI上编程的系统管理员和操作员无需预先了解也能享受到WMI的优势。
官宣WMIC正式退出
微软宣布WMIC工具将在Win11 25H2 后被移除,建议改用 PowerShell。WMIC 是 Windows 此前长期内置的命令行工具,用户可通过文本命令与 Windows Management Instrumentation(WMI)系统交互,用于执行系统管理和诊断操作。微软于2025年9月在 Microsoft 365 消息中心确认,随着 Windows 11 25H2 及更高版本的发布,WMIC 工具将被彻底移除。之前在Windows-10 21H1和Windows-11 22H2的发布说明中就已经将WMIC标记为过时。
微软建议 IT 管理员改用 PowerShell 或其他现代化工具来执行 WMI、脚本及相关任务,因为未来的 Windows 版本将不再默认包含 WMIC。使用 PowerShell 和其他现代工具替代此前依赖 WMIC 的任务。可考虑的编程替代方式包括 WMI 的 COM API、.NET 库或脚本语言。一旦确定替代方案,请更新内部 IT 文档和流程。
本次变更仅影响过时的 WMIC 组件,Windows 管理规范(WMI)核心功能不受影响。2025年7月底,微软还专门介绍了在淘汰 WMIC 之后,Win11 用户和管理员如何继续使用该命令行界面工具。
WMIC:WMI 命令行实用工具
与现有的 shell 和实用工具命令兼容。其有一个能够分析、解释和执行从命令行接收的别名(Alias)的引擎,它是一个可执行文件。使用WMIC实现如下的管理任务:
1.本地计算机管理
2.远程单台或多台计算机管理
3.使用远程会话的进行管理(如Telnet)
4.使用管理脚本的自动管理
wmic /?
命令 例子 说明
/? 或 -? 显示所有全局开关和别名的语法
/ /? /user /? 显示指定全局开关的信息
/? class /? 显示某个命令的信息
/? memcache /? 显示某个别名的信息
/? temperature get /? 显示别名与动词组合的信息
/?:Full irq get /?:Full 显示动词的帮助信息
[global switches] <command>
以下全局开关可用:
/NAMESPACE:别名操作的命名空间的路径。
/ROLE:包含别名定义的角色的路径。
/NODE:别名将对其进行操作的服务器。
/IMPLEVEL:客户端模拟级别。
/AUTHLEVEL:客户端身份验证级别。
/LOCALE:客户端应使用的语言ID。
/PRIVILEGES:启用或禁用所有权限。
/TRACE:将调试信息输出到stderr。
/RECORD:记录所有输入命令和输出。
/INTERACTIVE:设置或重置交互模式。
/FAILFAST:设置或重置FailFast模式。
/USER:在会话期间使用的用户。
/PASSWORD:用于会话登录的密码。
/OUTPUT:指定输出重定向的模式。
/APPEND:指定输出重定向的模式。
/AGGREGATE:设置或重置聚合模式。
/AUTHORITY:指定连接的<authority type>。
/?[:<BRIEF | FULL>]:使用信息。
有关特定全局开关的更多信息,请键入:switch-name /?
当前角色中提供了以下别名/es:
ALIAS - 访问本地系统上可用的别名
BASEBOARD - 基板(也称为主板或系统板)管理。
BIOS - 基本输入/输出服务(BIOS)管理。
BOOTCONFIG - 引导配置管理。
CDROM - CD-ROM管理。
COMPUTERSYSTEM - 计算机系统管理。
CPU - CPU管理。
CSPRODUCT - 来自SMBIOS的计算机系统产品信息。
DATAFILE - DataFile管理。
DCOMAPP - DCOM应用程序管理。
DESKTOP - 用户的桌面管理。
DESKTOPMONITOR - 桌面监视器管理。
DEVICEMEMORYADDRESS - 设备内存地址管理。
DISKDRIVE - 物理磁盘驱动器管理。
DISKQUOTA - NTFS卷的磁盘空间使用情况。
DMACHANNEL - 直接内存访问(DMA)通道管理。
ENVIRONMENT - 系统环境设置管理。
FSDIR - 文件系统目录条目管理。
GROUP - 集团账户管理。
IDECONTROLLER - IDE控制器管理。
IRQ - 中断请求线(IRQ)管理。
JOB - 提供对使用计划服务计划的作业的访问。
LOADORDER - 管理定义执行依赖性的系统服务。
LOGICALDISK - 本地存储设备管理。
LOGON - 登录会话。
MEMCACHE - 缓存内存管理。
MEMORYCHIP - 存储芯片信息。
MEMPHYSICAL - 计算机系统的物理内存管理。
NETCLIENT - 网络客户端管理。
NETLOGIN - (特定用户的)网络登录信息管理。
NETPROTOCOL - 协议(及其网络特征)管理。
NETUSE - 主动网络连接管理。
NIC - 网络接口控制器(NIC)管理。
NICCONFIG - 网络适配器管理。
NTDOMAIN - NT域管理。
NTEVENT - NT事件日志中的条目。
NTEVENTLOG - NT事件日志文件管理。
ONBOARDDEVICE - 管理主板(系统板)内置的通用适配器设备。
OS - 已安装的操作系统/管理。
PAGEFILE - 虚拟内存文件交换管理。
PAGEFILESET - 页面文件设置管理。
PARTITION - 管理物理磁盘的分区区域。
PORT - I / O端口管理。
PORTCONNECTOR - 物理连接端口管理。
PRINTER - 打印机设备管理。
PRINTERCONFIG - 打印机设备配置管理。
PRINTJOB - 打印作业管理。
PROCESS - 进程管理。
PRODUCT - 安装包任务管理。
QFE - 快速修复工程。
QUOTASETTING - 设置卷上磁盘配额的信息。
RDACCOUNT - 远程桌面连接权限管理。
RDNIC - 特定网络适配器上的远程桌面连接管理。
RDPERMISSIONS - 特定远程桌面连接的权限。
RDTOGGLE - 远程打开或关闭远程桌面监听器。
RECOVEROS - 操作系统出现故障时将从内存中收集的信息。
REGISTRY - 计算机系统注册表管理.
SCSICONTROLLER - SCSI 控制器管理。
SERVER - 服务器信息管理。
SERVICE - 服务程序管理。
SHARE - 共享资源管理。
SOFTWAREELEMENT - 安装在系统上的软件产品元素的管理。
SOFTWAREFEATURE - SoftwareElement 的软件产品组件的管理。
SOUNDDEV - 声音设备管理。
STARTUP - 用户登录到计算机系统时自动运行命令的管理。
SYSACCOUNT - 系统帐户管理。
SYSDRIVER - 基本服务的系统驱动程序管理。
SYSTEMENCLOSURE - 物理系统封闭管理。
SYSTEMSLOT - 包括端口、插口、附件和主要连接点的物理连接点管理。
TAPEDRIVE - 磁带驱动器管理。
TEMPERATURE - 温度感应器的数据管理 (电子温度表)。
TIMEZONE - 时间区域数据管理。
UPS - 不可中断的电源供应 (UPS) 管理。
USERACCOUNT - 用户帐户管理。
VOLTAGE - 电压感应器 (电子电量计) 数据管理。
VOLUMEQUOTASETTING - 将某一磁盘卷与磁盘配额设置关联。
WMISET - WMI 服务操作参数管理。
有关CLASS/PATH/CONTEXT的更多信息,请键入:(CLASS | PATH | CONTEXT)/?
WMIC命令使用实例
执行“wmic”命令启动WMIC命令行环境。这个命令可以在XP或 .NET Server的标准命令行解释器(cmd.exe)、Telnet会话或“运行”对话框中执行。这些启动方法可以在本地使用,也可以通过.NETServer终端服务会话使用。
第一次执行WMIC命令时,Windows首先要安装WMIC(win7中自带wmic命令),然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式执行。其运行方式可以有两种法:
1、在cmd命令行键入wimic后出现wmic:root\cli>时你就可以输入命令了,如输入process显示所有的进程。可以输入用wimic /?来显示帮助。exit是退出交互模式。具体帮助用法如下:
命令行帮助:
命令 例子 说明
如要查看process命令的帮助,键入:process/?后显示如下:
wmic:root\cli>process /?
PROCESS - 进程管理。
提示: BNF 的别名用法。
(<alias> [WMIObject] | <alias> [<path where>] | [<alias>] <path where>) [<verb clause>].
用法:
PROCESS ASSOC [<format specifier>]
PROCESS CALL <method name> [<actual param list>]
PROCESS CREATE <assign list>
PROCESS DELETE
PROCESS GET [<property list>] [<get switches>]
PROCESS LIST [<list format>] [<list switches>]
2、用wmic 后面直接跟命令运行,如wmic process 就显示了所有的进程了。这两种运行方法就是:交互模式(Interactive mode)和非交互模式(Non-Interactive mode)。下面通过一些实例来说明用法:
1.显示进程的详细信息
输入 process where name="freeoa.exe" list full
将显示出freeoa.exe进程所有的信息。
2.停止、暂停和运行服务功能
启动服务startservice,
停止服务stopservice,
暂停服务pauseservice,
Service where caption="windows time" call stopservice ------停止服务
Service where caption="windows time" call startservice ------启动服务
Service where name="w32time" call stopservice ------停止服务
注意name和caption的区别:
caption 显示服务名,name:服务名称。
如:telnet服务的显示名称是telnet,服务名称.是tlntsvr。
还有Windows Time服务的名称是w32time,显示名称是"Windows Time"要用引号引起来,主要是有一个空格。
具体看一下:输入Service where caption="windows time" call startservice后有一个确认输入y就可以了,返回ReturnValue = 0;表示成功。
wmic:root\cli>Service where caption="windows time" call startservice
执行 (\\CHINA-46B1E8590\ROOT\CIMV2:Win32_Service.Name="W32Time")->startservice()
方法执行成功。输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};
3.显示出BIOS信息
wmic bios list full
大家可能注意到了上面命令行中还有两个参数list和full。list决定显示的信息格式与范围,它有Brief、Full、Instance、 Status、System、Writeable等多个参数,full只是它的一个参数,也是list的缺省参数,表示显示所有的信息。其他几个参数顾名思义,如Brief表示只显示摘要信息,Instance表示只显示对象实例,Status表示显示对象状态,Writeable表示只显示该对象的可写入的属性信息等。
4.停止进程的操作
例如,执行下面的命令将关闭正在运行的QQ.exe:
例1、wmic process where name='QQ.exe' call terminate
命令运行结束后,WMIC命令行提示出如下结果:
C:\>wmic process where name='QQ.exe' call terminate
执行 (\\FreeeOA.Net\ROOT\CIMV2:Win32_Process.Handle="728")->terminate()
方法执行成功。输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};
例2、wmic process where name="qq.exe" delete
命令运行结束后,WMIC命令行提示出如下结果:
C:\>wmic process where name="qq.exe" delete
删除范例 \\FreeeOA.Net\ROOT\CIMV2:Win32_Process.Handle="2820"
范例删除成功。
列出所有的进程 : wmic process
5.连接远程电脑
连接远程的电脑,不过好象对要开一些相应的服务:
wmic /node:"192.168.203.131" /password:"" /user:"administrator"
6. BIOS - 基本输入/输出服务 (BIOS) 管理
查看bios版本型号
wmic bios get Manufacturer,Name
7.WMIC设置IP地址
配置或更新IP地址:
wmic nicconfig where index=0 call enablestatic("192.168.1.5"), ("255.255.255.0") ;index=0说明是配置网络接口1。
配置网关(默认路由):
wmic nicconfig where index=0 call setgateways("192.168.1.1"),(1)
8.COMPUTERSYSTEM - 计算机系统管理
查看系统启动选项,boot的内容
wmic COMPUTERSYSTEM get SystemStartupOptions
查看工作组/域
wmic computersystem get domain
更改计算机名abc为freeoa
wmic computersystem where "name='abc'" call rename freeoa
更改工作组google为MyGroup
wmic computersystem where "name='google'" call joindomainorworkgroup "","","MyGroup",1
9.CPU - CPU 管理
查看cpu型号
wmic cpu get name
10.DATAFILE - DataFile 管理
查找e盘下test目录(不包括子目录)下的cc.cmd文件
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" list
查找e盘下所有目录和子目录下的cc.cmd文件,且文件大小大于1K
wmic datafile where "drive='e:' and FileName='cc' and Extension='cmd' and FileSize>'1000'" list
删除e盘下文件大小大于10M的.cmd文件
wmic datafile where "drive='e:' and Extension='cmd' and FileSize>'10000000'" call delete
删除e盘下test目录(不包括子目录)下的非.cmd文件
wmic datafile where "drive='e:' and Extension<>'cmd' and path='test'" call delete
复制e盘下test目录(不包括子目录)下的cc.cmd文件到e:,并改名为aa.bat
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" call copy "e:\aa.bat"
改名c:\hello.txt为c:\test.txt
wmic datafile "c:\\hello.txt" call rename c:\test.txt
查找h盘下目录含有test,文件名含有perl,后缀为txt的文件
wmic datafile where "drive='h:' and extension='txt' and path like '%\\test\\%' and filename like '%perl%'" get name
11.DESKTOPMONITOR - 监视器管理
获取屏幕分辨率
wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
DISKDRIVE - 物理磁盘驱动器管理
获取物理磁盘型号大小等
wmic DISKDRIVE get Caption,size,InterfaceType
12.ENVIRONMENT - 系统环境设置管理
获取temp环境变量
wmic ENVIRONMENT where "name='temp'" get UserName,VariableValue
更改path环境变量值,新增e:\tools
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools"
新增系统环境变量home,值为%HOMEDRIVE%%HOMEPATH%
wmic ENVIRONMENT create name="home",username="<system>",VariableValue="%HOMEDRIVE%%HOMEPATH%"
删除home环境变量
wmic ENVIRONMENT where "name='home'" delete
13.FSDIR - 文件目录系统项目管理
查找e盘下名为test的目录
wmic FSDIR where "drive='e:' and filename='test'" list
删除e:\test目录下除过目录abc的所有目录
wmic FSDIR where "drive='e:' and path='\\test\\' and filename<>'abc'" call delete
删除c:\good文件夹
wmic fsdir "c:\\good" call delete
重命名c:\good文件夹为abb
wmic fsdir "c:\\good" rename "c:\abb"
14.LOGICALDISK - 本地储存设备管理
获取硬盘系统格式、总大小、可用空间等
wmic LOGICALDISK get name,Description,filesystem,size,freespace
15.NIC - 网络界面控制器 (NIC) 管理
16.OS - 已安装的操作系统管理
设置系统时间
wmic os where(primary=1) call setdatetime 20070731144642.555555+480
17.PAGEFILESET - 页面文件设置管理
更改当前页面文件初始大小和最大值
wmic PAGEFILESET set InitialSize="512",MaximumSize="512"
页面文件设置到d:\下执行下面两条命令
wmic pagefileset create name='d:\pagefile.sys',initialsize=512,maximumsize=1024
wmic pagefileset where"name='c:\\pagefile.sys'" delete
18.PROCESS - 进程管理
列出进程的核心信息,类似任务管理器
wmic process list brief
结束svchost.exe进程,路径为非C:\WINDOWS\system32\svchost.exe的
wmic process where "name='svchost.exe' and ExecutablePath<>'C:\\WINDOWS\\system32\\svchost.exe'" call Terminate
新建notepad进程
wmic process call create notepad
19.PRODUCT - 安装包任务管理
安装包在C:\WINDOWS\Installer目录下
卸载.msi安装包
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Uninstall
修复.msi安装包
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Reinstall
20.SERVICE - 服务程序管理
运行spooler服务
wmic SERVICE where name="Spooler" call startservice
停止spooler服务
wmic SERVICE where name="Spooler" call stopservice
暂停spooler服务
wmic SERVICE where name="Spooler" call PauseService
更改spooler服务启动类型[auto|Disabled|Manual] 释[自动|禁用|手动]
wmic SERVICE where name="Spooler" set StartMode="auto"
删除服务
wmic SERVICE where name="test123" call delete
21.SHARE - 共享资源管理
删除共享
wmic SHARE where name="e$" call delete
添加共享
WMIC SHARE CALL Create "","test","3","TestShareName","","c:\test",0
22.SOUNDDEV - 声音设备管理
wmic SOUNDDEV list
STARTUP - 用户登录到计算机系统时自动运行命令的管理,查看msconfig中的启动选项
wmic STARTUP list
23.SYSDRIVER - 基本服务的系统驱动程序管理
wmic SYSDRIVER list
24.USERACCOUNT - 用户帐户管理
更改用户administrator全名为admin
wmic USERACCOUNT where name="Administrator" set FullName="admin"
更改用户名admin为admin00
wmic useraccount where "name='admin" call Rename admin00
25.获取补丁信息
查看当前系统打了哪些补丁
/node:legacyhost qfe get hotfixid
26.查看CPU当前的速度
cpu当前的速度
wmic cpu get CurrentClockSpeed
27.远程计算机的远程桌面连接
WMIC命令开启远程计算机的远程桌面连接
执行wmic /node:192.168.1.2 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
具体格式:
wmic /node:"[full machine name]" /USER:"[domain]\[username]"
PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
实例summary
wmic 获取进程名称以及可执行路径:
wmic process get name,executablepath
wmic 删除指定进程(根据进程名称):
wmic process where name="qq.exe" call terminate
或者用
wmic process where name="qq.exe" delete
wmic 删除指定进程(根据进程PID):
wmic process where pid="123" delete
wmic 创建新进程
wmic process call create "C:\Program Files\Tencent\QQ\QQ.exe"
在远程机器上创建新进程:
wmic /node:192.168.2.131 /user:administrator /password:123456 process call create cmd.exe
关闭本地计算机
wmic process call create shutdown.exe
重启远程计算机
wmic /node:192.168.1.10/user:administrator /password:123456 process call create "shutdown.exe -r -f -m"
更改计算机名称
wmic computersystem where "caption='%ComputerName%'" call rename newcomputername
更改帐户名
wmic USERACCOUNT where "name='%UserName%'" call rename newUserName
wmic 结束可疑进程(根据进程的启动路径)
wmic process where "name='explorer.exe' and executablepath<>'%SystemDrive%\\windows\\explorer.exe'" delete
wmic 获取物理内存
wmic memlogical get TotalPhysicalMemory|find /i /v "t"
wmic 获取文件的创建、访问、修改时间
@echo off
for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="c:\\windows\\system32\\notepad.exe" get CreationDate^,LastAccessed^,LastModified') do (
set a=%%a
set b=%%b
set c=%%c
echo 文件: c:\windows\system32\notepad.exe
echo.
echo 创建时间: %a:~0,4% 年 %a:~4,2% 月 %a:~6,2% 日 %a:~8,2% 时 %a:~10,2% 分 %a:~12,2% 秒
echo 最后访问: %b:~0,4% 年 %b:~4,2% 月 %b:~6,2% 日 %b:~8,2% 时 %b:~10,2% 分 %b:~12,2% 秒
echo 最后修改: %c:~0,4% 年 %c:~4,2% 月 %c:~6,2% 日 %c:~8,2% 时 %c:~10,2% 分 %c:~12,2% 秒
)
echo.
pause
wmic 全盘搜索某文件并获取该文件所在目录
for /f "skip=1 tokens=1*" %i in ('wmic datafile where "FileName='qq' and extension='exe'" get drive^,path') do (set "qPath=%i%j"&@echo %qPath:~0,-3%)
获取屏幕分辨率 wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
wmic PageFileSet set InitialSize="512",MaximumSize="512"
设置虚拟内存到E盘,并删除C盘下的页面文件,重启计算机后生效
wmic PageFileSet create name="E:\\pagefile.sys",InitialSize="1024",MaximumSize="1024"
wmic PageFileSet where "name='C:\\pagefile.sys'" delete
获得进程当前占用的内存和最大占用内存的大小:
wmic process where caption='filename.exe' get WorkingSetSize,PeakWorkingSetSize
以KB为单位显示
@echo off
for /f "skip=1 tokens=1-2 delims= " %%a in ('wmic process where caption^="conime.exe" get WorkingSetSize^,PeakWorkingSetSize') do (
set /a m=%%a/1024
set /a mm=%%b/1024
echo 进程conime.exe现在占用内存:%m%K;最高占用内存:%mm%K
)
pause
远程打开计算机远程桌面
wmic /node:%pcname% /USER:%pcaccount% PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
WMIC学习小结
在WINDOWS\Help目下,wmic.chm文档是这样解释wmi的:Windows Management Instrumentation (WMI) 是“基于 Web 的企业管理倡议 (WBEM)”(这是一个旨在建立在企业网络上访问和共享管理信息的标准的工业倡议)的 Microsoft 的实现。有关 WBEM 的详细信息,请访问 WBEM。XOXWMI 为公用信息模型 (CIM)(该数据模型描述存在于管理环境中的对象)提供完整的支持。WMI 包括对象储备库和 CIM 对象管理器,其中对象储备库是包含对象定义的数据库,对象管理器负责处理储备库中对象的收集和操作并从 WMI 提供程序 (WMI provider) 收集信息。WMI 提供程序 (WMI provider) 在 WMI 和操作系统、应用程序以及其他系统的组件之间充当中介。例如,注册表提供程序从注册表中提供信息,而 SNMP 提供程序则从 SNMP 设备中提供数据和事件。提供程序提供关于其组件的信息,也可能提供一些方法,这些方法可以操作可设置的组件、属性,或者操作可能警告您在组件中要发生更改的事件。Windows Management Instrumentation 命令行 (WMIC) 向您提供了简单的 Windows Management Instrumentation (WMI) 命令行界面,这样即可利用 WMI 来管理运行 Windows 的计算机。WMIC 与现有命令行程序和实用程序命令相互操作,且很容易通过脚本或其他面向管理的应用程序来扩展 WMIC。
以上的这些说法太专业了,通俗一点讲就是wmic.exe是一个命令行程序,可以用它这个接口来实现在命令行下直接管理计算机软硬件等方方面面的操作,相当于批处理的api了。
1、wmic的基本命令格式简析
经常看网上的相关资料的话,读者可能会对wmic有一个基本而又模糊的认识,其实简单总结一下,命令格式就是“wmic+全局开关+别名+wql语句+动词+副词(或者说是动词的参数)+动词开关”而已了。这个命令格式可以根据需要来写全或者写部份格式,这里依次对格式的每个名称按自己的理解来解释一下,不过肯定完全不符合微软专家的定义,只是让大家弄懂它们而已。
wmic就是wmic.exe,位于windows目录底下,是一个命令行程序。WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mode),经常使用Netsh命令行的读者应该非常熟悉这两种模式。
交互模式。如果你在命令提示符下或通过"运行"菜单只输入WMIC,都将进入WMIC的交互模式,每当一个命令执行完毕后,系统还会返回到WMIC提示符下,如"Root\cli",交互模式通常在需要执行多个WMIC指令时使用。交互模式有时还会对一些敏感的操作要求确认,比如删除操作,最大限度地防止用户操作出现失误。
非交互模式。非交互模式是指将WMIC指令直接作为WMIC的参数放在WMIC后面,当指令执行完毕后再返回到普通的命令提示符下,而不是进入到WMIC上下文环境中。WMIC的非交互模式主要用于批处理或者其他一些脚本文件中,在本文中一律用●非交互模式●示例。
开关有以下的全局开关,打入wmic.exe /?可以看到的(这里先不讨论每个开关的具体意思,具体用法看示例):
/NAMESPACE 别名使用的名称空间路径。
/ROLE 包含此别名定义的角色路径。
/NODE 别名使用的服务器。
/IMPLEVEL 客户模拟级别。
/AUTHLEVEL 客户身份验证级别。
/LOCALE 客户应用的语言识别符。
/PRIVILEGES 启用或禁用所有特权。
/TRACE 将调试信息输出到 stderr。
/RECORD 将所有输入命令和输出写入日志。
/INTERACTIVE 设置或重设交互模式。
/FAILFAST 设置或重置 FailFast 模式。
/USER 会话期间使用的用户。
/PASSWORD 用于会话登录的密码。
/OUTPUT 为输出重新定向指定模式。
/APPEND 为输出重新定向指定模式。
/AGGREGATE 设置或重置集合模式。
/AUTHORITY Specifies the <authority type> for the connection.
/?[:<BRIEF|FULL>] Usage information.
至于别名就是给主板、服务、系统、进程啦这些和计算机相关的东东起了个英文名,在wmic.exe /?命令行下也可以看到。
wql语句和我们平常用的注入时的sql语句的语法几乎是一模一样,甚至更简单。一般是where name="xxx" and 之类的,不过有时候要把name=“xxx"这样的格式换成"name='xxx'"或者是where(name='xxx')这样,反正正常情况下不行的话就换个写法。
动词呢,就那么简单几个ASSOC、CALL、CREATE、DELETE、GET、LIST、SET,从英文名字上应当可以看出它们是用来干什么的。
至于副词(动词的参数),就是得到用动词+它的参数得到对象的属性。像属于list动词的副词,就是显示个什么样的呀,例如显示详细状态或简要状态。
动词开关就好比显示个横表格式的或者显示个竖表格式的或者输出个什么样格式的文件,或者是几秒来重复显示信息等等,有的动词并没有开关。
2、一步一步来完成我们的wmic命令行
wmic里有个别名是logicaldisk,就是对磁盘进行管理。我们先按照最简单的格式来写,在cmd命令行下输入:
wmic logicaldisk list
(wmic.exe+别名+list动词),稍等一会儿屏幕上会出现本地硬盘的各式各样的数据,看上去杂乱无章。这样子太不方便看了,来改写一下,改成:
wmic logicaldisk list brief
在list动词后加个brief参数,也就是brief副词,显示的就会很整齐,效果如下:
DeviceID brief FreeSpace ProviderName Size VolumeName
A: 2
C: 3 2925694976 6805409792 WINXP
D: 3 1117487104 1759936512 WORK
E: 5
大家可能注意到了上面命令行中有动词list和副词brief。list动词决定显示的信息格式与范围,它有Brief、Full、Instance、Status、System、Writeable等多个参数(副词),full只是它的一个参数,也是list的缺省参数,表示显示所有的信息。其他几个参数顾名思义,如Brief表示只显示摘要信息,Instance表示只显示对象实例,Status表示显示对象状态,Writeable表示只显示该对象的可写入的属性信息等。
再来把语句扩展一下,在上边磁盘返回信息当中的DeviceID的值为3时表示是本地硬盘的分区,如果是5为光区,为2则是移动磁盘了。我们把语句改一下,加入wql语句,只显示本地磁盘。语句改成:
wmic logicaldisk where "DriveType=3" list brief
或者是
wmic logicaldisk where(DriveType=3) list brief
显示效果都是下边的样子:
DeviceID DriveType FreeSpace ProviderName Size VolumeName
C: 3 2925686784 6805409792 WINXP
D: 3 1117487104 1759936512 WORK
但是上边的格式显示的还是不太满意,ProviderName不知是个什么东东也给显示出来了,我们只想要我们想要的东东,像卷标 VolumeName之类的我们也不要它,再把语句改一下,换个get动词,命令改为
wmic logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem
返回信息如下:
DeviceID,Size,FreeSpace,Description,FileSystem
Description DeviceID FileSystem FreeSpace Size
本地固定磁盘 C: FAT32 2925686784 6805409792
本地固定磁盘 D: FAT 1117487104 1759936512
至于get动词后面跟的参数可以先用list来查看一下就明白了,这回可以得到想要的结果了。不过命令里的开关还没用到呢,加几个全局开关吧。先来加个/OUTPUT吧,让它把显示信息输出到一个文件中,命令如下:
wmic /output:a.html logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem
这样一来刚才屏幕上返回的信息就到当前目录的a.htm文件里了。但是a.htm打开看看后,根本就像一个记事本一样,没有任何样式,看起来也不美观,给它指定一个样式,就要用到format这个动词开关了,命令改为:
wmic /output:a.html logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
这样一来a.htm里就花花绿绿的用表格显示我们本地磁盘的信息了。也许要问htable是什么,其实这是一个文件,想要上边的a.html什么格式,就可以在C:\WINDOWS\system32\wbem这里找一个你想要的格式的文件名,具体有以下一些文件:
CSV
HFORM
HMOF
HTABLE
HXML
LIST
TABLE
VALUE
htable-sortby
htable-sortby.xsl
texttablewsys
texttablewsys.xsl
wmiclimofformat
wmiclimofformat.xsl
wmiclitableformat
wmiclitableformat.xsl
wmiclitableformatnosys
wmiclitableformatnosys.xsl
wmiclivalueformat
wmiclivalueformat.xsl
还有人也许要问了,只想显示c:盘的,不要其它盘的可以做到吗?当然可以,这就要用到wql语句的name这个变量了。可以先用
wmic logicaldisk list Instance
看到name的具体名字,然后更改上边的wql语句。改成:
wmic /output:a.html logicaldisk where "name='c:'" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
或者
wmic /output:a.html logicaldisk where(name='c:') get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
就可以了。值得注意的是在DriveType=3的没有用到单引号是因为3是数字型的,而c:是字符型的所以要用单引号或双引号。不过要注意的是如果在wql语句中用到了and,请用()或者""把语句引起来。
这样最后的语句基本符合了上面说的wmic的命令格式是“wmic+开关+别名+wql语名+动词+副词(或者说是动词的参数)+动词开关”。不过wmic可不只能对本机操作,还可以对远程机器进行操作,再来加三个全局开关,让我们的这条命令对远程格式进行操作,命令就是:
wmic /node:"192.168.8.100" /user:"administrator" /password:"lcx" /output:a.html logicaldisk where "name='c:'" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
其中node开关表示对哪台机器进行访问,user和password当然是远程机器的用户名和密码了,这个命令有了以上的讲解,大家应当一目了然了吧。到现在为止的动词只用到了get和list,再加一个set来改变c:盘的卷标。命令如下:
WMIC logicaldisk where "name='c:'" set VolumeName ="lcx"
这样就更进一步清楚了这个格式的用法。写了这么多字,也许要问到wmic最有用的开关是什么,当然是"?"了,如果那个命令不会用,可以用wmic /? 、WMIC logicaldisk /?、WMIC logicaldisk list /?、WMIC logicaldisk set /?这样仪次来查询用法。
3、小结
查看电脑(显示)系统属性:dxdiag
wmic是很强大的,像开win 2k3的3389一句话就可以做到:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
补充:Windows WMIC命令详解
rem 查看系统信息
systeminfo
rem 查看BIOS详细信息
wmic bios list brief
rem 查看CPU详细信息
wmic cpu
rem 查看cpu型号
wmic cpu list brief
rem 查看内存详细信息
wmic memorychip
rem 查看内存条数
wmic memorychip list brief
rem 查看物理内存
wmic memphysical list brief
rem 查看逻辑内存
wmic memlogical list brief
rem 查看缓存内存
wmic memcache list brief
rem 查看虚拟内存
wmic pagefile list brief
rem 查看网卡
wmic nic list brief
rem 查看网络协议
wmic netprotocal list brief
rem 查看磁盘详细信息
wmic diskdrive
rem 查看盘符格式大小以及剩余空间
wmic logicaldisk
rem 查看对应盘符的大小以及剩余空间
fsutil volume diskfree 盘符号(如C:)
【例】将当前系统BIOS,CPU,主板等信息输出到一个HTML网页文件,命令如下:
::得到系统信息.bat,运行bat文件即可
::系统信息输出到HTML文件
::wmic [系统参数名] list [brief|full] /format:hform >|>> [文件名]
wmic bios list brief /format:hform > PCinfo.html
wmic baseboard list brief /format:hform >>PCinfo.html
wmic cpu list full /format:hform >>PCinfo.html
wmic os list full /format:hform >>PCinfo.html
wmic computersystem list brief /format:hform >>PCinfo.html
wmic diskdrive list full /format:hform >>PCinfo.html
wmic memlogical list full /format:hform >>PCinfo.html
更多信息请参考:PowerShellV7.4 第 7 章 - 使用 WMI
WMI预装在Windows 2000及更新的微软操作系统中,适用于Windows 9x、NT等操作系统,并允许使用脚本语言(例如VBScript或Windows PowerShell)来本地或远程管理Microsoft Windows个人电脑和服务器。对于愿意开发一个或多个WMI提供者的人来说,WMI提供了许多“开箱即用”的特性。提供了从命令行接口和批处理脚本执行系统管理的支持。
微软还为命令提示符提供了一个名为“Windows Management Instrumentation Command-line”(WMIC)的接口来调用 WMI。
WMI通过提供统一的模型来补充其他标准,该模型表示可以通过一种常用方式来访问受管环境的任何来源的管理数据。其规范目的是定义一系列独立于环境的专有规范,并允许管理信息在管理应用程序之间共享。此规范规定了企业管理标准以及现有的适用于Windows的相关技术,例如桌面管理接口(DMI)和简单网络管理协议(SNMP)。自从首个面向外部提供的WMI(Windows NT 4.0 SP4)发布以来,微软一直向Windows WMI新增功能:
1.在Windows NT 4.0中,安装WMI后,微软提供了大约15个可用的WMI资料提供者
2.在Windows 2000发布时,微软已发布29个WMI资料提供者作为操作系统预装的一部分
3.在Windows Server 2003发布时,微软在平台上包含80多个WMI资料提供者
4.Windows Vista中包含13个新的WMI资料提供者,总数量接近100个
5.Windows Server 2008包含更多资料提供者,例如用于IIS 7、PowerShell和虚拟化的资料提供者
即使微软从未明确承诺,有许多客户将资料提供者数量的增长解释为WMI已经成为微软Windows一项“无处不在”管理层的标志。
由于Windows中通过WMI管理数据不断增加,信息技术系统管理领域的人员开始开发基于WMI的脚本和自动化程序。除了脚本需求外,大多数领先的管理软件(包括MOM、SCCM、ADS、HP OpenView for Windows(HPOV)、BMC软件公司、CA科技)都提供WMI功能,亦允许通过各种用户接口使用或提供WMI信息。这使得无法在WMI上编程的系统管理员和操作员无需预先了解也能享受到WMI的优势。
官宣WMIC正式退出
微软宣布WMIC工具将在Win11 25H2 后被移除,建议改用 PowerShell。WMIC 是 Windows 此前长期内置的命令行工具,用户可通过文本命令与 Windows Management Instrumentation(WMI)系统交互,用于执行系统管理和诊断操作。微软于2025年9月在 Microsoft 365 消息中心确认,随着 Windows 11 25H2 及更高版本的发布,WMIC 工具将被彻底移除。之前在Windows-10 21H1和Windows-11 22H2的发布说明中就已经将WMIC标记为过时。
微软建议 IT 管理员改用 PowerShell 或其他现代化工具来执行 WMI、脚本及相关任务,因为未来的 Windows 版本将不再默认包含 WMIC。使用 PowerShell 和其他现代工具替代此前依赖 WMIC 的任务。可考虑的编程替代方式包括 WMI 的 COM API、.NET 库或脚本语言。一旦确定替代方案,请更新内部 IT 文档和流程。
本次变更仅影响过时的 WMIC 组件,Windows 管理规范(WMI)核心功能不受影响。2025年7月底,微软还专门介绍了在淘汰 WMIC 之后,Win11 用户和管理员如何继续使用该命令行界面工具。
WMIC:WMI 命令行实用工具
与现有的 shell 和实用工具命令兼容。其有一个能够分析、解释和执行从命令行接收的别名(Alias)的引擎,它是一个可执行文件。使用WMIC实现如下的管理任务:
1.本地计算机管理
2.远程单台或多台计算机管理
3.使用远程会话的进行管理(如Telnet)
4.使用管理脚本的自动管理
wmic /?
命令 例子 说明
/? 或 -? 显示所有全局开关和别名的语法
/ /? /user /? 显示指定全局开关的信息
/? class /? 显示某个命令的信息
/? memcache /? 显示某个别名的信息
/? temperature get /? 显示别名与动词组合的信息
/?:Full irq get /?:Full 显示动词的帮助信息
[global switches] <command>
以下全局开关可用:
/NAMESPACE:别名操作的命名空间的路径。
/ROLE:包含别名定义的角色的路径。
/NODE:别名将对其进行操作的服务器。
/IMPLEVEL:客户端模拟级别。
/AUTHLEVEL:客户端身份验证级别。
/LOCALE:客户端应使用的语言ID。
/PRIVILEGES:启用或禁用所有权限。
/TRACE:将调试信息输出到stderr。
/RECORD:记录所有输入命令和输出。
/INTERACTIVE:设置或重置交互模式。
/FAILFAST:设置或重置FailFast模式。
/USER:在会话期间使用的用户。
/PASSWORD:用于会话登录的密码。
/OUTPUT:指定输出重定向的模式。
/APPEND:指定输出重定向的模式。
/AGGREGATE:设置或重置聚合模式。
/AUTHORITY:指定连接的<authority type>。
/?[:<BRIEF | FULL>]:使用信息。
有关特定全局开关的更多信息,请键入:switch-name /?
当前角色中提供了以下别名/es:
ALIAS - 访问本地系统上可用的别名
BASEBOARD - 基板(也称为主板或系统板)管理。
BIOS - 基本输入/输出服务(BIOS)管理。
BOOTCONFIG - 引导配置管理。
CDROM - CD-ROM管理。
COMPUTERSYSTEM - 计算机系统管理。
CPU - CPU管理。
CSPRODUCT - 来自SMBIOS的计算机系统产品信息。
DATAFILE - DataFile管理。
DCOMAPP - DCOM应用程序管理。
DESKTOP - 用户的桌面管理。
DESKTOPMONITOR - 桌面监视器管理。
DEVICEMEMORYADDRESS - 设备内存地址管理。
DISKDRIVE - 物理磁盘驱动器管理。
DISKQUOTA - NTFS卷的磁盘空间使用情况。
DMACHANNEL - 直接内存访问(DMA)通道管理。
ENVIRONMENT - 系统环境设置管理。
FSDIR - 文件系统目录条目管理。
GROUP - 集团账户管理。
IDECONTROLLER - IDE控制器管理。
IRQ - 中断请求线(IRQ)管理。
JOB - 提供对使用计划服务计划的作业的访问。
LOADORDER - 管理定义执行依赖性的系统服务。
LOGICALDISK - 本地存储设备管理。
LOGON - 登录会话。
MEMCACHE - 缓存内存管理。
MEMORYCHIP - 存储芯片信息。
MEMPHYSICAL - 计算机系统的物理内存管理。
NETCLIENT - 网络客户端管理。
NETLOGIN - (特定用户的)网络登录信息管理。
NETPROTOCOL - 协议(及其网络特征)管理。
NETUSE - 主动网络连接管理。
NIC - 网络接口控制器(NIC)管理。
NICCONFIG - 网络适配器管理。
NTDOMAIN - NT域管理。
NTEVENT - NT事件日志中的条目。
NTEVENTLOG - NT事件日志文件管理。
ONBOARDDEVICE - 管理主板(系统板)内置的通用适配器设备。
OS - 已安装的操作系统/管理。
PAGEFILE - 虚拟内存文件交换管理。
PAGEFILESET - 页面文件设置管理。
PARTITION - 管理物理磁盘的分区区域。
PORT - I / O端口管理。
PORTCONNECTOR - 物理连接端口管理。
PRINTER - 打印机设备管理。
PRINTERCONFIG - 打印机设备配置管理。
PRINTJOB - 打印作业管理。
PROCESS - 进程管理。
PRODUCT - 安装包任务管理。
QFE - 快速修复工程。
QUOTASETTING - 设置卷上磁盘配额的信息。
RDACCOUNT - 远程桌面连接权限管理。
RDNIC - 特定网络适配器上的远程桌面连接管理。
RDPERMISSIONS - 特定远程桌面连接的权限。
RDTOGGLE - 远程打开或关闭远程桌面监听器。
RECOVEROS - 操作系统出现故障时将从内存中收集的信息。
REGISTRY - 计算机系统注册表管理.
SCSICONTROLLER - SCSI 控制器管理。
SERVER - 服务器信息管理。
SERVICE - 服务程序管理。
SHARE - 共享资源管理。
SOFTWAREELEMENT - 安装在系统上的软件产品元素的管理。
SOFTWAREFEATURE - SoftwareElement 的软件产品组件的管理。
SOUNDDEV - 声音设备管理。
STARTUP - 用户登录到计算机系统时自动运行命令的管理。
SYSACCOUNT - 系统帐户管理。
SYSDRIVER - 基本服务的系统驱动程序管理。
SYSTEMENCLOSURE - 物理系统封闭管理。
SYSTEMSLOT - 包括端口、插口、附件和主要连接点的物理连接点管理。
TAPEDRIVE - 磁带驱动器管理。
TEMPERATURE - 温度感应器的数据管理 (电子温度表)。
TIMEZONE - 时间区域数据管理。
UPS - 不可中断的电源供应 (UPS) 管理。
USERACCOUNT - 用户帐户管理。
VOLTAGE - 电压感应器 (电子电量计) 数据管理。
VOLUMEQUOTASETTING - 将某一磁盘卷与磁盘配额设置关联。
WMISET - WMI 服务操作参数管理。
有关CLASS/PATH/CONTEXT的更多信息,请键入:(CLASS | PATH | CONTEXT)/?
WMIC命令使用实例
执行“wmic”命令启动WMIC命令行环境。这个命令可以在XP或 .NET Server的标准命令行解释器(cmd.exe)、Telnet会话或“运行”对话框中执行。这些启动方法可以在本地使用,也可以通过.NETServer终端服务会话使用。
第一次执行WMIC命令时,Windows首先要安装WMIC(win7中自带wmic命令),然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式执行。其运行方式可以有两种法:
1、在cmd命令行键入wimic后出现wmic:root\cli>时你就可以输入命令了,如输入process显示所有的进程。可以输入用wimic /?来显示帮助。exit是退出交互模式。具体帮助用法如下:
命令行帮助:
命令 例子 说明
如要查看process命令的帮助,键入:process/?后显示如下:
wmic:root\cli>process /?
PROCESS - 进程管理。
提示: BNF 的别名用法。
(<alias> [WMIObject] | <alias> [<path where>] | [<alias>] <path where>) [<verb clause>].
用法:
PROCESS ASSOC [<format specifier>]
PROCESS CALL <method name> [<actual param list>]
PROCESS CREATE <assign list>
PROCESS DELETE
PROCESS GET [<property list>] [<get switches>]
PROCESS LIST [<list format>] [<list switches>]
2、用wmic 后面直接跟命令运行,如wmic process 就显示了所有的进程了。这两种运行方法就是:交互模式(Interactive mode)和非交互模式(Non-Interactive mode)。下面通过一些实例来说明用法:
1.显示进程的详细信息
输入 process where name="freeoa.exe" list full
将显示出freeoa.exe进程所有的信息。
2.停止、暂停和运行服务功能
启动服务startservice,
停止服务stopservice,
暂停服务pauseservice,
Service where caption="windows time" call stopservice ------停止服务
Service where caption="windows time" call startservice ------启动服务
Service where name="w32time" call stopservice ------停止服务
注意name和caption的区别:
caption 显示服务名,name:服务名称。
如:telnet服务的显示名称是telnet,服务名称.是tlntsvr。
还有Windows Time服务的名称是w32time,显示名称是"Windows Time"要用引号引起来,主要是有一个空格。
具体看一下:输入Service where caption="windows time" call startservice后有一个确认输入y就可以了,返回ReturnValue = 0;表示成功。
wmic:root\cli>Service where caption="windows time" call startservice
执行 (\\CHINA-46B1E8590\ROOT\CIMV2:Win32_Service.Name="W32Time")->startservice()
方法执行成功。输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};
3.显示出BIOS信息
wmic bios list full
大家可能注意到了上面命令行中还有两个参数list和full。list决定显示的信息格式与范围,它有Brief、Full、Instance、 Status、System、Writeable等多个参数,full只是它的一个参数,也是list的缺省参数,表示显示所有的信息。其他几个参数顾名思义,如Brief表示只显示摘要信息,Instance表示只显示对象实例,Status表示显示对象状态,Writeable表示只显示该对象的可写入的属性信息等。
4.停止进程的操作
例如,执行下面的命令将关闭正在运行的QQ.exe:
例1、wmic process where name='QQ.exe' call terminate
命令运行结束后,WMIC命令行提示出如下结果:
C:\>wmic process where name='QQ.exe' call terminate
执行 (\\FreeeOA.Net\ROOT\CIMV2:Win32_Process.Handle="728")->terminate()
方法执行成功。输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};
例2、wmic process where name="qq.exe" delete
命令运行结束后,WMIC命令行提示出如下结果:
C:\>wmic process where name="qq.exe" delete
删除范例 \\FreeeOA.Net\ROOT\CIMV2:Win32_Process.Handle="2820"
范例删除成功。
列出所有的进程 : wmic process
5.连接远程电脑
连接远程的电脑,不过好象对要开一些相应的服务:
wmic /node:"192.168.203.131" /password:"" /user:"administrator"
6. BIOS - 基本输入/输出服务 (BIOS) 管理
查看bios版本型号
wmic bios get Manufacturer,Name
7.WMIC设置IP地址
配置或更新IP地址:
wmic nicconfig where index=0 call enablestatic("192.168.1.5"), ("255.255.255.0") ;index=0说明是配置网络接口1。
配置网关(默认路由):
wmic nicconfig where index=0 call setgateways("192.168.1.1"),(1)
8.COMPUTERSYSTEM - 计算机系统管理
查看系统启动选项,boot的内容
wmic COMPUTERSYSTEM get SystemStartupOptions
查看工作组/域
wmic computersystem get domain
更改计算机名abc为freeoa
wmic computersystem where "name='abc'" call rename freeoa
更改工作组google为MyGroup
wmic computersystem where "name='google'" call joindomainorworkgroup "","","MyGroup",1
9.CPU - CPU 管理
查看cpu型号
wmic cpu get name
10.DATAFILE - DataFile 管理
查找e盘下test目录(不包括子目录)下的cc.cmd文件
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" list
查找e盘下所有目录和子目录下的cc.cmd文件,且文件大小大于1K
wmic datafile where "drive='e:' and FileName='cc' and Extension='cmd' and FileSize>'1000'" list
删除e盘下文件大小大于10M的.cmd文件
wmic datafile where "drive='e:' and Extension='cmd' and FileSize>'10000000'" call delete
删除e盘下test目录(不包括子目录)下的非.cmd文件
wmic datafile where "drive='e:' and Extension<>'cmd' and path='test'" call delete
复制e盘下test目录(不包括子目录)下的cc.cmd文件到e:,并改名为aa.bat
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" call copy "e:\aa.bat"
改名c:\hello.txt为c:\test.txt
wmic datafile "c:\\hello.txt" call rename c:\test.txt
查找h盘下目录含有test,文件名含有perl,后缀为txt的文件
wmic datafile where "drive='h:' and extension='txt' and path like '%\\test\\%' and filename like '%perl%'" get name
11.DESKTOPMONITOR - 监视器管理
获取屏幕分辨率
wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
DISKDRIVE - 物理磁盘驱动器管理
获取物理磁盘型号大小等
wmic DISKDRIVE get Caption,size,InterfaceType
12.ENVIRONMENT - 系统环境设置管理
获取temp环境变量
wmic ENVIRONMENT where "name='temp'" get UserName,VariableValue
更改path环境变量值,新增e:\tools
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools"
新增系统环境变量home,值为%HOMEDRIVE%%HOMEPATH%
wmic ENVIRONMENT create name="home",username="<system>",VariableValue="%HOMEDRIVE%%HOMEPATH%"
删除home环境变量
wmic ENVIRONMENT where "name='home'" delete
13.FSDIR - 文件目录系统项目管理
查找e盘下名为test的目录
wmic FSDIR where "drive='e:' and filename='test'" list
删除e:\test目录下除过目录abc的所有目录
wmic FSDIR where "drive='e:' and path='\\test\\' and filename<>'abc'" call delete
删除c:\good文件夹
wmic fsdir "c:\\good" call delete
重命名c:\good文件夹为abb
wmic fsdir "c:\\good" rename "c:\abb"
14.LOGICALDISK - 本地储存设备管理
获取硬盘系统格式、总大小、可用空间等
wmic LOGICALDISK get name,Description,filesystem,size,freespace
15.NIC - 网络界面控制器 (NIC) 管理
16.OS - 已安装的操作系统管理
设置系统时间
wmic os where(primary=1) call setdatetime 20070731144642.555555+480
17.PAGEFILESET - 页面文件设置管理
更改当前页面文件初始大小和最大值
wmic PAGEFILESET set InitialSize="512",MaximumSize="512"
页面文件设置到d:\下执行下面两条命令
wmic pagefileset create name='d:\pagefile.sys',initialsize=512,maximumsize=1024
wmic pagefileset where"name='c:\\pagefile.sys'" delete
18.PROCESS - 进程管理
列出进程的核心信息,类似任务管理器
wmic process list brief
结束svchost.exe进程,路径为非C:\WINDOWS\system32\svchost.exe的
wmic process where "name='svchost.exe' and ExecutablePath<>'C:\\WINDOWS\\system32\\svchost.exe'" call Terminate
新建notepad进程
wmic process call create notepad
19.PRODUCT - 安装包任务管理
安装包在C:\WINDOWS\Installer目录下
卸载.msi安装包
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Uninstall
修复.msi安装包
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Reinstall
20.SERVICE - 服务程序管理
运行spooler服务
wmic SERVICE where name="Spooler" call startservice
停止spooler服务
wmic SERVICE where name="Spooler" call stopservice
暂停spooler服务
wmic SERVICE where name="Spooler" call PauseService
更改spooler服务启动类型[auto|Disabled|Manual] 释[自动|禁用|手动]
wmic SERVICE where name="Spooler" set StartMode="auto"
删除服务
wmic SERVICE where name="test123" call delete
21.SHARE - 共享资源管理
删除共享
wmic SHARE where name="e$" call delete
添加共享
WMIC SHARE CALL Create "","test","3","TestShareName","","c:\test",0
22.SOUNDDEV - 声音设备管理
wmic SOUNDDEV list
STARTUP - 用户登录到计算机系统时自动运行命令的管理,查看msconfig中的启动选项
wmic STARTUP list
23.SYSDRIVER - 基本服务的系统驱动程序管理
wmic SYSDRIVER list
24.USERACCOUNT - 用户帐户管理
更改用户administrator全名为admin
wmic USERACCOUNT where name="Administrator" set FullName="admin"
更改用户名admin为admin00
wmic useraccount where "name='admin" call Rename admin00
25.获取补丁信息
查看当前系统打了哪些补丁
/node:legacyhost qfe get hotfixid
26.查看CPU当前的速度
cpu当前的速度
wmic cpu get CurrentClockSpeed
27.远程计算机的远程桌面连接
WMIC命令开启远程计算机的远程桌面连接
执行wmic /node:192.168.1.2 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
具体格式:
wmic /node:"[full machine name]" /USER:"[domain]\[username]"
PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
实例summary
wmic 获取进程名称以及可执行路径:
wmic process get name,executablepath
wmic 删除指定进程(根据进程名称):
wmic process where name="qq.exe" call terminate
或者用
wmic process where name="qq.exe" delete
wmic 删除指定进程(根据进程PID):
wmic process where pid="123" delete
wmic 创建新进程
wmic process call create "C:\Program Files\Tencent\QQ\QQ.exe"
在远程机器上创建新进程:
wmic /node:192.168.2.131 /user:administrator /password:123456 process call create cmd.exe
关闭本地计算机
wmic process call create shutdown.exe
重启远程计算机
wmic /node:192.168.1.10/user:administrator /password:123456 process call create "shutdown.exe -r -f -m"
更改计算机名称
wmic computersystem where "caption='%ComputerName%'" call rename newcomputername
更改帐户名
wmic USERACCOUNT where "name='%UserName%'" call rename newUserName
wmic 结束可疑进程(根据进程的启动路径)
wmic process where "name='explorer.exe' and executablepath<>'%SystemDrive%\\windows\\explorer.exe'" delete
wmic 获取物理内存
wmic memlogical get TotalPhysicalMemory|find /i /v "t"
wmic 获取文件的创建、访问、修改时间
@echo off
for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="c:\\windows\\system32\\notepad.exe" get CreationDate^,LastAccessed^,LastModified') do (
set a=%%a
set b=%%b
set c=%%c
echo 文件: c:\windows\system32\notepad.exe
echo.
echo 创建时间: %a:~0,4% 年 %a:~4,2% 月 %a:~6,2% 日 %a:~8,2% 时 %a:~10,2% 分 %a:~12,2% 秒
echo 最后访问: %b:~0,4% 年 %b:~4,2% 月 %b:~6,2% 日 %b:~8,2% 时 %b:~10,2% 分 %b:~12,2% 秒
echo 最后修改: %c:~0,4% 年 %c:~4,2% 月 %c:~6,2% 日 %c:~8,2% 时 %c:~10,2% 分 %c:~12,2% 秒
)
echo.
pause
wmic 全盘搜索某文件并获取该文件所在目录
for /f "skip=1 tokens=1*" %i in ('wmic datafile where "FileName='qq' and extension='exe'" get drive^,path') do (set "qPath=%i%j"&@echo %qPath:~0,-3%)
获取屏幕分辨率 wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
wmic PageFileSet set InitialSize="512",MaximumSize="512"
设置虚拟内存到E盘,并删除C盘下的页面文件,重启计算机后生效
wmic PageFileSet create name="E:\\pagefile.sys",InitialSize="1024",MaximumSize="1024"
wmic PageFileSet where "name='C:\\pagefile.sys'" delete
获得进程当前占用的内存和最大占用内存的大小:
wmic process where caption='filename.exe' get WorkingSetSize,PeakWorkingSetSize
以KB为单位显示
@echo off
for /f "skip=1 tokens=1-2 delims= " %%a in ('wmic process where caption^="conime.exe" get WorkingSetSize^,PeakWorkingSetSize') do (
set /a m=%%a/1024
set /a mm=%%b/1024
echo 进程conime.exe现在占用内存:%m%K;最高占用内存:%mm%K
)
pause
远程打开计算机远程桌面
wmic /node:%pcname% /USER:%pcaccount% PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
WMIC学习小结
在WINDOWS\Help目下,wmic.chm文档是这样解释wmi的:Windows Management Instrumentation (WMI) 是“基于 Web 的企业管理倡议 (WBEM)”(这是一个旨在建立在企业网络上访问和共享管理信息的标准的工业倡议)的 Microsoft 的实现。有关 WBEM 的详细信息,请访问 WBEM。XOXWMI 为公用信息模型 (CIM)(该数据模型描述存在于管理环境中的对象)提供完整的支持。WMI 包括对象储备库和 CIM 对象管理器,其中对象储备库是包含对象定义的数据库,对象管理器负责处理储备库中对象的收集和操作并从 WMI 提供程序 (WMI provider) 收集信息。WMI 提供程序 (WMI provider) 在 WMI 和操作系统、应用程序以及其他系统的组件之间充当中介。例如,注册表提供程序从注册表中提供信息,而 SNMP 提供程序则从 SNMP 设备中提供数据和事件。提供程序提供关于其组件的信息,也可能提供一些方法,这些方法可以操作可设置的组件、属性,或者操作可能警告您在组件中要发生更改的事件。Windows Management Instrumentation 命令行 (WMIC) 向您提供了简单的 Windows Management Instrumentation (WMI) 命令行界面,这样即可利用 WMI 来管理运行 Windows 的计算机。WMIC 与现有命令行程序和实用程序命令相互操作,且很容易通过脚本或其他面向管理的应用程序来扩展 WMIC。
以上的这些说法太专业了,通俗一点讲就是wmic.exe是一个命令行程序,可以用它这个接口来实现在命令行下直接管理计算机软硬件等方方面面的操作,相当于批处理的api了。
1、wmic的基本命令格式简析
经常看网上的相关资料的话,读者可能会对wmic有一个基本而又模糊的认识,其实简单总结一下,命令格式就是“wmic+全局开关+别名+wql语句+动词+副词(或者说是动词的参数)+动词开关”而已了。这个命令格式可以根据需要来写全或者写部份格式,这里依次对格式的每个名称按自己的理解来解释一下,不过肯定完全不符合微软专家的定义,只是让大家弄懂它们而已。
wmic就是wmic.exe,位于windows目录底下,是一个命令行程序。WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mode),经常使用Netsh命令行的读者应该非常熟悉这两种模式。
交互模式。如果你在命令提示符下或通过"运行"菜单只输入WMIC,都将进入WMIC的交互模式,每当一个命令执行完毕后,系统还会返回到WMIC提示符下,如"Root\cli",交互模式通常在需要执行多个WMIC指令时使用。交互模式有时还会对一些敏感的操作要求确认,比如删除操作,最大限度地防止用户操作出现失误。
非交互模式。非交互模式是指将WMIC指令直接作为WMIC的参数放在WMIC后面,当指令执行完毕后再返回到普通的命令提示符下,而不是进入到WMIC上下文环境中。WMIC的非交互模式主要用于批处理或者其他一些脚本文件中,在本文中一律用●非交互模式●示例。
开关有以下的全局开关,打入wmic.exe /?可以看到的(这里先不讨论每个开关的具体意思,具体用法看示例):
/NAMESPACE 别名使用的名称空间路径。
/ROLE 包含此别名定义的角色路径。
/NODE 别名使用的服务器。
/IMPLEVEL 客户模拟级别。
/AUTHLEVEL 客户身份验证级别。
/LOCALE 客户应用的语言识别符。
/PRIVILEGES 启用或禁用所有特权。
/TRACE 将调试信息输出到 stderr。
/RECORD 将所有输入命令和输出写入日志。
/INTERACTIVE 设置或重设交互模式。
/FAILFAST 设置或重置 FailFast 模式。
/USER 会话期间使用的用户。
/PASSWORD 用于会话登录的密码。
/OUTPUT 为输出重新定向指定模式。
/APPEND 为输出重新定向指定模式。
/AGGREGATE 设置或重置集合模式。
/AUTHORITY Specifies the <authority type> for the connection.
/?[:<BRIEF|FULL>] Usage information.
至于别名就是给主板、服务、系统、进程啦这些和计算机相关的东东起了个英文名,在wmic.exe /?命令行下也可以看到。
wql语句和我们平常用的注入时的sql语句的语法几乎是一模一样,甚至更简单。一般是where name="xxx" and 之类的,不过有时候要把name=“xxx"这样的格式换成"name='xxx'"或者是where(name='xxx')这样,反正正常情况下不行的话就换个写法。
动词呢,就那么简单几个ASSOC、CALL、CREATE、DELETE、GET、LIST、SET,从英文名字上应当可以看出它们是用来干什么的。
至于副词(动词的参数),就是得到用动词+它的参数得到对象的属性。像属于list动词的副词,就是显示个什么样的呀,例如显示详细状态或简要状态。
动词开关就好比显示个横表格式的或者显示个竖表格式的或者输出个什么样格式的文件,或者是几秒来重复显示信息等等,有的动词并没有开关。
2、一步一步来完成我们的wmic命令行
wmic里有个别名是logicaldisk,就是对磁盘进行管理。我们先按照最简单的格式来写,在cmd命令行下输入:
wmic logicaldisk list
(wmic.exe+别名+list动词),稍等一会儿屏幕上会出现本地硬盘的各式各样的数据,看上去杂乱无章。这样子太不方便看了,来改写一下,改成:
wmic logicaldisk list brief
在list动词后加个brief参数,也就是brief副词,显示的就会很整齐,效果如下:
DeviceID brief FreeSpace ProviderName Size VolumeName
A: 2
C: 3 2925694976 6805409792 WINXP
D: 3 1117487104 1759936512 WORK
E: 5
大家可能注意到了上面命令行中有动词list和副词brief。list动词决定显示的信息格式与范围,它有Brief、Full、Instance、Status、System、Writeable等多个参数(副词),full只是它的一个参数,也是list的缺省参数,表示显示所有的信息。其他几个参数顾名思义,如Brief表示只显示摘要信息,Instance表示只显示对象实例,Status表示显示对象状态,Writeable表示只显示该对象的可写入的属性信息等。
再来把语句扩展一下,在上边磁盘返回信息当中的DeviceID的值为3时表示是本地硬盘的分区,如果是5为光区,为2则是移动磁盘了。我们把语句改一下,加入wql语句,只显示本地磁盘。语句改成:
wmic logicaldisk where "DriveType=3" list brief
或者是
wmic logicaldisk where(DriveType=3) list brief
显示效果都是下边的样子:
DeviceID DriveType FreeSpace ProviderName Size VolumeName
C: 3 2925686784 6805409792 WINXP
D: 3 1117487104 1759936512 WORK
但是上边的格式显示的还是不太满意,ProviderName不知是个什么东东也给显示出来了,我们只想要我们想要的东东,像卷标 VolumeName之类的我们也不要它,再把语句改一下,换个get动词,命令改为
wmic logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem
返回信息如下:
DeviceID,Size,FreeSpace,Description,FileSystem
Description DeviceID FileSystem FreeSpace Size
本地固定磁盘 C: FAT32 2925686784 6805409792
本地固定磁盘 D: FAT 1117487104 1759936512
至于get动词后面跟的参数可以先用list来查看一下就明白了,这回可以得到想要的结果了。不过命令里的开关还没用到呢,加几个全局开关吧。先来加个/OUTPUT吧,让它把显示信息输出到一个文件中,命令如下:
wmic /output:a.html logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem
这样一来刚才屏幕上返回的信息就到当前目录的a.htm文件里了。但是a.htm打开看看后,根本就像一个记事本一样,没有任何样式,看起来也不美观,给它指定一个样式,就要用到format这个动词开关了,命令改为:
wmic /output:a.html logicaldisk where "DriveType=3" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
这样一来a.htm里就花花绿绿的用表格显示我们本地磁盘的信息了。也许要问htable是什么,其实这是一个文件,想要上边的a.html什么格式,就可以在C:\WINDOWS\system32\wbem这里找一个你想要的格式的文件名,具体有以下一些文件:
CSV
HFORM
HMOF
HTABLE
HXML
LIST
TABLE
VALUE
htable-sortby
htable-sortby.xsl
texttablewsys
texttablewsys.xsl
wmiclimofformat
wmiclimofformat.xsl
wmiclitableformat
wmiclitableformat.xsl
wmiclitableformatnosys
wmiclitableformatnosys.xsl
wmiclivalueformat
wmiclivalueformat.xsl
还有人也许要问了,只想显示c:盘的,不要其它盘的可以做到吗?当然可以,这就要用到wql语句的name这个变量了。可以先用
wmic logicaldisk list Instance
看到name的具体名字,然后更改上边的wql语句。改成:
wmic /output:a.html logicaldisk where "name='c:'" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
或者
wmic /output:a.html logicaldisk where(name='c:') get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
就可以了。值得注意的是在DriveType=3的没有用到单引号是因为3是数字型的,而c:是字符型的所以要用单引号或双引号。不过要注意的是如果在wql语句中用到了and,请用()或者""把语句引起来。
这样最后的语句基本符合了上面说的wmic的命令格式是“wmic+开关+别名+wql语名+动词+副词(或者说是动词的参数)+动词开关”。不过wmic可不只能对本机操作,还可以对远程机器进行操作,再来加三个全局开关,让我们的这条命令对远程格式进行操作,命令就是:
wmic /node:"192.168.8.100" /user:"administrator" /password:"lcx" /output:a.html logicaldisk where "name='c:'" get DeviceID,Size,FreeSpace,Description,FileSystem /format:htable
其中node开关表示对哪台机器进行访问,user和password当然是远程机器的用户名和密码了,这个命令有了以上的讲解,大家应当一目了然了吧。到现在为止的动词只用到了get和list,再加一个set来改变c:盘的卷标。命令如下:
WMIC logicaldisk where "name='c:'" set VolumeName ="lcx"
这样就更进一步清楚了这个格式的用法。写了这么多字,也许要问到wmic最有用的开关是什么,当然是"?"了,如果那个命令不会用,可以用wmic /? 、WMIC logicaldisk /?、WMIC logicaldisk list /?、WMIC logicaldisk set /?这样仪次来查询用法。
3、小结
查看电脑(显示)系统属性:dxdiag
wmic是很强大的,像开win 2k3的3389一句话就可以做到:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
补充:Windows WMIC命令详解
rem 查看系统信息
systeminfo
rem 查看BIOS详细信息
wmic bios list brief
rem 查看CPU详细信息
wmic cpu
rem 查看cpu型号
wmic cpu list brief
rem 查看内存详细信息
wmic memorychip
rem 查看内存条数
wmic memorychip list brief
rem 查看物理内存
wmic memphysical list brief
rem 查看逻辑内存
wmic memlogical list brief
rem 查看缓存内存
wmic memcache list brief
rem 查看虚拟内存
wmic pagefile list brief
rem 查看网卡
wmic nic list brief
rem 查看网络协议
wmic netprotocal list brief
rem 查看磁盘详细信息
wmic diskdrive
rem 查看盘符格式大小以及剩余空间
wmic logicaldisk
rem 查看对应盘符的大小以及剩余空间
fsutil volume diskfree 盘符号(如C:)
【例】将当前系统BIOS,CPU,主板等信息输出到一个HTML网页文件,命令如下:
::得到系统信息.bat,运行bat文件即可
::系统信息输出到HTML文件
::wmic [系统参数名] list [brief|full] /format:hform >|>> [文件名]
wmic bios list brief /format:hform > PCinfo.html
wmic baseboard list brief /format:hform >>PCinfo.html
wmic cpu list full /format:hform >>PCinfo.html
wmic os list full /format:hform >>PCinfo.html
wmic computersystem list brief /format:hform >>PCinfo.html
wmic diskdrive list full /format:hform >>PCinfo.html
wmic memlogical list full /format:hform >>PCinfo.html
更多信息请参考:PowerShellV7.4 第 7 章 - 使用 WMI