我正在尝试使用调用命令和PSSession从远程计算机获得正确的屏幕分辨率,但两种方法都报告一种分辨率为1024 x 768。有两个屏幕,1920 x 1080和1280 x 720。这不是DPI的事情。
执行下面的代码(远程(会输出以下代码片段。以交互方式执行,报告正确的分辨率。网上发布的所有其他工作方法都有相同的行为。
输出:
PS > Add-Type -AssemblyName System.Windows.Forms
PS > [System.Windows.Forms.Screen]::AllScreens
BitsPerPixel : 0
Bounds : {X=0,Y=0,Width=1024,Height=768}
DeviceName : WinDisc
Primary : True
WorkingArea : {X=0,Y=0,Width=1024,Height=768}
令人惊讶的是,CIM 中没有任何内容可以远程从多个显示器获取这些详细信息,我已经发现。也许是时候让功能请求在 7 中加强一些 CIM cmdlet。
我想解决方法可能是在所有目标计算机上创建一个计划任务,该任务在本地运行脚本以将信息输出到本地文件,然后使用远程处理来获取文件或数据。
如果有人克服了这一点,我们将非常感谢我们其他人对此障碍的反馈。
PowerShell 7:
Name Value
---- -----
PSVersion 7.0.1
PSEdition Core
GitCommitId 7.0.1
OS Microsoft Windows 10.0.18363
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Windows PowerShell:
Name Value
---- -----
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
视窗 10 专业版
我不确定这个问题是否已解决,但我找不到任何通过 powershell 获得远程 PC 分辨率的方法(即使用非交互式会话(。因此,提出了通过注册表值获取此值的逻辑:
注意:-
- 此脚本仅在 Windows 10 中进行测试
- 这将要求远程用户对变量"$videoRegistryPath"中的注册表值具有读取访问权限
$videoRegistryPath = 'HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGraphicsDriversConfiguration'
$all_monitor_array_X=@()
$all_monitor_array_Y=@()
$screen_cnt= (Get-CimInstance -Namespace rootwmi -ClassName wmimonitorid -ErrorAction SilentlyContinue | measure )
$NumberOfScreens= $screen_cnt.Count
$allVideoGraphics = Get-ChildItem -Path ($videoRegistryPath).Replace('HKEY_LOCAL_MACHINE','HKLM:')
foreach ($instance in $allVideoGraphics ) {
$allVideoGraphicsChild= Get-ChildItem -Path ($instance.Name).Replace('HKEY_LOCAL_MACHINE','HKLM:')
if ($allVideoGraphicsChild.Property.Contains('PrimSurfSize.cx')) {
$allVideoGraphicsChildProperty = Get-ItemProperty -Path ($allVideoGraphicsChild.Name).Replace('HKEY_LOCAL_MACHINE','HKLM:')
$Screen_X= $allVideoGraphicsChildProperty.'PrimSurfSize.cx'
$Screen_Y=$allVideoGraphicsChildProperty.'PrimSurfSize.cy'
$all_monitor_array_X += $Screen_X
$all_monitor_array_Y += $Screen_Y
}
}
for ($i=0;$i -le ($NumberOfScreens-1);$i++){
[PSCustomObject]@{
Values = $all_monitor_array_X[$i];
Instance = "Monitor_"+($i)+"_x_coordinate";
}
[PSCustomObject]@{
Values = $all_monitor_array_Y[$i];
Instance = "Monitor_"+($i)+"_y_coordinate";
}
}
希望这将有助于满足使用非交互式会话获得远程计算机分辨率的特定要求。