没有为foreach循环分离参数

时间:2019-05-09 19:13:23

标签: powershell

我正在尝试从工作站获取监视器信息。当只有一个监视器时,我的代码可以正常工作。但是在多台显示器上,它会失败。

$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

因此,在多监视器情况下,我会变得“未知”

1 个答案:

答案 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