Public/Hardware/Get-DisplayDevice.ps1

<#
Copyright © 2024 Integris. For internal company use only. All rights reserved.
#>


FUNCTION Get-DisplayDevice {
    <#
    .SYNOPSIS
    Retrieves and displays information about connected display devices.
 
    .DESCRIPTION
    This function collects detailed information about each connected display device, including model ID, model name, manufacturer, video input type, serial number, and year of manufacture.
 
    .PARAMETER MonitorInstances
    The collection of monitor instances retrieved from the WMIMonitorID class.
 
    .EXAMPLE
    Get-DisplayDevice
 
    This command retrieves and displays information about all connected display devices.
 
    .NOTES
    This function uses CIM instances to gather display device information and may require appropriate permissions to execute.
    #>


    [CmdletBinding()]
    PARAM ( )

    $Results = @()
    
    $MonitorInstances = Get-CIMInstance -Class WMIMonitorID -Namespace root\wmi -ErrorAction SilentlyContinue | Select-Object InstanceName 
    IF ($MonitorInstances.Count -ge 1) {}
    ELSE {
        $Results += New-Object PSObject -WarningAction SilentlyContinue -Property @{
            PSTypeName = 'IntegrisPowerShell.DisplayDevice'
            ModelID = "Not Connected"
            ModelName = "Not Connected"
            Manufacturer = "Not Connected"
            VideoInput = "Not Connected"
            SerialNumber = "Not Connected"
            ManufacturerYear = "Not Connected"
        }   

        RETURN $Results | Select-Object ModelID, ModelName, Manufacturer, VideoInput, SerialNumber, ManufacturerYear 
    }
    
    $MonitorCount = 0
    
    FOREACH ($MonitorInstance in $MonitorInstances) {
        $MonitorCount++

        ### Hardware ID
        $HardwareID = ($MonitorInstance.InstanceName.Split('\'))[1]

        ### Manufacture Year
        $MonitorInfo = Get-CIMInstance WMIMonitorID -Namespace root\wmi | Where-Object { $_.InstanceName -eq $MonitorInstance.InstanceName }
        $ManufactureYear = "Unknown"
        $ManufactureYear = $MonitorInfo.YearOfManufacture

        ### Serial Number
        $SerialNumber = "Unknown"
        $SerialNumber = [System.Text.Encoding]::ASCII.GetString($MonitorInfo.SerialNumberID).Trim(0x00)

        $MonitorInfo = Get-CIMInstance WmiMonitorConnectionParams -Namespace root\wmi | Where-Object { $_.InstanceName -eq $MonitorInstance.InstanceName }
        
        ### Video Connector
        $VideoOutput = "Unknown"
        $VideoOutput = $MonitorInfo.VideoOutputTechnology
        Switch ($VideoOutput) {
            "0" { $VideoOutput = "VGA" }
            "1" { $VideoOutput = "S-Video" }
            "2" { $VideoOutput = "Composite_Video" }
            "3" { $VideoOutput = "Component_Video" }
            "4" { $VideoOutput = "DVI" }
            "5" { $VideoOutput = "HDMI" }
            "6" { $VideoOutput = "LVDS" }
            "7" { $VideoOutput = "Unknown" }
            "8" { $VideoOutput = "D_JPN" }
            "9" { $VideoOutput = "SDI" }
            "10" { $VideoOutput = "DisplayPort" }
            "11" { $VideoOutput = "DisplayPort" }
            "12" { $VideoOutput = "UDI" }
            "13" { $VideoOutput = "UDI" }
            "14" { $VideoOutput = "SDTV_Dongle" }
            "15" { $VideoOutput = "Miracast" }
            "16" { $VideoOutput = "Indirect_Wired" }
            default { $VideoOutput = "Unknown" }
        }

        $MonitorInfo = Get-PnpDevice | Where-Object { $_.PNPDeviceID -eq $MonitorInfo.InstanceName.Replace("_0","") }
        
        ### Vendor
        $MonitorManufacturer = "Unknown"
        $MonitorManufacturer = $MonitorInfo.Manufacturer

        $Results += New-Object PSObject -WarningAction SilentlyContinue -Property @{
            PSTypeName = 'IntegrisPowerShell.DisplayDevice'
            Number = $MonitorCount
            ModelID = $HardwareID
            ModelName = $MonitorInfo.Name
            Manufacturer = $MonitorManufacturer
            VideoInput = $VideoOutput
            SerialNumber = $SerialNumber
            ManufacturerYear = $ManufactureYear
        }   
    }

    RETURN $Results 
}
New-Alias -Name Get-DisplayInfo -Value Get-DisplayDevice