Board logo

标题: WMIC :命令行管理规范 [打印本页]

作者: lxzzr    时间: 2009-4-8 00:51     标题: WMIC :命令行管理规范

我想现在很多人还不知道WMIC是什么东西,获取系统的分区还是在用FOR枚举,等等,在这里我给大家做个简单的介绍,并提供我收集的资料和自己的心得体会,愿与大家一起研究,提高批处理脚本编程的水平。

          WMIC扩展WMI,提供了从命令行接口和批命令脚本执行系统管理的支持。在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。如果不熟悉C++之类的编成语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的。WMIC改变了这种情况,为WMI名称空间提供了一个强大的、友好的命令行接口。


  WMICWMI简单、直观得多,这主要是由于使用了别名(Alias)。别名机制获取用户在命令行上输入的一些简单命令,按照预定义的方式操作WMI名称空间,例如根据一个简单的WMIC别名Get命令构造出一个复杂的WMI查询语言(WQL)命令。从这个意义上看,别名是用户和名称空间之间一个简化操作的中间层。例如,如果在WMIC命令行上执行下面这个简单的WMIC命令,就可以获得用户帐户的基本信息:wmic useraccount list brief
    这是一个最简单的例子了。

在上面的命令中,Useraccount别名执行了一个Win32_Useraccount类的WQL查询,以文本的形式显示出从该类提取的信息。另外,WMIC还以文本的形式显示出Win32_Useraccount类的属性。除了文本形式的输出之外,WMIC还能够以其他形式返回命令执行结果,例如XMLHTML或者CSV(逗号分隔的文本文件)。WMICWMI模式中类的实例的形式保存别名。默认的别名类——MSFT_CliAlias,以及其他支持WMIC的类保存在模式的默认名称空间,或者说root\cli角色。角色可以简单地看成专门用来支持WMIC的另一个WMI名称空间。默认角色root\cli连接到root\cimv2名称空间,操作root\cimv2之内的类。虽然使用WMIC时一般不需要用到CIM Studio,但CIM Studio可以用来方便地查看root\cli名称空间。



    先贴上两个,呵呵



[ 本帖最后由 lxzzr 于 2009-4-8 01:03 编辑 ]
作者: lxzzr    时间: 2009-4-8 00:53     标题: WMIC的学习过程

wmic datafile 别名
C:\>wmic datafile "c:\\hello.txt" call rename c:\ppp.txt
执行 (\\QL-LIBOWEN\ROOT\CIMV2:CIM_DataFile.Name="c:\\hello.txt")->rename()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

C:\>wmic datafile Where "drive='d:' and extension='txt' and path='\\'" get name
Name
d:\abc.txt
d:\复件 abc.txt

WMIC FSDIR别名

wmic fsdir where(name='c:\\good') delete
wmic fsdir where(name='c:\\good') call delete
删除c:\good文件夹

wmic fsdir where(name='c:\\good') rename "c:\abb"
重命名c:\good文件夹为abb

复制文件夹

C:\>wmic fsdir where(name='d:\\test') call copy "c:\ppcd"
执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Directory.Name="d:\\test")->copy()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

复制D盘下TEST文件夹的所有文件到C盘下的PPCD,如果PPCD存在直接复制过去,如果不存在他会自动创建并将文件复制过去

C:\>wmic fsdir where(name='d:\\test') call Compress
执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Directory.Name="d:\\test")->Compress()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

压缩指定文件夹,以便节省磁盘空间

C:\>wmic fsdir where(name='d:\\test') call unCompress
执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Directory.Name="d:\\test")->unCompress()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

解除压缩文件夹

Job 别名

C:\>wmic job call create "sol.exe",0,0,1,0,********154600.000000+480
执行 (Win32_ScheduledJob)->Create()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
JobId = 1;
ReturnValue = 0;
};

这个命令和AT命令是一模一样啊,AT添加的计划任务他可以看到,他添加的同样AT命令也是可以看到

wmic job call create "sol.exe",0,0,true,false,********154800.000000+480
wmic job call create "sol.exe",0,0,1,0,********154600.000000+480

这两句是相同的,TRUE可以用1表示,同样的FALSE可以用0值表示,时间前为何用八个星号,这是WMIC的特性,他显示时间的方式是YYYYMMDDHHMMSS.MMMMMM+时区 ,可是,我们并不需要指定年份和月份还有天,所以用*星号来替代

