Оператор Switch в PowerShell и копирование вставки получает последний вывод массива, а не пример первого - PullRequest
0 голосов
/ 03 июня 2018

Возникла проблема с оператором switch в PowerShell и интересно, почему это произошло.

Я хочу скопировать содержимое в зависимости от переключателя по какой-то причине. Я получаю только последний вывод, например, "D", когдая вставляю из коммутатора A

Есть идеи, как сделать так, чтобы это работало в PowerShell 4.0?Я ограничен до 4.0, так как моя школа не будет обновляться до PowerShell 5 на серверах.

[array]$a = "A", "B", "C", "D"

$login = read-host login

$switch = 'switch($login) {'

for($i = 1; $i -le $a.length; $i++)
{
    $switch += "`n`t$i { '$($test = $a[$i-1])  $([System.Windows.Clipboard]::SetText($test))'; break }" 
}

$switch += "`n}"

Invoke-Expression $switch

1 Ответ

0 голосов
/ 03 июня 2018

Вы никогда не должны использовать Invoke-Expression.Похоже, что вы на самом деле хотите, это хеш-таблица или подобное:

# added to reference the System.Windows namespace
Add-Type -AssemblyName PresentationFramework

$options = @{
    A = 'this thing'
    B = 'That thing'
    C = 'Another thing'
    D = 'Oh look over here'
}

$login = Read-Host -Prompt login

[Windows.Clipboard]::SetText($options[$login])

И чтобы пойти дальше, я бы предложил проверить ввод:

do {
    $login = Read-Host -Prompt login
} until ($options.Keys -contains $login)
...