我知道以下可能不是世界上效率最高的代码,而是我如何通过自己的意志来解决问题。
我想做以下事情:
$1 = "Mazada"
$2 = "Toyota"
$3 = "Mitsubishi"
$car = Read-Host "Type Variable here"
Write-Output = $car
现在最终产品会在“Read-Host”命令中为您提供一个变量列表,然后您就会知道要输入什么内容。我知道我必须解决这个问题,因为那些人注意到了缺少的成分。脚本。
理想情况下,我希望任何人都可以在Read-Host部分输入“$ 3”这样的汽车选择,然后将其分配给$ car变量,以便输出三菱。
我做错了什么?
如果我输入$ 3,我只需= $ 3
非常感谢
答案 0 :(得分:2)
$3
是一个表达式,需要由powershell进行评估才能返回变量的值。
当您使用Read-Host
时,powerhsell将不会评估作为表达式输入的内容,它只是将字符复制到字符串中。但是,使用Invoke-Expression
可以获得所需的结果,但这很危险。您可以让用户只输入变量的名称并使用Get-Variable
命令行开关:
$1 = "Mazada"
$2 = "Toyota"
$3 = "Mitsubishi"
$var = Read-Host "Type Variable here name here"
$car = get-Variable -name $var -valueonly
Write-Output "`$car=$car"
更好的选择是向用户呈现他们选择的选项菜单(例如1,2或3)。例如(缺少一些错误处理):
$cars = @("Mazada", "Toyota", "Mitsubishi")
$menuIndex = 1
Write-Host "Choose one of these cars:"
$cars | foreach {
Write-Host $menuIndex " - $_";
$menuIndex += 1;
}
$ChosenItem = [int](Read-Host "Your choice (1 to $($menuIndex-1))")
$car = $cars[$ChosenItem-1]
Write-Output "`$car=$car"