【问题标题】:Getting Service Tag from Dell Machine using .net?使用 .net 从戴尔机器获取服务标签?
【发布时间】:2010-12-05 00:08:59
【问题描述】:

我有一个提取模型信息(硬件信息)的类 对于本地机器代码是这样的:

   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

是否有可能从 WMI 获得服务标签?在客户端表单中,我显示如下值:

   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

【问题讨论】:

    标签: c# vb.net wmi


    【解决方案1】:

    我认为您需要像这样从 BIOS 中获取序列号:

    Select SerialNumber From Win32_BIOS
    

    在戴尔我相信这对应于服务标签

    【讨论】:

    • 嗨 Jason 我做了这样的事情: objS = New ManagementObjectSearcher("SELECT * FROM Win32_SystemEnclosure") 然后我能够像这样提取序列号: For Each objMgmt In objS.Get m_strSerial = objMgmt ("serialnumber").ToString() 接下来我想我的问题是 WIN32_BIOS 和 Win32_SystemEnclosure 有什么不同?我什至在一台重建的机器上运行它,它可以工作......
    • 据我所知,Win32_SsytemEnclosure 是基于计算机内置的物理盒子,而 Win32_BIOS 是主板上的芯片。我的理论是,如果您将主板从原来的机箱移到另一个机箱,那么您从 BIOS 和 SystemEnclosure 获得的服务标签可能会有所不同,但我没有对此进行测试。可以安全地假设任一类别的序列号都是准确的。
    • 或者用C#调用get这个DOS输出wmic PATH WIN32_BIOS get SerialNumber /format:List
    【解决方案2】:

    这是一些应该得到它的 C# 代码

    这里我来自Win32_ComputerSystem,但如果您愿意,您可以轻松地将其转换为再次运行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"];
            }
        }
    }
    

    【讨论】:

    • 他已经在这样做了。您查询的所有值都与机器的服务标签无关。
    • Jason 我在上面发布了这个:嗨,Jason,我做了这样的事情:objS = New ManagementObjectSearcher("SELECT * FROM Win32_SystemEnclosure") 然后我能够像这样提取序列号:对于每个 objMgmt In objS.Get m_strSerial = objMgmt("serialnumber").ToString() 接下来我想我的问题是 WIN32_BIOS 和 Win32_SystemEnclosure 有什么不同?我什至在一台重建的机器上运行它并且它可以工作......
    【解决方案3】:

    我编写了一个程序来恢复戴尔服务标签、快速代码以及指向驱动程序和保修信息的链接。您可以在以下位置找到 C# 代码

    http://samuelhaddad.com/software-projects/dellservicetagfinder/

    我希望这对其他人有所帮助。

    【讨论】:

      【解决方案4】:
      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();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多