Os 别名

wmic os Where (primary='1′) call win32shutdown *

这个*参数可以有如下值:

Const LOGOFF=0

Const SHUTDOWN=1

Const REBOOT=2

Const FORCE=4

Const POWEROFF=8

这些参数可以进行任意组合,例如:

强制注销:4 (0+4)的组合
强制关机:5 (1+4)的组合
强制重启:6 (2+4)的组合
强制关闭电源:12 (8+4)的组合

WMIC设置系统时间

要求需要有管理员权限

wmic os where(primary=1) call setdatetime 20070731144642.555555+480

执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_OperatingSystem.Name="Microsoft Windows XP P
rofessional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1″)->setdatetime()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

Process 别名

C:\>wmic process call create sol.exe
执行 (Win32_Process)->Create()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ProcessId = 3848;
ReturnValue = 0;
};

C:\>wmic process 3848 call terminate
执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Process.Handle="3848″)->terminate()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

可以看出PROCESS别名是以HANDLE属性为默认属性进行操作的

C:\>wmic process 2556 call setpriority 64
执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Process.Handle="2556″)->setpriority()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

用来设置程序的优先权

64 Idle 优先权–低
16384 Below Normal 优先权–低于标准
32 Normal 优先权–标准
32768 Above Normal 优先权–高于标准
128 High Priority 优先权–高
256 Real Time 优先权–实时

wmic process Where "processid='%pid%'" call Terminate

wmic process Where "name='%imagename%'" call Terminate

wmic path Win32_Process.name="%imagename%" call Terminate

wmic path Win32_Process.processid="%pid%" call Terminate

wmic process Where name='sol.exe' delete

Nicconfig 别名

