使用 powershell 显示用户输入

Displaying user inputs with powershell

假设我有一个数组

$something = @(
"first",
"second"
)

如何向用户显示

1. first
2. second
Selection : 

我可以通过哈希 table 和手动映射

来做到这一点
@{
1="first"
2="second"
};

并执行以下操作

$something.Keys | sort |% { Write-Host $_ ")" $something.Item($_) }
[int32]$constuctPayload.Action = Read-Host

但如果需要使用数组执行此操作,我该怎么做。即循环项目并显示索引以供用户选择。 ?

您可以使用 IndexOf() 方法来查找数组中的索引。

$something | ForEach-Object {Write-Host "$([Array]::IndexOf($something, $_)). $_ "}

关于小心 Write-Host 的标准警告。您也可能想查看 Out-GridView

使用 for 循环遍历数组的元素并在每个值前加上索引 + 1。

$something = 'first', 'second'

for ($i = 0; $i -lt $something.Count; $i++) {
    Write-Host ('{0}. {1}' -f ($i+1), $something[$i])
}
[int32]$constuctPayload.Action = Read-Host -Prompt 'Selection'

我建议使用 PromptForChoice() 方法而不是 Read-Host,不过:

$something = '&first', '&second'

$title   = 'The title.'
$msg     = 'Selection?'
$choices = $something | ForEach-Object {
    New-Object Management.Automation.Host.ChoiceDescription $_
}
$options = [Management.Automation.Host.ChoiceDescription[]] $choices
$default = 0

$constuctPayload.Action = $Host.UI.PromptForChoice($title, $msg, $options, $default)