Rebooting a Remote Server using WMI

Windows Management Instrumentation or WMI holds many surprises and features but when my colleague's machine rebooted even I was surprised. Using WMI allows you to create management type applications and of course, being able to reboot a remote computer is a necessary feature. Of course, it requires you have an admin logon account to the machine.

In this code written with Beta 2, you will need to change the username, password, and ip address to access your own machines.

While WMI is a great feature it may be exposed as a security risk. If you have no intention of using its features on your network you may want to disable it. Enjoy.

//WMI3
//Demonstrates how to remotely reboot a computer on the network
//Written 02/01/02 By John O'Donnell - [email protected]
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("Written 02/01/02 By John O'Donnell - [email protected]");
            Console.WriteLine("=================================");
            //Connect to the 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);
            //Query remote computer across the connection
            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());
            }
        }
    }
}