New to Powershell and am confused.

The command below works but with two monitors the second serial number is truncated I do not know why. Now obviously being new I did not write the code below.

$monitorserial = gwmi WmiMonitorID -computername $x -Namespace root\wmi | ForEach-Object {($_.UserFriendlyName -notmatch 0 | foreach {[char]$_}) -join ""; ($_.SerialNumberID -notmatch 0 | foreach {[char]$_}) -join ""}
    Write-Host ("Monitor Model(s) and Serial Number(s) is $monitorserial") -ForegroundColor Blue
    Write-Host "`n"

If you just run:

gwmi WmiMonitorID -Namespace root\wmi | fl *

locally on an HP, is all the information present?

Thank you for the reply. I was doing some further research and found out that if there is only one monitor attached to a system the number comes out correctly. Also I should have been clearer on what I am doing. I was verifying serial numbers on remote systems that I do not have access to but know the system and monitors are on. I verified this on a system with only one hp monitor attached.

Try this:

$Workstations = @(‘pc1’,‘pc2’)

foreach ($Workstation in $Workstations)

$SerialNumbers = (Get-WmiObject -Namespace root\wmi -Class WmiMonitorID -ComputerName $Workstation | Where-Object {(($.UserFriendlyName -and $.SerialNumberID) -notmatch 0)}).SerialNumberID -join “”

I did not test on a dual monitor system. You may need to do further text manipulation(ex, -Split) if it returns two or more serial numbers.

Just wanted to add that this code is a bit broken, excluding zeros (-notmatch 0) yield some weird results. As an example, on my system the models DELL U2713HM and LA2405 becomes DELL U713HM and LA405 (the code works if I don´t exclude the zeros from .UserFriendlyName).