Command to get monitor model number and serial number

Pavan 20 Reputation points
2024-02-06T00:41:39.5633333+00:00

simple Command to get monitor model number and serial number just like below User's image

Windows for business | Windows Server | User experience | PowerShell
{count} votes

Answer accepted by question author
  1. Anonymous
    2024-02-06T04:47:11.31+00:00

    Hi Pavan

    You can get the monitor model from the UserFriendlyName property.

    Get-WmiObject WmiMonitorID -Namespace root\wmi |
    Select-Object @{l="Manufacturer";e={[System.Text.Encoding]::ASCII.GetString($_.ManufacturerName)}},
    @{l="Model";e={[System.Text.Encoding]::ASCII.GetString($_.UserFriendlyName)}},
    @{l="SerialNumber";e={[System.Text.Encoding]::ASCII.GetString($_.SerialNumberID)}}
    

    Best Regards,

    Ian Xue


    If the Answer is helpful, please click "Accept Answer" and upvote it.

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    5 people found this answer helpful.

3 additional answers

Sort by: Most helpful
  1. Hudson McNamara 61 Reputation points
    2025-08-18T06:42:31.8566667+00:00

    My 2 cents, which is far more human friendly than the accepted answer imo

    function Get-Normalized { # Filters out padding from EDID codes
        param( [int[]]$In )
        return ( $In | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ } ) -join ""
    }
    
    Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID | ForEach-Object {
        [PSCustomObject]@{
            Manufacturer = Get-Normalized $_.ManufacturerName
            Model        = Get-Normalized $_.UserFriendlyName
            ProductCode  = Get-Normalized $_.ProductCodeID
            Serial       = Get-Normalized $_.SerialNumberID
            Active       = $_.Active
        }
    }
    

    https://gist.github.com/hudsonm62/67983b7ec49dfa2d97b61104ec370722


    If you need more information (resolution, etc.), try the following article (just replace Get-WmiObject with Get-CimInstance!) - https://devblogs.microsoft.com/scripting/use-powershell-to-discover-multi-monitor-information/

    1 person found this answer helpful.

  2. Alxndr 21 Reputation points
    2025-10-25T06:41:58.19+00:00

    There is command line Microsoft Corp. "devcon.exe" program with source code based on SetupAPI, Config Manager. The most complete software-accessible information about a monitor is found in the monitor's EDID EISA ID: manufacturer, for example, SAM, Product Code: model , for example, 7226 (SAM7226) (And Serial Number which companies use at their own discretion, for example, to designate not a specific monitor, but monitors of the same type). In Windows, the EDID is considered a monitor descriptor and is stored in the registry at Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY... "Device Parameters" "EDID". In Windows 11, all EDID blocks are stored here.

    Also

    Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class{4d36e968-e325-11ce-bfc1-08002be10318}

    https://free.blessedness.top/en-us/windows/win32/wmicoreprov/wmimonitorraweedidv1block

    https://free.blessedness.top/en-us/windows/win32/wmicoreprov/wmigetmonitorraweedidv1block-wmimonitordescriptormethods

    OS Windows in Device Manager in Monitors in the Monitor Properties, Details, Hardware Ids displays the sum of Manufacturer: SAM and the number Model or in other words EISA ID: SAM and the number Product Code in the form of SAM....

    The exact marketing name of the monitor model can be found on the monitor itself or on the box.

    https://github.com/linuxhw/EDID/

    0 comments No comments

  3. Alxndr 21 Reputation points
    2025-10-25T08:19:05.9933333+00:00

    If you place this code in a VBS file and double-click it, an HTML file will be generated containing the names (Name = Property.Name) and parameter values (s = objInstance.properties_(Name)) of the WMI classes from "root\cimv2", "root\WMI" . Instead of current "WmiMonitorID" here may be any class.

    Monitor specific data may not be presented correctly in this case.

    There is Microsof Corp. application wbemtest.exe in directory C:\Windows\System32\wbem

    https://free.blessedness.top/en-us/intune/configmgr/develop/core/understand/introduction-to-wbemtest

    Dim objService
    set wmiLocator = CreateObject ("WbemScripting.SWbemLocator")   
    set ObjService = wmiLocator.ConnectServer (".", "root\WMI")
    ObjService.Security_.ImpersonationLevel = 3
    Dim objClass
    Set objClass = objService.Get ("WmiMonitorID")
    Set objEnumerator = objService.ExecQuery("Select * from WmiMonitorID")
    Dim fso, tf
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set tf = fso.CreateTextFile("WmiMonitorID.Htm", True)
    tf.WriteLine("<html>") 
    tf.WriteLine("<head>") 
    tf.WriteLine("<meta http-equiv=Content-Type content=""text/html; charset=windows-1251"">") 
    tf.WriteLine("</head>") 
    tf.WriteLine("<body>") 
    tf.WriteLine("<TABLE>") 
    For Each objInstance in objEnumerator
        If Err.Number Then
            Err.Clear
        Else
            If objInstance is nothing Then
                Break
            Else
                ON ERROR RESUME Next
                For each Property in objClass.Properties_
                    If Err.Number Then
                        Err.Clear
                    Else
                       tf.WriteLine("<TR VALIGN=""top"">") 
                    Name = Property.Name
                    tf.Write("<TD width=50%>") 
                    tf.Write(Name) 
                    tf.WriteLine("</TD>") 
                    s = objInstance.properties_(Name)
                    dim i, str
                    if vartype(s) < 8192 then ' Array type
        	           strMessage = Space(6) & s
                    else
                       for i=lbound(s) to ubound(s)
                          str = str & Chr(s(i))
                       next	
                       strMessage = Space(6) & str
                       str = ""
                    end if
                    tf.Write("<TD width=50%>") 
                    tf.Write(strMessage) 
                    tf.WriteLine("</TD>") 
                    tf.WriteLine("</TR>") 
                    End If
                Next
            End If
        End If
        tf.WriteLine("<TR VALIGN=""top"">") 
        tf.Write("<TD width=50%>-</TD>")
        tf.Write("<TD width=50%>-</TD>")
        tf.WriteLine("</TR>") 
        tf.WriteLine("<TR></TR>") 
    Next
    tf.WriteLine("</TABLE><BR>") 
    tf.WriteLine("</body>") 
    tf.WriteLine("</html>") 
    tf.Close
    
    
    
    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.