Получение метки обслуживания с компьютера Dell с использованием .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

Есть ли возможность получить метку обслуживания от 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

person JonH    schedule 08.10.2009    source источник


Ответы (3)


Думаю, вам нужно получить серийный номер из BIOS вот так:

Select SerialNumber From Win32_BIOS

На Dell я считаю, что это соответствует метке обслуживания

person Jason Miesionczek    schedule 08.10.2009
comment
Привет, Джейсон, я сделал что-то вроде этого: objS = New ManagementObjectSearcher (SELECT * FROM Win32_SystemEnclosure) Затем я смог вытащить серийный номер следующим образом: For Each objMgmt In objS.Get m_strSerial = objMgmt (serialnumber) .ToString () Далее, я думаю у меня вопрос: в чем разница между WIN32_BIOS и Win32_SystemEnclosure? Я даже запускал его на восстановленной машине, и он работает ... - person JonH; 08.10.2009
comment
Насколько я могу судить, Win32_SsytemEnclosure основан на физическом блоке, в который встроен компьютер, тогда как Win32_BIOS - это чип на материнской плате. Моя теория заключается в том, что если вы переместите материнскую плату из исходного корпуса в другой, тогда служебные теги, которые вы получаете из BIOS и SystemEnclosure, могут быть разными, но я не тестировал это. Вероятно, можно с уверенностью предположить, что серийный номер любого класса будет точным. - person Jason Miesionczek; 08.10.2009
comment
Или используйте C # для вызова этого вывода DOS wmic PATH WIN32_BIOS get SerialNumber /format:List - person Junior Mayhé; 25.11.2016

Вот код 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"];
        }
    }
}
person EKS    schedule 08.10.2009
comment
Он уже этим занимается. Ни одно из запрашиваемых значений не относится к сервисной метке машины. - person Jason Miesionczek; 08.10.2009
comment
Джейсон. Я разместил это выше: Привет, Джейсон. Я сделал что-то вроде этого: objS = New ManagementObjectSearcher (SELECT * FROM Win32_SystemEnclosure) Затем я смог получить серийный номер следующим образом: For Each objMgmt In objS.Get m_strSerial = objMgmt (serialnumber). ToString () Далее, я думаю, мой вопрос в том, в чем разница между WIN32_BIOS и Win32_SystemEnclosure? Я даже запускал его на восстановленной машине, и он работает ... - person JonH; 08.10.2009

Я написал программу, которая восстанавливает сервисную метку Dell, экспресс-код и ссылки на драйверы и информацию о гарантии. Вы можете найти код C # по адресу

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

Надеюсь, это поможет другим.

person Sam Plus Plus    schedule 07.04.2011