wmic nicconfig where(index='8′) call enablestatic "192.168.1.81″,"255.255.255.0″   
设置IP地址和子网掩码

wmic nicconfig where(index='8′) call setgateways "192.168.0.1″,1          
设置网关和跃点数

wmic nicconfig where(index='8′) call setdnsdomain ("192.168.0.1″,"192.168.0.11″)  
设置DNS服务器地址,设置完毕后不会马上生效,必需要设置主次才可以生效

wmic nicconfig where(index='8′) call SetDNSServerSearchOrder ("192.168.0.1″,"192.168.0.11″) 
设置DNS服务器地址的主次顺序,192.168.0.1在前表示为首选DNS地址,在后为备用DNS地址

wmic path Win32_NetworkAdapterConfiguration.index=8 call enabledhcp

WMIC默认的NICCONFIG别名是不提供enabledhcp这个方法的,所以我们只能调用他的WMI函数来设置动态分配IP地址的设置

wmic nicconfig where(index='8′) get /value  INDEX值为你当前网卡的索引值,每台机器都不一样

以下为网络方面设置的各个属性值:

ArpAlwaysSourceRoute=
ArpUseEtherSNAP=
Caption=[00000008] Broadcom 440x 10/100 Integrated Controller
DatabasePath=%SystemRoot%\System32\drivers\etc
DeadGWDetectEnabled=
DefaultIPGateway={"192.168.0.1″}
DefaultTOS=
DefaultTTL=
Description=Broadcom 440x 10/100 Integrated Controller - 数据包计划程序微型端口
DHCPEnabled=FALSE
DHCPLeaseExpires=
DHCPLeaseObtained=
DHCPServer=
DNSDomain=("192.168.0.1″,"192.168.0.11″)
DNSDomainSuffixSearchOrder=
DNSEnabledForWINSResolution=FALSE
DNSHostName=ql-libowen
DNSServerSearchOrder={"192.168.0.1″,"192.168.0.11″}
DomainDNSRegistrationEnabled=FALSE
ForwardBufferMemory=
FullDNSRegistrationEnabled=TRUE
GatewayCostMetric={1}
IGMPLevel=
Index=8
IPAddress={"192.168.0.81″}
IPConnectionMetric=20
IPEnabled=TRUE
IPFilterSecurityEnabled=FALSE
IPPortSecurityEnabled=
IPSecPermitIPProtocols={"0″}
IPSecPermitTCPPorts={"0″}
IPSecPermitUDPPorts={"0″}
IPSubnet={"255.255.255.0″}
IPUseZeroBroadcast=
IPXAddress=
IPXEnabled=FALSE
IPXFrameType=
IPXMediaType=
IPXNetworkNumber=
IPXVirtualNetNumber=
KeepAliveInterval=
KeepAliveTime=
MACAddress=00:0F:1F:4F:08:A0
MTU=
NumForwardPackets=
PMTUBHDetectEnabled=
PMTUDiscoveryEnabled=
ServiceName=bcm4sbxp
SettingID={B97AA60A-483E-4C84-84FE-5A3C6A875B65}
TcpipNetbiosOptions=0
TcpMaxConnectRetransmissions=
TcpMaxDataRetransmissions=
TcpNumConnections=
TcpUseRFC1122UrgentPointer=
TcpWindowSize=
WINSEnableLMHostsLookup=TRUE
WINSHostLookupFile=
WINSPrimaryServer=
WINSScopeID=
WINSSecondaryServer=

Pagefileset 别名

C:\>wmic pagefileset get /value

Caption=C:\ ‘pagefile.sys'
Description='pagefile.sys' @ C:\
InitialSize=384
MaximumSize=768
Name=C:\pagefile.sys
SettingID=pagefile.sys @ C:

用来察看本地计算机虚拟内存情况,初始大小,最大值,保存位置等

下面我们可以改变虚拟内存文件(也就是我们常说的页面文件) 所在位置以及初始大小和最大值

wmic pagefileset set initialsize=512,maximumsize=1024
这个只是改变初始大小和最大值,SET不能修改页面文件所存放的位置,也就是说默认页面文件在C盘这时不能把他的位置修改到D盘,如果要修改到D盘我们可以这样来做

wmic pagefileset create name='d:\pagefile.sys',initialsize=512,maximumsize=1024

然后删除以前的就可以了,请看

wmic pagefileset where(name='c:\\pagefile.sys') delete

这样就实现了把页面文件转移到D盘的效果

WMIC设置代理服务器

C:\>wmic path win32_proxy get /value

Caption=
Description=
ProxyPortNumber=
ProxyServer=:
ServerName=ql-libowen.ql-art.com
SettingID=

C:\>wmic path win32_proxy Where ServerName='ql-libowen.ql-art.com' call setproxysetting "8080″,"192.168.1.59″

执行 (\\QL-LIBOWEN\root\cimv2:Win32_Proxy.ServerName="ql-libowen.ql-art.com")->s
etproxysetting()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

C:\>wmic path win32_proxy.servername="ql-libowen.ql-art.com" call setproxysetting "",""
执行 (\\QL-LIBOWEN\root\cimv2:Win32_Proxy.ServerName="ql-libowen.ql-art.com")->s
etproxysetting()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

WMIC 设置共享

输入参数是 OBJECT 类型
原因:对于 OBJECT 类型的输入参数,还没有实现全面支持。默认值(空字符串:"")是目前支持的唯一值。

解决方案:使用下面的命令为三个用户设置 c:\test 目录的共享:

WMIC SHARE CALL Create "","test","3″,"TestShareName","","c:\test",0

建立共享文件夹

C:\>WMIC SHARE where(path='c:\\test') call delete

执行 (\\QL-LIBOWEN\ROOT\CIMV2:Win32_Share.Name="TestShareName")->delete()
方法执行成功。
输出参数:
instance of __PARAMETERS
{
ReturnValue = 0;
};

WMIC对于共享文件夹操作

C:\>WMIC SHARE where(path='c:\\test') delete
删除范例 \\QL-LIBOWEN\ROOT\CIMV2:Win32_Share.Name="TestShareName"
范例删除成功。

Type (共享类型)

Type of resource being shared. Types include: disk drives, print queues, interprocess communications (IPC), and general devices.

Value Meaning

0—–Disk Drive
1—–Print Queue
2—–Device
3—–IPC
2147483648—-Disk Drive Admin
2147483649—-Print Queue Admin
2147483650—-Device Admin
2147483651—-IPC Admin

Computersystem 别名

wmic computersystem Where "name='原计算机名称'" call rename "要修改的计算机名"

主要功能:修改计算机名称

wmic computersystem Where "name='计算机名称'" call joindomainorworkgroup "","","MyGroup"

主要功能:更改现有工作组为指定的工作组

wmic computersystem Where "name='计算机名称' call UnjoinDomainOrWorkgroup

主要功能:退出所在域

wmic computersystem Where "name='计算机名称'" call joindomainorworkgroup "",1,"域名称","域管理员密码","域管理员用户名"

例如:想要加入到的域名称为QLART ,域管理员用户名应该为 [email=administrator@ql-art.com]administrator@ql-art.com[/email] 或qlart\administrator 密码为:XXXXXX

Useraccount 别名

C:\>wmic useraccount where(LocalAccount='1′ and name='good') set disabled=true

更新 ‘\\QL-LIBOWEN\ROOT\CIMV2:Win32_UserAccount.Domain="QL-LIBOWEN",Name="good"‘
的属性
属性更新成功。

C:\>wmic useraccount where(LocalAccount='1′ and name='good') set fullname="hello world!"

更新 ‘\\QL-LIBOWEN\ROOT\CIMV2:Win32_UserAccount.Domain="QL-LIBOWEN",Name="good"‘
的属性
属性更新成功。

C:\>wmic useraccount where(localaccount=true and name='good') set passwordchangeable=true

更新 ‘\\QL-LIBOWEN\ROOT\CIMV2:Win32_UserAccount.Domain="QL-LIBOWEN",Name="good"‘
的属性
属性更新成功。

C:\>wmic useraccount Where "domain='ql-libowen' and name='libowen'" set PasswordExpires=false

更新 ‘\\QL-LIBOWEN\ROOT\CIMV2:Win32_UserAccount.Domain="QL-LIBOWEN",Name="libowe
n"‘ 的属性
属性更新成功
作者: lxzzr    时间: 2009-4-8 00:58     标题: WMIC操作注册表

大家在对注册表的操作中用的是什么?REG.EXE ?INF脚本?VBS?
呵呵,WMIC也是可以实现的....

REG_SZ (1)
REG_EXPAND_SZ (2)
REG_BINARY (3)
REG_DWORD (4)
REG_MULTI_SZ (7)

HKEY_CLASSES_ROOT (0×80000000)
HKEY_CURRENT_USER (0×80000001)
HKEY_LOCAL_MACHINE (0×80000002)
HKEY_USERS (0×80000003)
HKEY_CURRENT_CONFIG (0×80000005)
HKEY_DYN_DATA (0×80000006)


wmic /namespace:\\root\default path stdregprov call getstringvalue ^&H80000002,"SOFTWARE\Microsoft","123"
rem 枚举HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下名称为123的字符串值的值

wmic /namespace:\\root\default path stdregprov call EnumKey ^&H80000002,"SOFTWARE\Microsoft\"
rem 枚举HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下的所有子键值

wmic /namespace:\\root\default path stdregprov call Enumvalues ^&H80000002,"SOFTWARE\Microsoft\123"
rem 枚举HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\123这个键值下的所有数值及其数值所对应的类型

wmic /namespace:\\root\default path stdregprov call createkey ^&H80000002,"SOFTWARE\Microsoft\123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立名称为123的项

wmic /namespace:\\root\default path stdregprov call SetStringValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为123的string的数值,值为456

wmic /namespace:\\root\default path stdregprov call SetDWORDValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为456的dword的数值,值为123

wmic /namespace:\\root\default path stdregprov call SetBinaryValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为456的binary的数值,值为123

wmic /namespace:\\root\default path stdregprov call SetBinaryValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为456的binary的数值,值为123

wmic /namespace:\\root\default path stdregprov call SetExpandedStringValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为123的ExpandedString的数值,值为456

wmic /namespace:\\root\default path stdregprov call SetMultiStringValue ^&H80000002,"SOFTWARE\Microsoft","456","123"
rem 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下建立一个名为123的MultiString的数值,值为456

wmic /namespace:\\root\default path stdregprov call deletekey ^&H80000002,"SOFTWARE\Microsoft\123"
rem 删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下名称为123的项,注意此键值必须是最底层

wmic /namespace:\\root\default path stdregprov call deleteValue ^&H80000002,"SOFTWARE\Microsoft\","123"
rem 删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下名称为123的的数值

[ 本帖最后由 lxzzr 于 2009-4-8 01:00 编辑 ]
作者: Batcher    时间: 2009-5-30 00:38

楼主和9527是同一个人不?
^_^

http://9527dos.yo2.cn/articles/% ... 0wmic%E7%9A%84.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2