Tuesday, January 26, 2010

Finding Computer Information with WMI

Using WMI you can find various information about a HOST PC. In C# some simple calls can pull up various details in regards to a PC including OS info, Memory information, Description, Manufacturer, Model and various other details.


private void ComputerDetails(

string temp1)

{

if (this.treePing.SelectedNode.ForeColor ==

Color.LawnGreen || this.treePing.SelectedNode.ForeColor ==

Color.Black)

{

toolStripStatusLabel1.Text = temp1 +

" Information: ";

try

{

ConnectionOptions opt = new ConnectionOptions();

ManagementPath p = new ManagementPath("\\\\" + temp1 + "\\root\\cimv2");

ConnectionOptions oConn = new ConnectionOptions();

oConn.Impersonation = ImpersonationLevel.Impersonate;

ManagementScope oMs =

new System.Management.ManagementScope(p, oConn);

System.Management.ObjectQuery oQuery =

new System.Management.ObjectQuery("select * from Win32_OperatingSystem");

System.Management.ObjectQuery oQuery2 =

new System.Management.ObjectQuery("select * from Win32_ComputerSystem");

System.Management.ObjectQuery oQuery3 =

new System.Management.ObjectQuery("select * from Win32_LogicalDisk");

ManagementObjectSearcher oSearcher =

new ManagementObjectSearcher(oMs, oQuery);

ManagementObjectSearcher oSearcher2 =

new ManagementObjectSearcher(oMs, oQuery2);

ManagementObjectSearcher oSearcher3 =

new ManagementObjectSearcher(oMs, oQuery3);

ManagementObjectCollection oReturnCollection = oSearcher.Get();

ManagementObjectCollection oReturnCollection2 = oSearcher2.Get();

ManagementObjectCollection oReturnCollection3 = oSearcher3.Get();

txtPing.Text = "-----------------------------------------------------";

txtPing.Text += "\r\n";

txtPing.Text += "Details: " + temp1;

txtPing.Text += "\r\n";

txtPing.Text += "-----------------------------------------------------";

txtPing.Text += "\r\n";

foreach (ManagementObject oReturn in oReturnCollection)

{

txtPing.Text += "Description: " + oReturn["Description"].ToString() + "\r\n";

foreach (ManagementObject oReturn2 in oReturnCollection2)

{

txtPing.Text += "Manufacturer: " + oReturn2["Manufacturer"].ToString() + "\r\n";

txtPing.Text += "Model: " + oReturn2["Model"].ToString() + "\r\n";

txtPing.Text += "System Type: " + oReturn2["systemtype"].ToString() + "\r\n";

txtPing.Text += "Total Physical Memory: " +

Convert.ToDecimal(oReturn2["TotalPhysicalMemory"]) / 1000000000 + " GB \r\n";

}

txtPing.Text += "Free Physical Memory: " +

Convert.ToDecimal(oReturn["FreePhysicalMemory"])/1000000 + " GB \r\n";

txtPing.Text += "Free Virtual Memory: " +

Convert.ToDecimal(oReturn["FreeVirtualMemory"])/1000000 + " GB \r\n";

//loop through found drives and write out info

foreach (ManagementObject manobj in oReturnCollection3)

{

double FreeSpace22 = Convert.ToDouble(manobj["FreeSpace"]) / 1000000000;

double DiskSize22 = Convert.ToDouble(manobj["Size"]) / 1000000000;

double freespace2 = double.Parse(FreeSpace22.ToString());

double disksize2 = double.Parse(DiskSize22.ToString());

double pctfree2 = freespace2 / disksize2;

int lengthdiff = disksize2.ToString("N0").Length -

freespace2.ToString("N0").Length;

txtPing.Text += "For drive: " + manobj["name"].ToString() + ": \r\n";

double FreeSpaceSize = Convert.ToDouble(manobj["Size"]) / 1000000000;

txtPing.Text += "Size: " + FreeSpaceSize.ToString() + " GB \r\n";

switch (lengthdiff)

{

case 0:

txtPing.Text += "Free space: " + freespace2.ToString("N0") +

" GB \r\n";

break;

case 1:

txtPing.Text += "Free space: " + freespace2.ToString("N0")

+ " GB \r\n";

break;

case 2:

txtPing.Text += "Free space: " + freespace2.ToString("N0")

+ " GB \r\n";

break;

case 3:

txtPing.Text += "Free space: " + freespace2.ToString("N0")

+ " GB \r\n";

break;

default:

txtPing.Text += "Free space: " + freespace2.ToString("N0")

+ " GB \r\n";

break;

}

if (pctfree2 < 0.10)

{

mnuNotify.ShowBalloonTip(

5000,

"NetPinger 2010: " + temp1,

temp1 + " has low disk space on drive " +

manobj["name"].ToString() +

" ~ " +

pctfree2.ToString("P"),

ToolTipIcon.Warning);

}

txtPing.Text += "Percentage Free: " + pctfree2.ToString("P") + "\r\n";

}

txtPing.Text += "Install Date/Time: " + ConvertDate(oReturn["InstallDate"].ToString()) + "\r\n";

txtPing.Text += "Last Bootup: " +

ConvertDate(oReturn["LastBootUpTime"].ToString()) + "\r\n";

txtPing.Text += @"Local Date/Time: " +

ConvertDate(oReturn["LocalDateTime"].ToString()) + "\r\n";

txtPing.Text += "Organization: " +

oReturn["Organization"].ToString() + "\r\n";

txtPing.Text += "Name: " + oReturn["Name"].ToString() + "\r\n";

txtPing.Text += "OS Language: " + oReturn["OSLanguage"].ToString() + "\r\n";

txtPing.Text += "OS Type: " + oReturn["OSType"].ToString() + "\r\n";

txtPing.Text += "OS Directory: " + oReturn["WindowsDirectory"].ToString() + "\r\n";

txtPing.Text += "Registered User: " +

oReturn["RegisteredUser"].ToString() + "\r\n";

txtPing.Text += "Serial Number: " +

oReturn["SerialNumber"].ToString() + "\r\n";

txtPing.Text += "ServicePack Major Version: " +

oReturn["ServicePackMajorVersion"].ToString() + "\r\n";

txtPing.Text += "ServicePack Minor Version: " +

oReturn["ServicePackMinorVersion"].ToString() + "\r\n";

}

}

catch (Exception ex)

{

mnuNotify.ShowBalloonTip(

5000,

"NetPinger 2010: " + temp1,

ex.Message,

ToolTipIcon.Warning);

toolStripStatusLabel1.Text =

ex.Message + " , details aren't available";

}

}

else

{

txtPing.Text = "Sorry but device: " + temp1 + " is currenty unavilable";

}

}

private string ConvertDate(String date1)

{

// MessageBox.Show(date1);

String DateVal1 = date1.Substring(0, 4);

String DateVal2 = date1.Substring(4, 2);

String DateVal3 = date1.Substring(6, 2);

String DateVal4 = date1.Substring(8, 2);

String DateVal5 = date1.Substring(10, 2);

String DateVal =

DateVal2 + @"/" + DateVal3 + @"/" +

DateVal1 + ", " + DateVal4 + ":" +

DateVal5;

// MessageBox.Show(DateVal);

return DateVal;

}

No comments:

Post a Comment