《wmic:从命令行对windows的全面管理44169new》由会员分享,可在线阅读,更多相关《wmic:从命令行对windows的全面管理44169new(8页珍藏版)》请在金锄头文库上搜索。
1、WMIC:从命令行对Windows的全面管理申朴方搜集整理 2008-03-16从Windows 2000开始,WMI(Windows 管理规范)就是Windows系统管理的重要组成部分。WMIC是Windows Management Instrumentation Command-line的简称,在WMIC出现之前,要从命令行访问WMI数据库或WMI名称空间不是一件容易的事情。现在,WMIC利用WMI强大的功能把系统管理扩展到了命令行。 一、什么是WMIC? WMIC扩展WMI,提供了从命令行接口和批命令脚本执行系统管理的支持。在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WM
2、I应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。如果不熟悉C+之类的编成语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的。WMIC改变了这种情况,为WMI名称空间提供了一个强大的、友好的命令行接口。 WMIC比WMI简单、直观得多,这主要是由于使用了别名(Alias)。别名机制获取用户在命令行上输入的一些简单命令,按照预定义的方式操作WMI名称空间,例如根据一个简单的WMIC别名Get命令构造出一个复杂的WMI查询语言(WQL)命令。从这个意义上看,别名是用户和名称空间之间一个简化操作的中间层。
3、例如,如果在WMIC命令行上执行下面这个简单的WMIC命令,就可以获得用户帐户的基本信息: useraccount list brief在上面的命令中,Useraccount别名执行了一个Win32_Useraccount类的WQL查询,以文本的形式显示出从该类提取的信息。另外,WMIC还以文本的形式显示出Win32_Useraccount类的属性。除了文本形式的输出之外,WMIC还能够以其他形式返回命令执行结果,例如XML、HTML或者CSV(逗号分隔的文本文件)。 WMIC以WMI模式中类的实例的形式保存别名。默认的别名类MSFT_CliAlias,以及其他支持WMIC的类保存在模式的默认
4、名称空间,或者说rootcli角色。角色可以简单地看成专门用来支持WMIC的另一个WMI名称空间。默认角色rootcli连接到rootcimv2名称空间,操作rootcimv2之内的类。虽然使用WMIC时一般不需要用到CIM Studio,但CIM Studio可以用来方便地查看rootcli名称空间。例如,图一显示了rootcli节点以及MSFT_CliAlias类的一些属性。 图一 你可以向rootcli名称空间和其他名称空间加入新的别名,还可以用Class和Path命令直接访问WMI名称空间,本文后面将详细说明Class和Path命令。 二、运行WMIC 执行“wmic”命令启动WMIC
5、命令行环境。这个命令可以在XP或.NET Server的标准命令行解释器(cmd.exe)、Telnet会话或“运行”对话框中执行。这些启动方法可以在本地使用,也可以通过.NET Server终端服务会话使用。 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式执行。例如,执行下面的命令将关闭正在运行的Outlook: process where name=outlook.exe call terminate命令运行结束后,WMIC命令行提示符重新出现,如图二所示。每个命令必须在一行之内输入,中间不能插入换行
6、符。 图二 WMIC也可以按照非交互的模式运行。如果要执行某个单步的任务,或者运行批命令中的一系列WMIC命令,非交互模式就很有用。要使用非交互模式,只要在同一个命令行上启动WMIC并输入要执行的命令就可以了。例如,执行cmd.exe打开一个命令行窗口,然后执行下面的命令,就可以输出连接到MACHINE1的打印机清单: wmic /node:MACHINE1 printer list status在这个例子中,第一个操作是启动WMIC,然后是根据/node参数建立一个到MACHINE1的远程连接,最后执行一个WMIC命令显示出打印机状态信息。命令运行结束后,返回到Windows命令行提示符状态
7、。 安装了WMIC的机器可以连接到任何一台安装了WMI的机器,被连接的机器不需要安装WMIC。例如,从一台运行Win XP Pro的机器启动WMIC,可以连接和管理所有运行着XP、Win2K、Windows NT 4.0、Windows Me和Windows 9x的机器。 三、WMIC命令行构成 WMIC提供了大量的全局开关、别名、动词、命令和丰富的命令行帮助增强用户接口。全局开关是适用于整个WMIC会话的配置选项。例如,/trace:on开关启用错误跟踪机制,如果这个开关处于打开状态,WMIC返回每一个命令的错误信息。利用/note开关可以访问远程机器,/interactive:on开关要求
8、WMIC在执行删除操作之前提示确认,其他的全局开关还包括/role、/user、/implevel以及/namespace。 如前所述,别名是用户和WMI名称空间一个简化语法的中间层。当你指定一个别名时,动词(Verb)表示要执行的动作。例如,前面例子中的List和Call就是两个动词的例子。表一描述了其他一些WMIC动词,并为每一个动词给出了例子。 表一:WMIC动词 动词 例子 说明 Assoc group where name= administrators assoc 显示出Administrators组与系统的所有关联,包括Administrators组成员等。又如,os assoc
9、显示出有关操作系统的信息和已经安装的补丁。 Create environment create name=progloc, username=work01User1,variablevalue= %programfiles%prog01 创建一个名字为Progloc的变量,把它的值设置为Program Files文件夹的一个子文件夹,把这个变量加入到Work01工作组计算机User1帐户。 Delete environment where(name= progloc) delete 删除Progloc环境变量。测试WMIC命令时,为了防止意外地删除,可以使用/interactive:on全局开
10、关,这时删除之前会要求确认。 Get partition get bootpartition, description, deviceid, bootable 返回分区是否可启动、描述信息和设备ID属性等信息。 Set path WIN32_USERACCOUNT where(name=user01) set disabled=true 在成员服务器或工作站上禁用User01用户帐户。 命令用来控制对WMIC和WMI名称空间的访问。注意表一的最后一个例子,这个例子用的是Path和Win32_USERACCOUNT类,而不是Useraccount别名。Path是一个直接访问WMI名称空间中实例的
11、命令,不必再通过别名访问。如果待执行的系统管理任务没有现成的别名可用,Path命令特别有用。虽然你可以用新的别名和角色扩展WMIC,但如果你对WMI名称空间比较熟悉,使用Path命令也很方便。 除了Path命令之外,WMIC还支持Class、Context、Quit和Exit命令。Class命令用来直接访问WMI模式内的类或创建现有类的实例。Class命令和Path命令的不同之处在于,Path命令的作用对象是实例以及它的属性(例如,提取管理用的信息),而Class命令的作用对象是类的定义。例如,如果要提取出WIN32_SOFTWAREELEMENT类的所有属性,可以执行如下命令: class
12、WIN32_SOFTWAREELEMENT get这个命令的输出是HTML格式,稍后我们将了解如何用/output全局开关把输出重定向到可用浏览器打开的HTML文件。Class命令加上Assoc动词能够显示出类的名称空间路径以及其他与该类关联的类。利用Class命令可以删除类、创建类的实例,但不能创建类。 Context命令显示出全局开关的当前设置。Quit和Exit命令用来退出WMIC命令提示符环境,返回以前的Shell环境(例如Telnet环境,或XP的命令行提示符环境)。 命令行帮助是熟悉WMIC的有效途径。表二是在WMIC提示符下查找信息的常用命令: 表二:命令行帮助 命令 例子 说明
13、 /? 或 -? 显示所有全局开关和别名的语法 / /? /user /? 显示指定全局开关的信息 /? class /? 显示某个命令的信息 /? memcache /? 显示某个别名的信息 /? temperature get /? 显示别名与动词组合的信息 /?:Full irq get /?:Full 显示动词的帮助信息 四、实践应用 以上我们了解了WMIC命令行环境的基础知识,下面来看看如何用批命令运行WMIC,以及把输出结果定向到控制台或HTML、XML文件。从批命令文件运行WMIC的好处在于不需要重复输入一系列复杂的命令,例如,下面是一个批命令文件的内容,它的作用是显示出MACH
14、INE1和MACHINE2这两台机器的CPU信息,输出结果显示在控制台上。/format开关是面向动词的开关,而不是全局开关,它只用于Get和List动词。 wmic /node:MACHINE1, MACHINE4 cpu get name, caption, maxclockspeed, systemname /format:textvaluelist.xslWMIC批命令可以使用变量。也就是说,对于上面的批命令,服务器的名字不仅可以直接指定,而且还可以通过%1、%2的形式指定,下面就是一个例子。把下面的代码放入一个批命令文件,然后在执行批命令文件时加上一到二个机器的名字即可;另外,也可以
15、创建一个独立的文本文件,然后在文本文件中放入机器名字的清单,清单可以是CSV格式,或用换行符分隔的格式。如果使用独立的文本文件提供机器名字,只需在/node全局开关后面加上以符号为前缀的文本文件名字,符号告诉/node开关后面的参数是一个文件名字而不是机器名字。 echo offif %1= goto msgif %2= goto singlewmic /node:%1, %2 cpu get name, caption, maxclockspeed, systemname /format:textvaluelist.xslgoto end:singlewmic /node:%1 cpu get name, caption, maxclockspeed, systemname /format:textvaluelist.xslgoto end:msgecho 必须指定至少一台计算机的名字。:end如前所述,WMIC命令的输出结果不仅可以发送到控制台,还可以发送到XML或HTML、MOF(Managed Object Format)格式的文件。在安装了WM