Параметр не отделяется для цикла foreach - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь получить информацию о мониторе с рабочих станций. Когда только один монитор, мой код работает нормально. Но на нескольких мониторах происходит сбой.

$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 Ответ

3 голосов
/ 09 мая 2019

Замените "$($($connections.VideoOutputTechnology))" на $connections.VideoOutputTechnology.

"$($($connections.VideoOutputTechnology))", за исключением ненужного использования $(...) дважды , строковых массивов, возвращаемых $connections.VideoOutputTechnology, которая по умолчанию создает единственную строку, содержащую (stringified) элементы в виде списка, разделенного пробелами.

В качестве отступления, просто чтобы уточнить: Write-Host обычно не подходит для использования , если только намерение не состоит в том, чтобы записать только на дисплей , минуя поток успешных выходных данных и вместе с ним возможность отправлять выходные данные другим командам, захватывать его в переменную, перенаправлять в файл.(В PSv5 + Write-Host запись в информационный поток , выход которого может быть может быть захвачен, но только через 6>; см. этот ответ .)

Кроме того, использование оператора switch вместо цикла foreach с несколькими операторами if позволяет упростить решение.

Собрать все вместе:

$connections = get-ciminstance -namespace root/wmi -classname WmiMonitorConnectionParams
$videooutput = $connections.VideoOutputTechnology

switch ($videooutput) {
 10 { "DP"; continue }
 4  { "DVI"; continue }
 5  { "HDMI"; continue}
 0  { "VGA"; continue }
 default { "unknown"}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...