System; using System.IO; using System.Management; namespace WMI { class Class1 { static void Main(string[] args) { System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\localhost\\root\\cimv2"); //Pull OPERATING SYSTEM information System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem"); ManagementObjectSearcher query = new ManagementObjectSearcher(ms,oq); ManagementObjectCollection queryCollection = query.Get(); Console.WriteLine("OPERATING SYSTEM"); Console.WriteLine("================"); foreach (ManagementObject mo in queryCollection) { TimeSpan offsetGMT = System.TimeZone.CurrentTimeZone.GetUtcOffset(System.DateTime.Now); //Get GMT offset DateTime installDate = fixdate((String)mo["installdate"]).Subtract(offsetGMT); DateTime lastReboot = fixdate((String)mo["lastbootuptime"]).Subtract(offsetGMT); TimeSpan uptime = DateTime.Now.Subtract(lastReboot); Double totalRAM = Double.Parse(mo["TotalVisibleMemorySize"].ToString())/1024; Double freeRAM = Double.Parse(mo["FreePhysicalMemory"].ToString())/1024; Console.WriteLine("OS: " + mo["caption"].ToString()); Console.WriteLine("Version: " + mo["version"].ToString()); Console.WriteLine("Build: " + mo["buildnumber"].ToString()); Console.WriteLine("Installed On: " + installDate); Console.WriteLine("Last Reboot: " + lastReboot); Console.WriteLine("Uptime: " + uptime.Days + " days, " + uptime.Hours + " hours, " + uptime.Minutes + " minutes"); Console.WriteLine("System Directory: " +mo["WindowsDirectory"].ToString()); Console.WriteLine("Description: " + mo["Description"].ToString()); Console.WriteLine("RAM Total: " + Math.Ceiling(totalRAM) + " MB"); Console.WriteLine("RAM Used: " + Math.Ceiling(totalRAM-freeRAM) + " MB"); } //Pull HARDWARE information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_ComputerSystem"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("HARDWARE"); Console.WriteLine("========"); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("Manufacturer: " + mo["manufacturer"]); Console.WriteLine("Model: " + mo["model"]); Console.WriteLine("User Logged In: " + mo["username"]); } oq = new System.Management.ObjectQuery("SELECT * FROM Win32_BIOS"); //BIOS Information query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("BIOS: " + mo["version"]); } oq = new System.Management.ObjectQuery("SELECT * FROM Win32_SoundDevice"); //Sound Card Information query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("Sound: " + mo["description"]); } oq = new System.Management.ObjectQuery("SELECT * FROM Win32_CDROMDrive"); //CD-ROM Information query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("CD-ROM: " + mo["caption"]); } oq = new System.Management.ObjectQuery("SELECT * FROM Win32_VideoConfiguration"); //Video Information query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { Double videoRAM = Double.Parse(mo["adapterRAM"].ToString())/1024/1024; Console.WriteLine("Video Card: " + mo["adapterChipType"]); Console.WriteLine("Video RAM: " + videoRAM + " MB"); } //Pull REGISTRY information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Registry"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("REGISTRY AND PAGEFILE"); Console.WriteLine("===================="); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("Registry Current Size: " + mo["currentSize"] + " MB"); Console.WriteLine("Registry Max Size: " + mo["maximumSize"] + " MB"); } //Pull PAGEFILE information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_PageFile"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { Console.WriteLine("Initial Pagefile Size: " + mo["initialSize"] + " MB"); Console.WriteLine("Maximum Pagefile Size: " + mo["maximumSize"] + " MB"); } //Pull DRIVE information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_LogicalDisk"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("DRIVES"); Console.WriteLine("======"); foreach (ManagementObject mo in queryCollection) { switch(int.Parse(mo["drivetype"].ToString())) { case 3: double total=Math.Round(double.Parse(mo["size"].ToString())/1024/1024/1024,1); double free=Math.Round(double.Parse(mo["freespace"].ToString())/1024/1024/1024,1); double used=total-free; Console.WriteLine("Drive "+mo["deviceID"]+" (Physical Disk) Used: "+used+"GB Total: "+total+"GB"); break; case 4: Console.WriteLine("Drive "+mo["deviceID"]+" "+mo["providername"]); break; default: Console.WriteLine("Drive "+mo["deviceID"]+" ("+mo["description"]+")"); break; } } //Pull NIC information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("NIC INFORMATION"); Console.WriteLine("==============="); foreach (ManagementObject mo in queryCollection) { if((bool)mo["IPEnabled"] == true) { String[] addresses = (string[])mo["IPAddress"]; String[] subnets = (string[])mo["IPSubnet"]; foreach(String s in addresses) { Console.WriteLine("IP Address: "+s); } Console.WriteLine("NIC: "+mo["description"]); Console.WriteLine("MAC: "+mo["MACAddress"]); Console.WriteLine("DHCP Enabled: "+mo["DHCPenabled"]); } } //Pull SHARES information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Share"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("LOCAL SHARES"); Console.WriteLine("============"); foreach (ManagementObject mo in queryCollection) { Console.WriteLine(mo["name"] + " = " + mo["path"]); } //Pull currently RUNNING SERVICES oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Service"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("SERVICES"); Console.WriteLine("========"); foreach (ManagementObject mo in queryCollection) { Console.WriteLine(mo["description"]); } //Pull PRINTERS information oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("PRINTERS"); Console.WriteLine("========"); foreach (ManagementObject mo in queryCollection) { Console.WriteLine(mo["deviceID"]); } //Pull STARTUP PROGRAMS oq = new System.Management.ObjectQuery("SELECT * FROM Win32_StartupCommand"); query = new ManagementObjectSearcher(ms,oq); queryCollection = query.Get(); Console.WriteLine(); Console.WriteLine("STARTUP PROGRAMS"); Console.WriteLine("================"); foreach (ManagementObject mo in queryCollection) { Console.WriteLine(mo["name"] + " = " + mo["command"]); } Console.WriteLine(); } static DateTime fixdate(String inDate) { //This function fixes the date/time return by WMI into a //human readable format. String yr=inDate.Substring(0,4); String mo=inDate.Substring(4,2); String dy=inDate.Substring(6,2); String hr=inDate.Substring(8,2); String mn=inDate.Substring(10,2); String sc=inDate.Substring(12,2); return DateTime.Parse(mo+"/"+dy+"/"+yr+" "+hr+":"+mn+":"+sc); } } }