[string[]] 参数与读取主机行为

[string[]] Parameter vs Read-Host behaviour

在我的 PowerShell 脚本中,我为 :

设置了参数

[string[]]$OptionNum

所以我可以调用我的脚本,例如:

.\MyScript.ps1 1,4,6

然后我在 $OptionNum 上有一个 switch 语句,每个选项值 PSItem –contains “n”,到 运行 相关代码,具体取决于已选择的内容。因此,上面分别调用了 1、4 和 6 的各个开关选项。效果不错。

问题。如果用户没有在提示时指定这些选项,我想向他们展示可用选项列表,并允许他们输入他们想要的项目。所以我输出了有关可用内容的信息,然后我有一行:

[string[]]$OptionNum = Read-Host “Enter the required options”

虽然在这两种情况下$OptionNum都设置为字符串System.Array类型,使用数组上面的参数方法有三个不同的值,但是Read-Host方法使用相同的方法输入相同的值给出我的单个数组值“1,4,6”。或者换个说法,$OptionNum.count使用参数时为3,使用Read-Host时为1。

如何调整我的读取主机代码,以便将这些逗号分隔值保存为数组中的单独条目?

请注意,$OptionNum 值是字符串值而不是数字,可以是单词而不是数字。我希望无论使用哪种方法输入选项,用户体验都相同,因此代码可以更改,但用户输入的内容不能。

我猜你就是这样做的:

$OptionNum = (Read-Host “Enter the required options”) -split ','|%{if($_){$_.trim()}}

Read-Host 的结果字符串在逗号中被分割,然后您遍历该数组询问是否有值(如果由于某种原因您的用户在末尾留下逗号或他们的输入以逗号)你 trim 开头和结尾的尾随空格(因为如果用户输入是 '1, 2, 3, 4,6 , 7' 或用户喜欢做的事情)