( N0v3mb3r | 2025. 10. 19., v – 20:17 )

Nem biztos, hogy jól értem, hogy mit szeretnél. Én a következő célt tűztem ki (ami remélhetőleg egyezik a tiéddel):

Kiíratni, hogy a "Display Settings/Identity"-re megjelenő számok (1,2,stb), mely kijelző InstaceName (DISPLAY\...) értékkel vannak párban.

 

Nálam működik az alábbi módszer. Szinte teljes egészében AI-jal csináltattam, a kódok egy részét nem is értem - ezt vedd figyelmeztetésnek is!

 

PowerShell-be:

Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID

Ez nálam a következőképpen néz ki:

Active                 : True
InstanceName           : DISPLAY\AUS2721\5&339c91d2&0&UID4352_0
ManufacturerName       : {65, 85, 83, 0...}
ProductCodeID          : {50, 55, 50, 49...}
SerialNumberID         : {82, 57, 76, 77...}
UserFriendlyName       : {86, 71, 50, 55...}
UserFriendlyNameLength : 13
WeekOfManufacture      : 38
YearOfManufacture      : 2023
PSComputerName         :

Active                 : True
InstanceName           : DISPLAY\SAM0F9F\5&339c91d2&0&UID4356_0
ManufacturerName       : {83, 65, 77, 0...}
ProductCodeID          : {48, 70, 57, 70...}
SerialNumberID         : {49, 54, 55, 56...}
UserFriendlyName       : {83, 65, 77, 83...}
UserFriendlyNameLength : 13
WeekOfManufacture      : 1
YearOfManufacture      : 2019
PSComputerName         :

Active                 : True
InstanceName           : DISPLAY\GSM5AB8\5&339c91d2&0&UID4358_0
ManufacturerName       : {71, 83, 77, 0...}
ProductCodeID          : {53, 65, 66, 56...}
SerialNumberID         : {49, 54, 56, 52...}
UserFriendlyName       : {76, 71, 32, 73...}
UserFriendlyNameLength : 13
WeekOfManufacture      : 1
YearOfManufacture      : 2014

AI szerint:

A Get-CimInstance -ClassName WmiMonitorID a Windows által nyilvántartott aktív kijelzők sorrendjében adja vissza az elemeket.

Szóval az első az 1, a második a 2 stb. és ez nálam stimmel is, ha nincs letiltva egy kijelző sem, mert akkor ugrik a lista.

Ha ez így elég, akkor ok. Mivel erősködtem készített egy scriptet, ahol a sorszámot lényegében egy $i=1 változóba teszi, ciklussal kérdezi le a többi adatot és növeli i értékét.

Maga a powershell script:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class DisplayUtil {
    [DllImport("user32.dll")]
    public static extern int GetDisplayConfigBufferSizes(uint flags, out uint numPathArrayElements, out uint numModeInfoArrayElements);

    [DllImport("user32.dll")]
    public static extern int QueryDisplayConfig(uint flags, ref uint numPathArrayElements, IntPtr pathInfoArray,
        ref uint numModeInfoArrayElements, IntPtr modeInfoArray, IntPtr currentTopologyId);

    public const int QDC_ONLY_ACTIVE_PATHS = 0x00000002;
}
"@

[uint32]$numPath = 0
[uint32]$numMode = 0
[DisplayUtil]::GetDisplayConfigBufferSizes([DisplayUtil]::QDC_ONLY_ACTIVE_PATHS, [ref]$numPath, [ref]$numMode) | Out-Null
$displays = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID

$i = 1
foreach ($d in $displays) {
    $manufacturer = ([System.Text.Encoding]::ASCII.GetString(($d.ManufacturerName | Where-Object { $_ -ne 0 })))
    $model = ([System.Text.Encoding]::ASCII.GetString(($d.UserFriendlyName | Where-Object { $_ -ne 0 })))
    $serial = ([System.Text.Encoding]::ASCII.GetString(($d.SerialNumberID | Where-Object { $_ -ne 0 })))
    [PSCustomObject]@{
        DisplayNumber = $i
        Manufacturer  = $manufacturer
        Model         = $model
        Serial        = $serial
        InstanceName  = $d.InstanceName
    }
    $i++
}

Ahhoz, hogy fusson, nekem engedélyeznem kellett a saját gépen tárolt scriptek futtatását:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

Utána futtatásra a következő eredményt adja:

DisplayNumber : 1
Manufacturer  : AUS
Model         : VG279QM
Serial        : R9LMQS175191
InstanceName  : DISPLAY\AUS2721\5&339c91d2&0&UID4352_0

DisplayNumber : 2
Manufacturer  : SAM
Model         : SAMSUNG
Serial        : 16780800
InstanceName  : DISPLAY\SAM0F9F\5&339c91d2&0&UID4356_0

DisplayNumber : 3
Manufacturer  : GSM
Model         : LG IPS FULLHD
Serial        : 16843009
InstanceName  : DISPLAY\GSM5AB8\5&339c91d2&0&UID4358_0

Lehet a scriptet sallang-mentesíteni, ha nincs minden adatra szükséged stb.

Ilyesmire gondoltál?