我正在尝试从工作站获取监视器信息。当只有一个监视器时,我的代码可以正常工作。但是在多台显示器上,它会失败。
$connections = get-ciminstance -namespace root/wmi -classname
WmiMonitorConnectionParams
$videooutput = "$($($connections.VideoOutputTechnology))"
foreach ($output in $videooutput){
if ($output -eq 10) {write-host "DP"}
if ($output -eq 4) {write-host "DVI"}
if ($output -eq 5) {write-host "HDMI"}
if ($output -eq 0) {write-host "VGA"}
else {write-host "unknown"}
}
问题是$ videooutput的输出。它返回多个监视器,如下所示:
4 10
代替此:
4
10
因此,在多监视器情况下,我会变得“未知”
答案 0 :(得分:3)
将batchSize
替换为"$($($connections.VideoOutputTechnology))"
。
$connections.VideoOutputTechnology
,除了不必要地使用"$($($connections.VideoOutputTechnology))"
两次 之外,字符串化 $(...)
返回的数组,默认情况下会创建一个包含(字符串化的)元素作为空格分隔列表的单个字符串。
顺便说一句,只是澄清一下:Write-Host
is typically the wrong tool to use,除非意图是只将写到显示,否则绕过成功的输出流,并且可以将输出发送给其他人命令,将其捕获到变量中,然后将其重定向到文件。 (在PSv5 +中,$connections.VideoOutputTechnology
写入information stream,可以捕获其输出 ,但只能通过Write-Host
;请参见this answer。)
此外,使用6>
语句而不是带有多个switch
语句的foreach
循环可以实现更简单的解决方案。
将它们放在一起:
if