tags:

views:

718

answers:

3

Hello folks I've got a class that pulls model information (hardware info) for a local machine code is like so:

   Imports System.Management

Public Class clsWMI
    Private objOS As ManagementObjectSearcher
    Private objCS As ManagementObjectSearcher
    Private objMgmt As ManagementObject
    Private m_strComputerName As String
    Private m_strManufacturer As String
    Private m_StrModel As String
    Private m_strOSName As String
    Private m_strOSVersion As String
    Private m_strSystemType As String
    Private m_strTPM As String
    Private m_strWindowsDir As String


    Public Sub New()

        objOS = New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
        objCS = New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
        For Each objMgmt In objOS.Get


            m_strOSName = objMgmt("name").ToString()
            m_strOSVersion = objMgmt("version").ToString()
            m_strComputerName = objMgmt("csname").ToString()
            m_strWindowsDir = objMgmt("windowsdirectory").ToString()
        Next

        For Each objMgmt In objCS.Get
            m_strManufacturer = objMgmt("manufacturer").ToString()
            m_StrModel = objMgmt("model").ToString()
            m_strSystemType = objMgmt("systemtype").ToString
            m_strTPM = objMgmt("totalphysicalmemory").ToString()
        Next
    End Sub

    Public ReadOnly Property ComputerName()
        Get
            ComputerName = m_strComputerName
        End Get

    End Property
    Public ReadOnly Property Manufacturer()
        Get
            Manufacturer = m_strManufacturer
        End Get

    End Property
    Public ReadOnly Property Model()
        Get
            Model = m_StrModel
        End Get

    End Property
    Public ReadOnly Property OsName()
        Get
            OsName = m_strOSName
        End Get

    End Property

    Public ReadOnly Property OSVersion()
        Get
            OSVersion = m_strOSVersion
        End Get

    End Property
    Public ReadOnly Property SystemType()
        Get
            SystemType = m_strSystemType
        End Get

    End Property
    Public ReadOnly Property TotalPhysicalMemory()
        Get
            TotalPhysicalMemory = m_strTPM
        End Get

    End Property

    Public ReadOnly Property WindowsDirectory()
        Get
            WindowsDirectory = m_strWindowsDir
        End Get

    End Property

End Class

Any possibility to get a service tag from WMI ? From the client side form I display values like so:

   Dim objWMI As New clsWMI()
        With objWMI
            Debug.WriteLine("Computer Name = " & .ComputerName)
            Me.Label1.Text = "Name: " & .ComputerName
            Debug.WriteLine("Computer Manufacturer = " & .Manufacturer)
            Me.Label2.Text = "Manufacturer: " & .Manufacturer
            Debug.WriteLine("Computer Model = " & .Model)
            Me.Label3.Text = "Model: " & .Model
            Debug.WriteLine("OS Name = " & .OsName)
            Me.Label4.Text = "OS Name: " & .OsName
            Debug.WriteLine("OS Version = " & .OSVersion)
            Me.Label5.Text = "OS VERSION: " & .OSVersion

            Debug.WriteLine("System Type = " & .SystemType)
            Me.Label6.Text = "System type = " & .SystemType

            Debug.WriteLine("Total Physical Memory = " & .TotalPhysicalMemory)
            Me.Label7.Text = "Memory: " & .TotalPhysicalMemory
            Debug.WriteLine("Windows Directory = " & .WindowsDirectory)
            Me.Label8.Text = "Win Directory: " & .WindowsDirectory
        End With
+1  A: 

I think you need to get the serial number from the BIOS like this:

Select SerialNumber From Win32_BIOS

On Dell's I believe this corresponds to the service tag

Jason Miesionczek
Hi Jason I did something like this: objS = New ManagementObjectSearcher("SELECT * FROM Win32_SystemEnclosure")Then I was able to pull the serial number like so: For Each objMgmt In objS.Get m_strSerial = objMgmt("serialnumber").ToString() NextI guess my question is what is the different between WIN32_BIOS and Win32_SystemEnclosure ? I even ran it on a rebuilt machine and it works...
JonH
From what i can tell, Win32_SsytemEnclosure is based on the physical box that the computer is built in, whereas Win32_BIOS is the chip on the motherboard. My theory is if you move a motherboard from its original case to another case, then the service tags you get from BIOS and SystemEnclosure might be different, but i have not tested this. It's probably safe to assume that the serial number from either class would be accurate.
Jason Miesionczek
Thanks man works a treat and makes sense. Awesome :)
JonH
+1  A: 

