WMIC概述

简介:
背景:WMI、WBEM与CIM
  关于WMI,我们在以前的文章中多次提及,并有过具体的应用,如《使用VS.NET实现WMI调用》(2003年1月刊),《限制域用户同时的多点登录》与《来一段脚本,Kill掉Mike的歌》(2003年2月刊)等。这里不准备再对其做详细的说明,只做一下简单的介绍。
  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概述
  WMIC,是一款新出现在Windows Server 2003中的命令行管理工具。使用WMIC,你不但可以管理本地计算机,而且可以管理同一Windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机不必事先安装WMIC,只需要支持WMI即可。
  WMIC有一个能够分析、解释和执行从命令行接收的别名(Alias)的引擎,它是一个可执行文件,名为WMIC.exe,这个文件通常位于"c:\\windows\\
  system32\\wbem"文件夹中,该程序运行于用户当前登录的计算机上。任何对WMIC命令行的扩展性能都经过别名文件定义或者注册。别名又称友好名称(Friendly Names),通过MOF(Management Object Format,管理对象格式)格式定义。WMIC引擎接收到输入的命令后,先进行分析。如果命令是一个别名,WMIC会从当前操作命名空间(比如root\\cli)调用该别名的定义,应用当前的环境设置(如目标命名空间),并将别名命令与它的原始命令进行对应,然后执行。
  具体来说,你可以使用WMIC实现如下的管理任务:
  1、本地计算机管理
  2、远程单个计算机管理
  3、远程多个计算机管理
  4、使用远程会话的计算机管理(如Telnet)
  5、使用管理脚本的自动管理
  只有本地管理员组成员才能够启动WMIC,由于WMIC本质上是WMI的一个客户端,因此WMIC的安全受限于WMI的安全。当WMIC在一个远程会话中被使用时,如Telnet、终端服务等,缺省情况下,它使用发起此会话的用户的安全上下文。在使用WMIC管理一个远程计算机之前,WMIC会Ping一下远程计算机以确定其状态。
  在使用WMIC命令行时,可以随时使用"/?"来获得当前命令上下文的帮助信息。
  执行模式
  WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mode),经常使用Netsh命令行的管理员应该非常熟悉这两种模式。
  交互模式。如果你在命令提示符下或通过"运行"菜单只输入WMIC,都将进入WMIC的交互模式,每当一个命令执行完毕后,系统还会返回到WMIC提示符下,如"Root\\cli",交互模式通常在需要执行多个WMIC指令时使用。当你需要先执行"CONTEXT"命令查看环境变量,再使用"OS"命令查看当前操作系统消息时,就可以使用交互模式,如图1所示。交互模式有时还会对一些敏感的操作要求确认,比如删除操作,最大限度地防止管理员出现失误。
  非交互模式。非交互模式是指将WMIC指令直接作为WMIC的参数放在WMIC后面,当指令执行完毕后再返回到普通的命令提示符下,而不是进入到WMIC上下文环境中。WMIC的非交互模式主要用于批处理或者其他一些脚本文件中,比如上面的"OS"命令在非交互模式下就可以使用下面的方式执行:
  wmic os /?
  使用WMIC管理系统
  WMIC包含了众多的开关、命令,以及内置的别名,详细内容见表1、表2和表3。下面让我们通过具体的实例体验一下WMIC的强大功能。
  简单管理任务
  使用WMIC,可以完成一些简单的管理任务,比如查看硬件与操作系统信息。如果不使用WMIC,查询硬件如BIOS、CPU、操作系统等信息,通常是使用系统提供的API接口进行编程,或者编写一小段脚本程序,是一件比较麻烦的事情,如表4所示就是一个查询BIOS信息的传统VBscript脚本。如果使用WMIC,那情况就大不相同,只需要一个简单命令就能搞定:
  wmic bios list full
  结果如图2所示。
  大家可能注意到了上面命令行中还有两个参数list和full。list决定显示的信息格式与范围,它有Brief、Full、Instance、Status、System、Writeable等多个参数,full只是它的一个参数,也是list的缺省参数,表示显示所有的信息。其他几个参数顾名思义,如Brief表示只显示摘要信息,Instance表示只显示对象实例,Status表示显示对象状态,Writeable表示只显示该对象的可写入的属性信息等。
  在管理过程中,尤其是进行远程系统管理的时候,管理员多数喜欢列一下进程列表,以了解当前系统中正在运行的程序。下面的命令就可以达到这一目的:
  wmic process list brief
  它会显示当前所有进程的一些摘要信息,比如进程名称、进程ID和优先级等。在我以前的文章《来一段脚本,Kill掉Mike的歌》中,就可以使用这一命令代替那个list.vbs脚本。
  复杂管理任务
  WMIC在完成复杂管理任务方面也是非常出色的,先看一下查询事件日志并生成结果文件的例子:
  WMIC /node:"dc2" /user:"mytest" NTEVENTswheres"eventtype<3 and eventtype>0 AND logfile=\'Application\'" GET Logfile, SourceName, Eventtype, Message, TimeGenerated /FORMAT:htable:"sortby=EventType">c:\\Application.htm
  这行长长的命令表示从计算机DC2中查询应用程序日志信息,事件类型为小于3且大于0的事件,通常是警告与错误事件。因为是远程计算机,所以命令中使用了"/node"和"/user"开关。输出结果保存为网页格式,保存在"c:\\Application.htm"文件中,并以事件类型进行排序。当你使用上面的命令时,因为使用了"/user"开关,所以系统会首先提示你输入与该用户匹配的密码,如图3所示,查询结果如图4所示。
  同样,你还可以使用WMIC同时重新启动多台被管理的服务器或工作站,命令如下:
  WMIC /NODE:@"c:\\MyServerList.txt" OSswheres(Primary="TRUE") CALL Win32ShutDown 6
  WMIC会首先从"c:\\MyServerList.txt"中取得服务器名称列表,这些服务器名称在文件中以逗号分割,如"dc1,dc2"。要注意的是,在/node开关后面使用服务器列表文件时,一定要在文件名的前面加上"@"引导符。该命令执行结果如图5所示,在执行重新启动过程中,WMIC会返回详细的执行结果。
  WMIC还可以从Active Directory中取得数据,下面是一个从Active Directory中取得用户信息的例子,取得的用户信息包括显示名称、UPN名称、名称和创建时间等,返回结果如图6所示:
  WMIC/NAMESPACE:\\root\\directory\\ldap PATH ds_user GET ds_displayname, ds_userprincipalname, ds_cn, ds_name, ds_whencreated /VALUE
  总结
  WMIC是我所见到的基于windows平台的功能最强大的命令行工具,但同样也是最复杂的工具。尤其是在完成复杂的管理任务时,你需要对WMI的Win32类的属性及方法非常熟悉才可能做到游刃有余。因此,在希望熟悉运用WMIC之前,建议先学习WMI,熟悉其Win32类的各种属性及方法。国内现在出过几本不错的WMI书籍,你也可以到微软的MSDN网站(MSDN.microsoft.com)上查询这方面的信息。
  有了WMIC的加入,命令行们应该可以大声说:"虽然我很丑,但是我很强大"了
















