1. What is WMI
WMI is a shorthand for English Windows Management instrumentation, which functions primarily by accessing information and services from local hosts, and managing remote computers (you must have sufficient privileges), such as restarting, shutting down, shutting down processes, creating processes, and so on.
2. How do I get local disk information using WMI?
First you create a project in Vs.net, and then reference a. NET assembly in the Add Reference: System.Management.dll so that your project can use WMI. The code is as follows:
Using System;
Using System.Management;
Class Sample_managementobject
{
public static int Main (string[] args)
{
SelectQuery query=new selectquery ("SELECT * from Win32_LogicalDisk");
ManagementObjectSearcher searcher=new managementobjectsearcher (query);
foreach (Managementbaseobject disk in searcher. Get ())
{
Console.WriteLine ("\ r \ n" +disk["Name"] + "" +disk["DriveType"] + "" + disk["VolumeName"]);
}
Console.ReadLine ();
return 0;
}
}
The return value of the disk["DriveType"] has the following meaning:
1 No Type
2 floppy disk
3 Hard Disk
4 removable drive or network drive
5 CD-ROM
6 RAM Disk
3. How do I get the capacity of a specified disk with WMI?
Using System;
Using System.Management;
This is example demonstrates reading a property of a managementobject.
Class Sample_managementobject
{
public static int Main (string[] args)
{
ManagementObject disk = new ManagementObject (
"Win32_logicaldisk.deviceid=\" C:\ "");
Disk. Get ();
Console.WriteLine ("Logical Disk size =" + disk["size"] + "bytes");
Console.ReadLine ();
return 0;
}
}
4. How to list all the shared resources in the machine?
Using System;
Using System.Management;
Class TestApp {
[STAThread]
static void Main ()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher (
"SELECT * from Win32_Share");
foreach (ManagementObject share in searcher. Get ())
{
Console.WriteLine (Share. GetText (textformat.mof));
}
}
}
Don't forget to add System.Management in the quote.
5, how to write the control of the system to share or cancel a shared folder.?
First, this requires a user with the appropriate permissions to log on to the system. Then, try the following code:
Using System;
Using System.Management;
Class Createshare
{
public static void Main (string[] args)
{
ManagementClass _class = new ManagementClass (New Managementpath ("Win32_Share"));
object[] obj = {"C:\\Temp", "My Share", 0,10, "Share of Dot Net implementation", ""};
_class. InvokeMethod ("create", obj);
}
}
Will
object[] obj = {"C:\\Temp", "My Share", 0,10, "Share of Dot Net implementation", ""};
To
object[] obj = {"C:\\Temp", "My Share", 0,null, "Share of Dot Net implementation", ""};
You can implement authorization to the maximum number of users.
6. How to get the running state of the system service?
private void GetServices ()
{
Managementobjectcollection querycollection;
string[] Lvdata = new String[4];
Try
{
Querycollection = Getservicecollection ("SELECT * FROM Win32_Service");
foreach (ManagementObject mo in querycollection)
{
Create child node for operating system
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 ();
Create List item
ListViewItem Lvitem = new ListViewItem (lvdata,0);
LISTVIEWSERVICES.ITEMS.ADD (Lvitem);
}
}
catch (Exception e)
{
MessageBox.Show ("Error:" + e);
}
}
7, through WMI to modify the IP, and implementation does not have to reboot?
Using System;
Using System.Management;
Using System.Threading;
Namespace Wmiipchanger
{
Class Ipchanger
{
[Mtathread]
static void Main (string[] args)
{
Reportip ();
Switchtodhcp ();
Switchtostatic ();
Thread.Sleep (5000);
Reportip ();
Console.WriteLine ("End.");
}
static 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
}
}
static void Switchtostatic ()
{
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 ("EnableStatic");
Inpar["IPAddress"] = new string[] {"192.168.1.1"};
inpar["SubnetMask"] = new string[] {"255.255.255.0"};
Outpar = mo. InvokeMethod ("EnableStatic", inpar, NULL);
Break
}
}
static void Reportip ()
{
Console.WriteLine ("Hu Jintao Current IP addresses:");
ManagementClass mc = new ManagementClass ("Win32_NetworkAdapterConfiguration");
Managementobjectcollection MOC = MC. GetInstances ();
foreach (ManagementObject mo in MOC)
{
if (! (bool) mo["ipenabled"])
Continue
Console.WriteLine ("{0}\n SVC: ' {1} ' MAC: [{2}]", (string) mo["Caption"],
(string) mo["ServiceName"], (string) mo["MACAddress");
String[] addresses = (string[]) mo["IPAddress"];
String[] subnets = (string[]) mo["IPSubnet"];
Console.WriteLine ("Addresses:");
foreach (string sad in addresses)
Console.WriteLine ("\ t ' {0} '", sad);
Console.WriteLine ("Subnets:");
foreach (string sub in subnets)
Console.WriteLine ("\ t ' {0} '", sub);
}
}
}
}
8. How do I use WMI to remotely reboot a remote computer?
Using System;
Using System.Management;
Namespace WMI3
{
<summary>
Summary description for Class1.
</summary>
Class Class1
{
static void Main (string[] args)
{
Console.WriteLine ("Computer details retrieved using Windows Management Instrumentation (WMI)");
Console.WriteLine ("Mailto:written%2002/01/02%20by%20john%20o ' Donnell%20-%20csharpconsulting@hotmail.com");
Console.WriteLine ("========================================
=================================");
Connecting to a remote computer
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);
Querying remote computers
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);
Console.WriteLine (Mo. ToString ());
}
}
}
}
9. Create a new process with WMI?
Using System;
Using System.Management;
This sample demonstrates invoking a WMI method using Parameter objects
public class InvokeMethod
{
public static void Main ()
{
Get the "object on which" the method would be invoked
ManagementClass Processclass = new ManagementClass ("Win32_Process");
Get an input Parameters object
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 ' provided in the ' ReturnValue ' property of the Outparams object
Console.WriteLine ("Creation of calculator process returned:" + outparams["returnvalue"]);
Console.WriteLine ("Process ID:" + outparams["ProcessID"]);
}
}
10. How do I terminate a process through WMI?
Using System;
Using System.Management;
This example demonstrates how to stop a system service.
Class Sample_invokemethodoptions
{
public static int Main (string[] args) {
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);
Console.WriteLine ("Return Status =" + outparams["returnvalue"]);
return 0;
}
}
11. How to use WMI to obtain directories and files for remote machines. Like how to list all the files in a directory, or all subdirectories; How to delete, lick, and change files?
Using System;
Using System.Management;
This is example demonstrates reading a property of a managementobject.
Class Sample_managementobject
{
public static int Main (string[] args) {
ManagementObject disk = new ManagementObject (
"Win32_logicaldisk.deviceid=\" C:\ "");
Disk. Get ();
Console.WriteLine ("Logical Disk size =" + disk["size"] + "bytes");
return 0;
}
}
13. Some skills
I use WMI to remove the MAC address of the NIC. The serial number of the CPU, the serial number of the motherboard, the serial number of the motherboard has been checked, the rest is to be verified, because I am using a notebook, the back of the notebook has a serial number of the motherboard, so you can be sure that the motherboard series number is no problem
MAC address of the NIC
SELECT MACAddress from Win32_NetworkAdapter WHERE ((MACAddress are not NULL) and (manufacturer <> ' Microsoft '))
Result: 08:00:46:63:ff:8c
Serial number of the CPU
Select Processorid from Win32_Processor
Result: 3febf9ff00000f24
Serial number of the motherboard
Select SerialNumber from Win32_BIOS
Results: 28362630-3700521
Get the hard drive ID
String Hdid;
ManagementClass cimobject = new ManagementClass ("win32_diskdrive");
Managementobjectcollection MOC = Cimobject. GetInstances ();
foreach (ManagementObject mo in MOC)
{
Hdid = (string) mo. properties["Model"].value;
MessageBox.Show (Hdid);
}
14. An exception handling problem after using WMI
Here's a piece of code I've sorted out.
Managementobjectcollection QueryCollection1;
ConnectionOptions CO = new connectionoptions ();
Co. Username = "Administrator";
Co. Password = "111";
Try
{
System.Management.ManagementScope ms = new System.Management.ManagementScope (@ "\\csnt3\root\cimv2", CO);
System.Management.ObjectQuery OQ = new System.Management.ObjectQuery ("SELECT * from Win32_OperatingSystem");
ManagementObjectSearcher Query1 = new ManagementObjectSearcher (MS,OQ);
QueryCollection1 = Query1. Get ();
foreach (ManagementObject mo in QueryCollection1)
{
String[] ss={""};
Mo. InvokeMethod ("Reboot", SS);
Console.WriteLine (Mo. ToString ());
}
}
catch (Exception ee)
{
Console.WriteLine ("Error");
}
15. Windows Management Instrumentation (WMI) is a scalable system management architecture that employs a unified, standards-based, extensible object-oriented interface. WMI provides you with a standard way to interact with system management information and the underlying WMI API. WMI is used primarily by system management application developers and administrators to access and operating system management information.
WMI can be used to build tools for organizing and managing system information, allowing administrators or system administrators to monitor system activity more closely. For example, you can use WMI to develop an application to call an administrator when a Web server crashes.
Using WMI with the. NET Framework
WMI provides a number of specifications to achieve almost any administrative task for many high-end applications, such as Microsoft Exchange, Microsoft SQL Server, and Microsoft Internet Information Services (IIS). Administrators can perform the following tasks:
? Monitor the health of your application.
? Detect bottlenecks or failures.
? Manage and configure your application.
? Querying application data (using traversal and query of object relationships).
? Perform a seamless local or remote administration operation.
The WMI structure consists of the following three layers:
? Client
Software components that use WMI to perform actions, such as reading administrative details, configuring systems, and subscribing to events.
? Object Manager
The intermediary device between the provider and the client that provides key services such as standard event publishing and subscriptions, event filtering, query engines, and so on.
? Provider
Software components that capture real-time data and return it to the client application, handle method calls from the client, and link the client to the managed infrastructure.
The ability to provide data and events and configure the system seamlessly to clients and applications through well-defined schemas. In the. NET framework, the System.Management namespace provides a common class for traversing the WMI schema.
In addition to the. NET framework, you need to install WMI on your computer to use the administrative features in that namespace. If you are using Windows Millennium Edition, Windows 2000, or Windows XP, WMI is already installed. Otherwise, you will need to download WMI from MSDN.
Access management information with System.Management
The System.Management namespace is the WMI namespace in the. NET framework. This namespace includes the following first-level class objects that support WMI operations:
? ManagementObject or ManagementClass: a single Management object or class, respectively.
? ManagementObjectSearcher: Used to retrieve a collection of ManagementObject or ManagementClass objects based on a specified query or enumeration.
? ManagementEventWatcher: Used to subscribe event notifications from WMI.
? Managementquery: Serves as the basis for all query classes.
The use encoding paradigm for the System.Management class is appropriate for the. NET framework environment, and WMI uses the standard base framework whenever appropriate. For example, WMI uses the. NET collection classes extensively and uses the recommended encoding pattern, such as the "delegate" mode of. NET asynchronous operations. Therefore, developers using the. NET framework can use their current skills to access administrative information about a computer or application.
Please see
Using WMI to manage applications | Retrieving the collection of Management Objects | Query Management Information | Booking and using Administrative events | How to perform Administrative objects | Remote processing and Connectivity Options | Using strongly typed objects
Current 1/2 page
12 Next read the full text