Here is some C# code that should get it

Here im getting from Win32_ComputerSystem but if you desire you can easly convert it to run againt Win32_Bios

void GetComputerSystem()
{
        // http://msdn.microsoft.com/en-us/library/aa394102(VS.85).aspx
        ManagementObjectCollection oReturnCollection;
     try
     {
      ObjectQuery query = new ObjectQuery("Select UserName,Name,Manufacturer,Model from Win32_ComputerSystem");
      ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(gManager, query);
      oReturnCollection = oSearcher.Get();
      oSearcher.Dispose();
     }
     catch
     {
      gHasError = true;
      return;
     }

        //loop through found drives and write out info
     foreach (ManagementObject oReturn in oReturnCollection)
     {
        // Disk name  
      object oLoggedInUser = oReturn["UserName"];
      if (oLoggedInUser == null)
       gOSInfo.UserName = "None";
      else
       gOSInfo.UserName = (string)oLoggedInUser;

      string Manufacturer = (string)oReturn["Manufacturer"];
      string Model = (string)oReturn["Model"];
     }
    }
}
EKS
He is already doing that. None of the values you are querying relate to the service tag of the machine.
Jason Miesionczek
Jason I posted this above:Hi Jason I did something like this: objS = New ManagementObjectSearcher("SELECT * FROM Win32_SystemEnclosure") Then I was able to pull the serial number like so: For Each objMgmt In objS.Get m_strSerial = objMgmt("serialnumber").ToString() Next I guess my question is what is the different between WIN32_BIOS and Win32_SystemEnclosure ? I even ran it on a rebuilt machine and it works...
JonH
A: 

namespace Con2 { using System; using System.Management; using System.IO;

class Program
{
    public static string computerName = "localhost";

    // a central place to store the info, 
    public static string inventFile = @"\\Wdstorage\public\install\Inventfile.txt";

    static void Main(string[] args)
    {
        try
        {
            FileStream fileStream = new FileStream(inventFile, FileMode.Append);

            if (File.Exists(inventFile))
            {
                using (StreamWriter sw = new StreamWriter(fileStream))
                {
                    sw.Write("Added: " + DateTime.Now.ToString());

                    ManagementScope scope = new ManagementScope(@"\\" + computerName + @"\root\cimv2");
                    scope.Connect();

                    ObjectQuery query = new ObjectQuery("Select * From Win32_SystemEnclosure");
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
                    ManagementObjectCollection objColl = searcher.Get();

                    foreach (ManagementObject o in objColl)
                    {
                        Console.WriteLine("ServiceTag=" + o["SerialNumber"].ToString());
                        sw.Write(",  ServiceTag=" + o["SerialNumber"].ToString());
                    }

                    query = new ObjectQuery("Select * from Win32_ComputerSystem");
                    searcher = new ManagementObjectSearcher(scope, query);

                    objColl = searcher.Get();

                    foreach (ManagementObject oReturn in objColl)
                    {
                        string Manufacturer = (string)oReturn["Manufacturer"];
                        sw.Write(", Manufacturer=" + (string)oReturn["Manufacturer"]);

                        string Model = (string)oReturn["Model"];
                        sw.Write(", Model=" + (string)oReturn["Model"]);

                        string name = (string)oReturn["Name"];
                        sw.Write(", name=" + (string)oReturn["name"]);

                        string userName = (string)oReturn["UserName"];
                        sw.Write(", userName=" + (string)oReturn["userName"]);

                        Console.WriteLine((string)oReturn["Manufacturer"]);
                        Console.WriteLine((string)oReturn["Model"]);
                        Console.WriteLine((string)oReturn["Name"]);
                        Console.WriteLine((string)oReturn["UserName"]);

                    }
                    sw.WriteLine();
                    sw.Close();
                }
            }
            // else 
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error :" + ex.Message );
            Console.WriteLine("Prova att köra programmet en gång till..");
        }

        Console.WriteLine("");
        Console.Write("<Enter> to quit :");
        Console.ReadLine();
    }
}

}

Johan