本文转自starger51CTO博客,原文链接:http://blog.51cto.com/starger/22662  ,如需转载请自行联系原作者


相关文章
|
2月前
|
程序员
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
【2月更文挑战第6篇】Verbose 参数主要用来显示函数执行过程中通过Write-Verbose写入的相关信息,如果命令执行当中有写入则会有反馈信息输出,反之则没有任何信息输出。输入如下命令
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
|
2月前
|
存储
PowerShell系列(十二):PowerShell Cmdlet高级参数介绍(二)
【2月更文挑战第7篇】$Error变量,对于PowerShell执行出现的错误会被写入到这个变量里面,加上时间的累积,这个变量的数据量就会非常大,我们平常在排查问题的时候需要对错误信息进行Debu调试,这个时候ErrorVariable 就可以解决这个问题,它的主要作用是把执行出现错误的信息输出到我们定义的变量里面去。
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
28 0
|
10月前
|
C++ Windows
windows 下C++生成Dump调试文件与分析
windows 下C++生成Dump调试文件与分析
430 0
vxworks在线调试---remote systems创建方法
vxworks在线调试---remote systems创建方法
100 0
vxworks在线调试---remote systems创建方法
|
Shell Linux BI
ABAP实现的在Linux里操作shell的报表
ABAP实现的在Linux里操作shell的报表
101 0
|
Windows
wmic应用实例
实例应用 1、磁盘管理   查看磁盘的属性 wmic logicaldisk list brief ::caption=标题、driveID=驱动器ID号、model=产品型号、Partitions=分区、size=大小   根据磁盘的类型查看相关属性 wmic logicaldis...
1097 0
|
缓存 监控 Linux
Linux监控工具介绍系列&mdash;&mdash;vmstat
说来惭愧,玩Linux这么久了,居然没有玩转vmstat这个命令,对很多指标的具体意义都有点模糊不清,花了点时间好好学习、整理一下这个命令的相关资料。因为这个命令确实比较重要,而且频繁用到。     命令简介:      vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视。
1401 0
|
关系型数据库 Windows MySQL
windows下wmic命令学习笔记
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396401 ...
1239 0