PowerShell中的Switch语句和复制粘贴采用最后一个数组输出,而不是第一个示例

时间:2018-06-03 13:54:40

标签: powershell powershell-v4.0

PowerShell中的switch语句出现问题,并想知道为什么会发生这种情况。

我想根据开关复制内容因某种原因我从开关A粘贴时只得到“D”的最后一个输出

知道如何在PowerShell 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 :(得分:3)

You should never use 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)