WMIC
WMIC(Windows Management Instrumentation Command-line),即Windows管理规范命令行。并声称使用WMIC,再配合其他现存的命令行工具,管理员几乎可以完成所有的管理任务,而不必再过多地依赖那些图形界面。
WMI 是微软基于Web的企业管理(WBEM)这一理念与标准的具体实现,并对 CIM (Common Information Model,公用信息模型)提供完整的支持。WMI 由符合 CIM 标准的对象储备库(Object Repository)和 CIM 对象管理器(WMI Object Manager)组成,其中对象储备库是对象定义的数据库,对象管理器负责处理储备库中对象的收集和操作,并从 WMI 提供程序(WMI Provider)收集信息。WMI 提供程序在 WMI 与操作系统组件、应用程序和其他系统之间充当中间人角色,两者通过 WMI 提供程序交换信息。WMI 提供程序的主要作用就是为 WMI 提供下层对象的相关信息,以及允许 WMI 通过它对下层对象进行管理。例如,注册表提供程序从注册表中提供信息,而 SNMP 提供程序则从 SNMP 设备中提供数据和事件等。
WMI 被许多计算机管理工具所用,如Microsoft Systems Management Server、Microsoft Health Monitor和Microsoft Operations Manager等。
使用 WMIC,你不但可以管理本地计算机,而且可以管理同一Windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机不必事先安装 WMIC,只需要支持 WMI 即可。
WMIC 有一个能够分析、解释和执行从命令行接收的别名(Alias)的引擎,它是一个可执行文件,名为WMIC.exe,这个文件通常位于 c:\windows\system32\wbem
文件夹中,该程序运行于用户当前登录的计算机上。任何对 WMIC 命令行的扩展性能都经过别名文件定义或者注册。别名又称友好名称(Friendly Names),通过 MOF (Management Object Format,管理对象格式)格式定义。WMIC 引擎接收到输入的命令后,先进行分析。如果命令是一个别名,WMIC 会从当前操作命名空间(比如root\cli)调用该别名的定义,应用当前的环境设置(如目标命名空间),并将别名命令与它的原始命令进行对应,然后执行。
具体来说,你可以使用 WMIC 实现如下的管理任务:
- 本地计算机管理
- 远程单个计算机管理
- 远程多个计算机管理
- 使用远程会话的计算机管理(如Telnet)
- 使用管理脚本的自动管理
只有本地管理员组成员才能够启动 WMIC,由于 WMIC 本质上是 WMI 的一个客户端,因此 WMIC 的安全受限于 WMI 的安全。当 WMIC 在一个远程会话中被使用时,如Telnet、终端服务等,缺省情况下,它使用发起此会话的用户的安全上下文。在使用 WMIC 管理一个远程计算机之前,WMIC 会 Ping
一下远程计算机以确定其状态。
WMIC 有两种运行方式:
- 交互模式(Interactive mode)
- 非交互模式(Non-Interactive mode)
运行的先决条件:
- 启动Windows Management Instrumentation服务,开放TCP135端口。
- 本地安全策略的“网络访问:本地帐户的共享和安全模式应设为“经典-本地用户以自己的身份验证”。
交互模式
如果你在命令提示符下或通过"运行"菜单只输入 WMIC,都将进入 WMIC 的交互模式,每当一个命令执行完毕后,系统还会返回到 WMIC 提示符下,如 wmic:root\cli
。交互模式通常在需要执行多个 WMIC 指令时使用。当你需要先执行 CONTEXT
指令查看环境变量,再使用 OS
指令查看当前操作系统消息时,就可以使用交互模式。交互模式有时还会对一些敏感的操作要求确认,比如删除操作,最大限度地防止管理员出现失误。
注意: 如果值包含特殊字符(如 "-" 或 "/"),则将开关值两边加上双引号。
c:\>wmic
wmic:root\cli>
# syntax
# wmic:root\cli>command </parameter>
# 查看环境变量
wmic:root\cli>context
NAMESPACE : root\cimv2
ROLE : root\cli
NODE(S) : YANGYY-WIN10
IMPLEVEL : IMPERSONATE
[AUTHORITY : N/A]
AUTHLEVEL : PKTPRIVACY
LOCALE : ms_804
PRIVILEGES : ENABLE
TRACE : OFF
RECORD : N/A
INTERACTIVE : ON
FAILFAST : OFF
OUTPUT : STDOUT
APPEND : STDOUT
USER : N/A
AGGREGATE : ON
# 查看当前操作系统消息
wmic:root\cli>os
BootDevice BuildNumber BuildType
Caption CodeSet CountryCode ...
\Device\HarddiskVolume1 14393 Multiprocessor Free
Microsoft Windows 10 企业版 936 86 ...
如果不了解指令,可以输入用 /?
来显示帮助信息。exit
或者 quit
退出交互模式。
非交互模式
非交互模式是指将 WMIC 指令直接作为 WMI C的参数放在 WMIC 后面,当指令执行完毕后再返回到普通的命令提示符下,而不是进入到 WMIC 上下文环境中。WMIC 的非交互模式主要用于批处理或者其他一些脚本文件中,比如上面的 OS
指令在非交互模式下就可以使用下面的方式执行:
c:\>wmic os
WMIC全局开关
可以使用以下全局开关:
开关 | 说明 | |
---|---|---|
/NAMESPACE | 别名在其上操作的命名空间的路径。 | |
/ROLE | 包含别名定义的角色的路径。 | |
/NODE | 别名在其上操作的服务器。 | |
/IMPLEVEL | 客户端模拟级别。 | |
/AUTHLEVEL | 客户端身份验证级别。 | |
/LOCALE | 客户端应使用的语言 ID。 | |
/PRIVILEGES | 启用或禁用所有权限。 | |
/TRACE | 将调试信息输出到 stderr。 | |
/RECORD | 记录所有输入命令和输出内容。 | |
/INTERACTIVE | 设置或重置交互模式。 | |
/FAILFAST | 设置或重置 FailFast 模式。 | |
/USER | 会话期间要使用的用户。 | |
/PASSWORD | 登录会话时要使用的密码。 | |
/OUTPUT | 指定输出重定向模式。 | |
/APPEND | 指定输出重定向模式。 | |
/AGGREGATE | 设置或重置聚合模式。 | |
/AUTHORITY | 指定连接的 <授权类型>。 | |
/?`[:<BRIEF\ | FULL>]` | 用法信息。(Markdown语法约束,实际没有"\") |
有关特定全局开关的详细信息,请键入: switch-name /?
/node /?
显示全局开关状态
wmic context
连接远程机器 /NODE
wmic /node:"192.168.1.20" /user:"domain\administrator" /password:"123456"
输出 /OUTPUT /FORMAT
wmic /output:"c:\temp\process.html" process list /format:htable
可以使用的格式:
- textvaluelist
- hform
- htable
- csv
- xml
WQL查询
WQL 是 WMI 中的查询语言,WQL 的全称是 WMI Query Language。语法与 SQL 非常相似。基本语法:
SELECT property[, property] FROM class [WHERE clause]
查询示例:
# 查询硬盘分区
SELECT * FROM Win32_LogicalDisk WHERE drivetype=3
# 查询共享目录
SELECT * FROM Win32_share
WMIC 支持 WQL 查询,但是语法上有些差异。语法格式:
别名: 等同于 from class;
where: 等同于 where;
谓词:包括 call、create、delete、get、list。get 等同于 select;不同别名的谓词可能不同,具体谓词可以使用
alias /?
查询。
(<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]。
示例:
由于 WMIC 以空格区隔参数,所以 where 条件中不能包含空格。如下面的示例中不能输入为: where Name = "dllhost.exe"
wmic process where Name="dllhost.exe" get Name, CommandLine, Priority
WMIC指令
可以使用以下别名:
别名(CLASS) | 说明 |
---|---|
ALIAS | 对本地系统上可用别名的访问 |
BASEBOARD | 基板(也称为主板或系统板)管理。 |
BIOS | 基本输入/输出服务(BIOS)管理。 |
BOOTCONFIG | 启动配置管理。 |
CDROM | CD-ROM 管理。 |
COMPUTERSYSTEM | 计算机系统管理。 |
CPU | CPU 管理。 |
CSPRODUCT | SMBIOS 中的计算机系统产品信息。 |
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 | 服务应用程序管理。 |
SHADOWCOPY | 卷影副本管理。 |
SHADOWSTORAGE | 卷影副本存储区域管理。 |
SHARE | 共享资源管理。 |
SOFTWAREELEMENT | 系统上安装的软件产品元素的管理。 |
SOFTWAREFEATURE | SoftwareElement 的软件产品子集的管理。 |
SOUNDDEV | 声音设备管理。 |
STARTUP | 当用户登录到计算机系统时自动运行的命令的管理。 |
SYSACCOUNT | 系统帐户管理。 |
SYSDRIVER | 基本服务的系统驱动程序管理。 |
SYSTEMENCLOSURE | 物理系统外壳管理。 |
SYSTEMSLOT | 物理连接点(包括端口、插槽和外设以及专用连接点)的管理。 |
TAPEDRIVE | 磁带驱动器管理。 |
TEMPERATURE | 温度传感器(电子温度计)数据管理。 |
TIMEZONE | 时区数据管理。 |
UPS | 不间断电源(UPS)管理。 |
USERACCOUNT | 用户帐户管理。 |
VOLTAGE | 电压传感器(电子电压表)数据管理。 |
VOLUME | 本地存储卷管理。 |
VOLUMEQUOTASETTING | 将磁盘配额设置与特定磁盘卷相关联。 |
VOLUMEUSERQUOTA | 每用户存储卷配额管理。 |
WMISET | WMI 服务操作参数管理。 |
有关特定别名的详细信息,请键入: alias /?
proccess /?
查看别名可用属性
proccess get /?
proccess list /?
# 目前不明确具体用法
CLASS:可获取完整 WMI 架构。
PATH:可获取完整 WMI 对象路径。
process-进程管理
# 获取进程列表,可用参数:
# [brief | full | instance | io | memory | statistics | status | system]
wmic proccess list brief
# 创建新进程
wmic process call create notepad
# 删除指定进程:
wmic process where name="qq.exe" call terminate
job-任务管理
wmic job call create "notepad.exe",0,0,true,false,********154800.000000+480
wmic job call create "explorer.exe",0,0,1,0,********154600.000000+480