如何查询多显示器机器以及显示分辨率和刷新率

问题描述 投票:0回答:1

我扫描的机器有 2-3 个显示器。

这个命令几乎可以完成我需要的一切。

Get-CimInstance WmiMonitorID -Namespace root\wmi

但是我的报告需要包括显示器的分辨率和刷新率。
我之前实际上已经想到了这一点,但不记得我是怎么做到的。

我特别关注每个监视器的这些属性:

  • 水平分辨率
  • 垂直分辨率
  • 最大刷新率
  • 刷新率

我相信我用过:

Get-WMiObject
or
get-ciminstance

然后以某种方式使用

CIM_MonitorResolution 
(https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/cim-monitorresolution)

我也尝试过: 对于 ciminstace 我用过:

get-ciminstance -classname CIM_MonitorResolution
get-ciminstance -classname CIM_MonitorResolution -Namespace "root\cimv2"

这些从未出错,但它们也不显示任何内容。 这让我很接近:

Get-CimInstance -Namespace "root\cimv2" -ClassName "CIM_VideoControllerResolution"

但它显示了您的显示器可以使用的每一个分辨率和刷新率,但没有说明是什么显示器。

有谁知道我如何使用 powershell 获取显示器的这些属性,而无需使用 Nirsoft 等任何 3rd 方实用程序。

我特别关注每个监视器的这些属性:

HorizontalResolution;
VerticalResolution;
MaxRefreshRate;
RefreshRate; 
windows powershell multiple-monitors cim
1个回答
0
投票

我的模块

DisplayConfig
可以通过
Get-DisplayInfo
获取分辨率和刷新率信息。我目前没有办法获得最大刷新率,但您可以通过选项卡补全以一种黑客的方式获得它
(TabExpansion2 'Set-DisplayRefreshRate -DisplayId 1 -RefreshRate:').CompletionMatches.CompletionText | sort {[double]$_} -Descending | select -First 1

这是一个完整的示例:

Get-DisplayInfo | Where-Object -Property Active -EQ $true | ForEach-Object -Process {
    [pscustomobject]@{
        DisplayId      = $_.DisplayId
        DisplayName    = $_.DisplayName
        Width          = $_.Mode.Width
        Height         = $_.Mode.Height
        RefreshRate    = $_.Mode.RefreshRate
        MaxRefreshRate = (TabExpansion2 "Set-DisplayRefreshRate -DisplayId $($_.DisplayId) -RefreshRate:").CompletionMatches.CompletionText | sort {[double]$_} -Descending | select -First 1
    }
}

应该注意的是,这没有考虑当前的分辨率,这可能会导致误导性的结果。例如,您的显示器可能支持 120 Hz,但仅支持 1080p,且未启用 HDR,因此如果您使用 4K,您实际上将无法使用列出的刷新率。

© www.soinside.com 2019 - 2024. All rights reserved.