2009-10-08 15 views
8

Tengo una clase que extrae información del modelo (información de hardware) un código máquina local es de esta manera:Obtener etiqueta de servicio de la máquina Dell usando .net?

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 

Cualquier posibilidad de obtener una etiqueta de servicio de WMI? De forma parte del cliente puedo mostrar los valores de este modo:

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 

Respuesta

2

Creo que se necesita para obtener el número de serie de la BIOS como esto:

Select SerialNumber From Win32_BIOS 

En Dell Creo que esto se corresponde con la etiqueta de servicio

+0

Hola Jason me hizo algo como esto: objs = Nueva ManagementObjectSearcher ("SELECT * FROM Win32_SystemEnclosure") entonces yo era capaz de sacar el número de serie de este modo: Para Cada objMgmt En objS.Get m_strSerial = objMgmt ("número de serie"). ToString() Siguiente Supongo que mi pregunta es ¿cuál es la diferencia entre WIN32_BIOS y Win32_SystemEnclosure? Incluso lo ejecuté en una máquina reconstruida y funciona ... – JonH

+0

Por lo que puedo decir, Win32_SsytemEnclosure se basa en el cuadro físico en el que está integrada la computadora, mientras que Win32_BIOS es el chip en la placa base. Mi teoría es que si mueves una placa base de su caja original a otra, las etiquetas de servicio que obtienes de BIOS y SystemEnclosure pueden ser diferentes, pero no he probado esto. Probablemente sea seguro suponer que el número de serie de cualquiera de las clases sería exacto. –

+0

Gracias hombre trabaja un regalo y tiene sentido. Awesome :) – JonH

1

Aquí hay un código de C# que debe recibirla

Aquí estoy recibiendo de Win32_ComputerSystem pero si lo desea puede convertir fácilemte que se ejecute 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"]; 
     } 
    } 
} 
+0

Él ya lo está haciendo. Ninguno de los valores que está consultando se relaciona con la etiqueta de servicio de la máquina. –

+0

Jason Publiqué esto arriba: Hola Jason Hice algo como esto: objS = New ManagementObjectSearcher ("SELECCIONAR * FROM Win32_SystemEnclosure") Luego pude extraer el número de serie así: Para cada objMgmt En objS.Get m_strSerial = objMgmt ("número de serie"). ToString() Luego, supongo que mi pregunta es ¿cuál es la diferencia entre WIN32_BIOS y Win32_SystemEnclosure? Incluso lo ejecuté en una máquina reconstruida y funciona ... – JonH

0
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(); 
     } 
    } 
} 
Cuestiones relacionadas