如何用PowerShell获取已登录用户DefaultUser的主屏幕分辨率?
获取远程Windows平板上指定用户的屏幕分辨率
问题分析
显示分辨率是用户会话级的配置,每个交互式登录的用户会话拥有独立的显示上下文。当用支持账户远程执行脚本时,默认会在支持账户的会话(非目标用户DefaultUser的活跃会话)中运行,因此获取到的是支持账户的分辨率,而非目标用户的。
更优雅的解决方案:结合会话ID与PsExec跨会话执行脚本
步骤1:远程获取DefaultUser的活跃会话ID
通过以下两种方式,定位目标平板上DefaultUser的交互式会话ID:
方法A:使用quser命令
$targetPC = "平板主机名/IP" # 过滤出DefaultUser的会话ID $sessionInfo = quser /server:$targetPC | Where-Object { $_ -match 'DefaultUser' } $sessionId = ($sessionInfo -split '\s+' | Select-Object -Index 2) -as [int]
方法B:使用CIM查询(无需依赖外部命令)
$targetPC = "平板主机名/IP" # 查找DefaultUser的交互式登录会话(LogonType=2表示交互式) $session = Get-CimInstance -ComputerName $targetPC -ClassName Win32_LogonSession | Where-Object { $_.UserName -eq 'DefaultUser' -and $_.LogonType -eq 2 } $sessionId = $session.SessionId
步骤2:在目标用户会话中执行分辨率查询脚本
利用PsExec工具的-i参数,指定在目标会话中执行PowerShell命令,直接返回DefaultUser的屏幕分辨率:
# 执行命令并捕获结果 $resolution = psexec \\$targetPC -i $sessionId -s powershell -Command @" Add-Type -AssemblyName System.Windows.Forms [PSCustomObject]@{ Width = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width Height = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height } | ConvertTo-Json "@ | ConvertFrom-Json # 输出结果 Write-Host "DefaultUser的屏幕分辨率:$($resolution.Width)x$($resolution.Height)"
说明:
-s参数表示以系统权限执行,确保能跨会话访问目标用户的上下文;通过JSON序列化/反序列化,方便将远程结果转换为本地可操作的对象。
替代方案:利用WMI查询用户会话的显示配置
如果不想依赖PsExec,也可以通过查询Win32_Desktop类获取用户会话的显示参数(部分系统可能需要调整权限):
$targetPC = "平板主机名/IP" $desktop = Get-CimInstance -ComputerName $targetPC -ClassName Win32_Desktop | Where-Object { $_.UserName -eq "DefaultUser" } Write-Host "DefaultUser的屏幕分辨率:$($desktop.ScreenWidth)x$($desktop.ScreenHeight)"
注意:
Win32_Desktop返回的是用户会话的桌面配置,部分场景下可能与实际显示分辨率存在差异,建议优先使用PsExec方法。
内容的提问来源于stack exchange,提问作者Thariama
相关产品推荐
相关产品推荐

