WMI使用集锦
1.WMI簡介
WMI是英文Windows?Management?Instrumentation的簡寫,它的功能主要是:訪問本地主機的一些信息和服務,可以管理遠程計算機(當然你必須要擁有足夠的權限),比如:重啟,關機,關閉進程,創建進程等。
2.使用時首先添加System.Management.dll,然后引用
using?System.Threading;? 3.示例代碼
3.1 html代碼
<HTML>
????<HEAD>
????????<title>WMITest</title>
????????<meta?name="GENERATOR"?Content="Microsoft?Visual?Studio?.NET?7.1">
????????<meta?name="CODE_LANGUAGE"?Content="C#">
????????<meta?name="vs_defaultClientScript"?content="JavaScript">
????????<meta?name="vs_targetSchema"?content="http://schemas.microsoft.com/intellisense/ie5">
????</HEAD>
????<body?MS_POSITIONING="GridLayout">
????????<form?id="Form1"?method="post"?runat="server">
????????????<FONT?face="宋體">
????????????????<asp:Button?id="Button1"?style="Z-INDEX:?101;?LEFT:?48px;?POSITION:?absolute;?TOP:?16px"?runat="server"
????????????????????Text="獲得本地磁盤的信息"?Width="152px"></asp:Button>
????????????????<asp:Button?id="Button2"?style="Z-INDEX:?102;?LEFT:?32px;?POSITION:?absolute;?TOP:?56px"?runat="server"
????????????????????Text="獲得指定磁盤的容量"?Width="144px"></asp:Button>
????????????????<asp:Button?id="Button3"?style="Z-INDEX:?103;?LEFT:?32px;?POSITION:?absolute;?TOP:?96px"?runat="server"
????????????????????Text="列出機器中所有的共享資源"?Width="192px"></asp:Button>
????????????????<asp:Button?id="Button4"?style="Z-INDEX:?104;?LEFT:?8px;?POSITION:?absolute;?TOP:?128px"?runat="server"
????????????????????Text="控制讓系統中的某個文件夾共享或取消共享"?Width="264px"></asp:Button>
????????????????<asp:Button?id="Button5"?style="Z-INDEX:?105;?LEFT:?48px;?POSITION:?absolute;?TOP:?160px"?runat="server"
????????????????????Text="獲得系統服務的運行狀態"></asp:Button>
????????????????<asp:Button?id="Button6"?style="Z-INDEX:?106;?LEFT:?40px;?POSITION:?absolute;?TOP:?192px"?runat="server"
????????????????????Text="通過WMI修改IP,而實現不用重新啟動"?Width="248px"></asp:Button>
????????????????<asp:Button?id="Button7"?style="Z-INDEX:?107;?LEFT:?24px;?POSITION:?absolute;?TOP:?224px"?runat="server"
????????????????????Text="如何利用WMI遠程重啟遠程計算機"?Width="232px"></asp:Button>
????????????????<asp:Button?id="Button8"?style="Z-INDEX:?108;?LEFT:?40px;?POSITION:?absolute;?TOP:?264px"?runat="server"
????????????????????Text="利用WMI創建一個新的進程"?Width="192px"></asp:Button>
????????????????<asp:Button?id="Button9"?style="Z-INDEX:?109;?LEFT:?32px;?POSITION:?absolute;?TOP:?296px"?runat="server"
????????????????????Text="如何通過WMI終止一個進程"?Width="192px"></asp:Button>
????????????????<asp:Button?id="Button10"?style="Z-INDEX:?110;?LEFT:?32px;?POSITION:?absolute;?TOP:?328px"?runat="server"
????????????????????Text="如何用WMI?來獲取遠程機器的目錄以及文件"?Width="280px"></asp:Button>
????????????????<asp:Button?id="Button11"?style="Z-INDEX:?111;?LEFT:?424px;?POSITION:?absolute;?TOP:?24px"?runat="server"
????????????????????Text="網卡的MAC地址"?Width="120px"></asp:Button>
????????????????<asp:Button?id="Button12"?style="Z-INDEX:?112;?LEFT:?456px;?POSITION:?absolute;?TOP:?64px"?runat="server"
????????????????????Text="CPU的系列號?"?Width="104px"></asp:Button>
????????????????<asp:Button?id="Button13"?style="Z-INDEX:?113;?LEFT:?448px;?POSITION:?absolute;?TOP:?120px"
????????????????????runat="server"?Text="主板的系列號"></asp:Button>
????????????????<asp:Button?id="Button14"?style="Z-INDEX:?114;?LEFT:?472px;?POSITION:?absolute;?TOP:?160px"
????????????????????runat="server"?Text="獲取硬盤ID"></asp:Button>
????????????????<asp:Button?id="Button15"?style="Z-INDEX:?115;?LEFT:?448px;?POSITION:?absolute;?TOP:?208px"
????????????????????runat="server"?Text="獲取本機的用戶列表"?Width="144px"></asp:Button></FONT>
????????</form>
????</body>
</HTML> 3.2cs代碼
public?class?WMITest?:?System.Web.UI.Page
????{
????????protected?System.Web.UI.WebControls.Button?Button2;
????????protected?System.Web.UI.WebControls.Button?Button3;
????????protected?System.Web.UI.WebControls.Button?Button4;
????????protected?System.Web.UI.WebControls.Button?Button5;
????????protected?System.Web.UI.WebControls.Button?Button6;
????????protected?System.Web.UI.WebControls.Button?Button7;
????????protected?System.Web.UI.WebControls.Button?Button8;
????????protected?System.Web.UI.WebControls.Button?Button9;
????????protected?System.Web.UI.WebControls.Button?Button10;
????????protected?System.Web.UI.WebControls.Button?Button11;
????????protected?System.Web.UI.WebControls.Button?Button12;
????????protected?System.Web.UI.WebControls.Button?Button13;
????????protected?System.Web.UI.WebControls.Button?Button14;
????????protected?System.Web.UI.WebControls.Button?Button15;
????????protected?System.Web.UI.WebControls.Button?Button1;
????
????????private?void?Page_Load(object?sender,?System.EventArgs?e)
????????{
????????????//?Put?user?code?to?initialize?the?page?here
????????}
????????Web?Form?Designer?generated?code#region?Web?Form?Designer?generated?code
????????override?protected?void?OnInit(EventArgs?e)
????????{
????????????//
????????????//?CODEGEN:?This?call?is?required?by?the?ASP.NET?Web?Form?Designer.
????????????//
????????????InitializeComponent();
????????????base.OnInit(e);
????????}
????????
????????/**////?<summary>
????????///?Required?method?for?Designer?support?-?do?not?modify
????????///?the?contents?of?this?method?with?the?code?editor.
????????///?</summary>
????????private?void?InitializeComponent()
????????{????
????????????this.Button1.Click?+=?new?System.EventHandler(this.Button1_Click);
????????????this.Button2.Click?+=?new?System.EventHandler(this.Button2_Click);
????????????this.Button3.Click?+=?new?System.EventHandler(this.Button3_Click);
????????????this.Button4.Click?+=?new?System.EventHandler(this.Button4_Click);
????????????this.Button5.Click?+=?new?System.EventHandler(this.Button5_Click);
????????????this.Button6.Click?+=?new?System.EventHandler(this.Button6_Click);
????????????this.Button7.Click?+=?new?System.EventHandler(this.Button7_Click);
????????????this.Button8.Click?+=?new?System.EventHandler(this.Button8_Click);
????????????this.Button9.Click?+=?new?System.EventHandler(this.Button9_Click);
????????????this.Button10.Click?+=?new?System.EventHandler(this.Button10_Click);
????????????this.Button11.Click?+=?new?System.EventHandler(this.Button11_Click);
????????????this.Button12.Click?+=?new?System.EventHandler(this.Button12_Click);
????????????this.Button13.Click?+=?new?System.EventHandler(this.Button13_Click);
????????????this.Button14.Click?+=?new?System.EventHandler(this.Button14_Click);
????????????this.Button15.Click?+=?new?System.EventHandler(this.Button15_Click);
????????????this.Load?+=?new?System.EventHandler(this.Page_Load);
????????}
????????#endregion
????????1.如何用WMI獲得指定磁盤的容量#region?1.如何用WMI獲得指定磁盤的容量
????????private?string?DriveType(string?type)
????????{
????????????string?rtntype="";
????????????switch?(type)
????????????{
????????????????case?"1":
????????????????????rtntype="Not?Type";
????????????????????break;
????????????????case?"2":
????????????????????rtntype="Floppy?disk";
????????????????????break;
????????????????case?"3":
????????????????????rtntype="Hard?disk";
????????????????????break;
????????????????case?"4":
????????????????????rtntype="Removable?drive?or?network?drive";
????????????????????break;
????????????????case?"5":
????????????????????rtntype="CD-ROM";
????????????????????break;
????????????????case?"6":
????????????????????rtntype="RAM?disk";
????????????????????break;
????????????????default?:
????????????????????break;
????????????}
????????????return?rtntype;
????????}
????????private?void?Button1_Click(object?sender,?System.EventArgs?e)
????????{
????????????SelectQuery?query=new?SelectQuery("Select?*?From?Win32_LogicalDisk");?
????????????ManagementObjectSearcher?searcher=new?ManagementObjectSearcher(query);?
????????????foreach(ManagementBaseObject?disk?in?searcher.Get())?
????????????{?
????????????????Response.Write(disk["Name"]?+"?"+DriveType(disk["DriveType"].ToString())?+?"?"?+?disk["VolumeName"]+"<br>");?
????????????}
????????}
????????#endregion
????????2.如何用WMI獲得指定磁盤的容量#region?2.如何用WMI獲得指定磁盤的容量
????????private?void?Button2_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementObject?disk?=?new?ManagementObject("win32_logicaldisk.deviceid=/"c:/"");?
????????????disk.Get();?
????????????Response.Write("Logical?Disk?Size?=?"?+?disk["Size"]?+?"?bytes");?????????????
????????}
????????#endregion
????????3.如何列出機器中所有的共享資源#region?3.如何列出機器中所有的共享資源
????????private?void?Button3_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementObjectSearcher?searcher?=?new?ManagementObjectSearcher("SELECT?*?FROM?Win32_share");?
????????????foreach?(ManagementObject?share?in?searcher.Get())?
????????????{?
????????????????Response.Write(share.GetText(TextFormat.Mof));?
????????????}?
????????}
????????#endregion
????????4.怎樣寫程控制讓系統中的某個文件夾共享或取消共享#region?4.怎樣寫程控制讓系統中的某個文件夾共享或取消共享
????????private?void?Button4_Click(object?sender,?System.EventArgs?e)
????????{
????????????/**//*首先,這需要以有相應權限的用戶登錄系統才行
????????????將?
????????????object[]?obj?=?{"C://Temp","我的共享",0,10,"Dot?Net?實現的共享",""};?
????????????改為?
????????????object[]?obj?=?{"C://Temp","我的共享",0,null,"Dot?Net?實現的共享",""};?
????????????就可以實現授權給最多用戶了。
????????????*/
????????????ManagementClass?_class?=?new?ManagementClass(new?ManagementPath("Win32_Share"));
????????????object[]?obj?=?{"C://Temp","我的共享",0,10,"Dot?Net?實現的共享",""};
????????????_class.InvokeMethod("create",obj);?
????????}
????????#endregion
????????5.如何獲得系統服務的運行狀態#region?5.如何獲得系統服務的運行狀態
????????private?void?Button5_Click(object?sender,?System.EventArgs?e)
????????{
????????????string[]?lvData?=??new?string[4];????????????
????????????ManagementObjectSearcher?searcher?=new?ManagementObjectSearcher("SELECT?*?FROM?Win32_Service");?
????????????foreach?(ManagementObject?mo?in?searcher.Get())?
????????????{?
????????????????lvData[0]?=?mo["Name"].ToString();?
????????????????lvData[1]?=?mo["StartMode"].ToString();?
????????????????if?(mo["Started"].Equals(true))?
????????????????????lvData[2]?=?"Started";?
????????????????else?
????????????????????lvData[2]?=?"Stop";?
????????????????lvData[3]?=?mo["StartName"].ToString();?
????????????????Response.Write(lvData[0]+lvData[1]+lvData[2]+lvData[3]);????????????????????
????????????}?????????????
????????}
????????#endregion
????????6.通過WMI修改IP,而實現不用重新啟動#region?6.通過WMI修改IP,而實現不用重新啟動
????????private?void?Button6_Click(object?sender,?System.EventArgs?e)
????????{
????????????ReportIP();?
????????????//?SwitchToDHCP();?
????????????SwitchToprivate();?
????????????Thread.Sleep(?5000?);?
????????????ReportIP();?
????????????Response.Write(?"end."?);
????????}????????
????????
????????private?void?SwitchToDHCP()?
????????{?
????????????ManagementBaseObject?inPar?=?null;?
????????????ManagementBaseObject?outPar?=?null;?
????????????ManagementClass?mc?=?new?ManagementClass("Win32_NetworkAdapterConfiguration");?
????????????ManagementObjectCollection?moc?=?mc.GetInstances();?
????????????foreach(?ManagementObject?mo?in?moc?)?
????????????{?
????????????????if(?!?(bool)?mo["IPEnabled"]?)?
????????????????????continue;?
????????????????inPar?=?mo.GetMethodParameters("EnableDHCP");?
????????????????outPar?=?mo.InvokeMethod(?"EnableDHCP",?inPar,?null?);?
????????????????break;?
????????????}?
????????}?
????????private?void?SwitchToprivate()?
????????{?
????????????ManagementBaseObject?inPar?=?null;?
????????????ManagementBaseObject?outPar?=?null;?
????????????ManagementClass?mc?=?new?ManagementClass("Win32_NetworkAdapterConfiguration");?
????????????ManagementObjectCollection?moc?=?mc.GetInstances();?
????????????foreach(?ManagementObject?mo?in?moc?)?
????????????{?
????????????????if(?!?(bool)?mo[?"IPEnabled"?]?)?
????????????????????continue;?
????????????????inPar?=?mo.GetMethodParameters(?"Enableprivate"?);?
????????????????inPar["IPAddress"]?=?new?string[]?{?"192.168.1.1"?};?
????????????????inPar["SubnetMask"]?=?new?string[]?{?"255.255.255.0"?};?
????????????????outPar?=?mo.InvokeMethod(?"Enableprivate",?inPar,?null?);?
????????????????break;?
????????????}?
????????}?
????????private?void?ReportIP()?
????????{?
????????????Response.Write(?"******?Current?IP?addresses:"?);?
????????????ManagementClass?mc?=?new?ManagementClass("Win32_NetworkAdapterConfiguration");?
????????????ManagementObjectCollection?moc?=?mc.GetInstances();?
????????????foreach(?ManagementObject?mo?in?moc?)?
????????????{?
????????????????if(?!?(bool)?mo[?"IPEnabled"?]?)?
????????????????????continue;?
????????????????string?str="{0}/n?SVC:?'{1}'?MAC:?[{2}]";
????????????????str=?string.Format(mo["Caption"].ToString(),?mo["ServiceName"].ToString(),mo["MACAddress"].ToString());
????????????????Response.Write(str);?
????????????????string[]?addresses?=?(string[])?mo[?"IPAddress"?];?
????????????????string[]?subnets?=?(string[])?mo[?"IPSubnet"?];?
????????????????Response.Write(?"?Addresses?:"?);?
????????????????foreach(string?sad?in?addresses)?
????????????????????Response.Write(sad+"<br>");?
????????????????Response.Write(?"?Subnets?:"?);?
????????????????foreach(string?sub?in?subnets?)?
????????????????????Response.Write(sub+"<br>");?
????????????}?
????????}
????????#endregion
????????7.如何利用WMI遠程重啟遠程計算機#region?7.如何利用WMI遠程重啟遠程計算機
????????private?void?Button7_Click(object?sender,?System.EventArgs?e)
????????{
????????????Response.Write("Computer?details?retrieved?using?Windows?Management?Instrumentation?(WMI)");?
????????????Response.Write("mailto:singlepine@hotmail.com");?
????????????Response.Write("=========================================================================");??
????????????//連接遠程計算機?
????????????ConnectionOptions?co?=?new?ConnectionOptions();?
????????????co.Username?=?"john";?
????????????co.Password?=?"john";?
????????????System.Management.ManagementScope?ms?=?new?System.Management.ManagementScope("192.168.1.2//root//cimv2",?co);???????
????????????//查詢遠程計算機?
????????????System.Management.ObjectQuery?oq?=?new?System.Management.ObjectQuery("SELECT?*?FROM?Win32_OperatingSystem");?
???????????????????
????????????ManagementObjectSearcher?query1?=?new?ManagementObjectSearcher(ms,oq);?
????????????ManagementObjectCollection?queryCollection1?=?query1.Get();?????????????
????????????foreach(?ManagementObject?mo?in?queryCollection1?)??
????????????{?
????????????????string[]?ss={""};?
????????????????mo.InvokeMethod("Reboot",ss);?
????????????????Response.Write(mo.ToString());?
????????????}?
????????}
????????#endregion
????????8.利用WMI創建一個新的進程#region?8.利用WMI創建一個新的進程
????????private?void?Button8_Click(object?sender,?System.EventArgs?e)
????????{
????????????//Get?the?object?on?which?the?method?will?be?invoked?
????????????ManagementClass?processClass?=?new?ManagementClass("Win32_Process");?
????????????//Get?an?input?parameters?object?for?this?method?
????????????ManagementBaseObject?inParams?=?processClass.GetMethodParameters("Create");?
????????????//Fill?in?input?parameter?values?
????????????inParams["CommandLine"]?=?"calc.exe";?
????????????//Execute?the?method?
????????????ManagementBaseObject?outParams?=?processClass.InvokeMethod?("Create",?inParams,?null);?
????????????//Display?results?
????????????//Note:?The?return?code?of?the?method?is?provided?in?the?"returnvalue"?property?of?the?outParams?object?
????????????Response.Write("Creation?of?calculator?process?returned:?"?+?outParams["returnvalue"]);?
????????????Response.Write("Process?ID:?"?+?outParams["processId"]);?
????????}
????????#endregion
????????9.如何通過WMI終止一個進程#region?9.如何通過WMI終止一個進程
????????private?void?Button9_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementObject?service?=??
????????????????new?ManagementObject("win32_service=/"winmgmt/"");?
????????????InvokeMethodOptions?options?=?new?InvokeMethodOptions();?
????????????options.Timeout?=?new?TimeSpan(0,0,0,5);??
????????????ManagementBaseObject?outParams?=?service.InvokeMethod("StopService",?null,?options);
????????????Response.Write("Return?Status?=?"?+?outParams["Returnvalue"]);
????????}
????????#endregion
????????10.如何用WMI?來獲取遠程機器的目錄以及文件#region?10.如何用WMI?來獲取遠程機器的目錄以及文件
????????private?void?Button10_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementObject?disk?=?new?ManagementObject(
????????????????"win32_logicaldisk.deviceid=/"c:/"");
????????????disk.Get();
????????????Response.Write("Logical?Disk?Size?=?"?+?disk["Size"]?+?"?bytes");
????????}
????????#endregion
????????11.網卡的MAC地址#region?11.網卡的MAC地址
????????private?void?Button11_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementClass?mc?=?new?ManagementClass("Win32_NetworkAdapterConfiguration");?
????????????ManagementObjectCollection?moc?=?mc.GetInstances();?
????????????foreach(ManagementObject?mo?in?moc)?
????????????{?
????????????????if((bool)mo["IPEnabled"]?==?true)?
????????????????????Response.Write("MAC?address"+mo["MacAddress"].ToString()+"<br>");?
????????????????mo.Dispose();?
????????????}?
????????}
????????#endregion
????????12.CPU的系列號#region?12.CPU的系列號?
????????private?void?Button12_Click(object?sender,?System.EventArgs?e)
????????{
????????????string?cpuInfo?=?"";//cpu序列號?
????????????ManagementClass?cimobject?=?new?ManagementClass("Win32_Processor");?
????????????ManagementObjectCollection?moc?=?cimobject.GetInstances();?
????????????foreach(ManagementObject?mo?in?moc)?
????????????{?
????????????????cpuInfo?=?mo.Properties["ProcessorId"].Value.ToString();?
????????????????Response.Write(cpuInfo);
????????????}?
????????}
????????#endregion
????????13.主板的系列號#region?13.主板的系列號
????????private?void?Button13_Click(object?sender,?System.EventArgs?e)
????????{
????????????ManagementObjectSearcher?searcher=new?ManagementObjectSearcher("SELECT?*?FROM?Win32_BaseBoard");
????????????foreach(ManagementObject?share?in?searcher.Get())
????????????{
????????????????Response.Write("主板制造商:"?+?share["Manufacturer"].ToString())?;
????????????????Response.Write("型號:"?+share["Product"].ToString())?;
????????????????Response.Write("序列號:"+share["SerialNumber"].ToString())?;
????????????}
????????}
????????#endregion
????????14.獲取硬盤ID#region?14.獲取硬盤ID
????????private?void?Button14_Click(object?sender,?System.EventArgs?e)
????????{
????????????String?HDid;?
????????????ManagementClass?cimobject?=?new?ManagementClass("Win32_DiskDrive");?
????????????ManagementObjectCollection?moc?=?cimobject.GetInstances();?
????????????foreach(ManagementObject?mo?in?moc)?
????????????{?
????????????????HDid?=?(string)mo.Properties["Model"].Value;?
????????????????Response.Write(HDid);??
????????????}?
????????}
????????#endregion
????????15.獲取本機的用戶列表#region?15.獲取本機的用戶列表
????????private?void?Button15_Click(object?sender,?System.EventArgs?e)
????????{
????????????SelectQuery?query?=?new?SelectQuery("SELECT?*?FROM?Win32_UserAccount");
????????????ManagementObjectSearcher?searcher?=?new?ManagementObjectSearcher(query);
????????????foreach(ManagementObject?os?in?searcher.Get())
????????????{
????????????????Response.Write(os["Name"]);
????????????}
????????}
????????#endregion
????} ?
總結
- 上一篇: Lucene.net中文分词探究
- 下一篇: 用ASP.NET如何读取NT用户名