如何使用PowerShell中的Read-Host将变量赋值给变量

时间:2018-04-09 17:43:54

标签: powershell variables

我知道以下可能不是世界上效率最高的代码,而是我如何通过自己的意志来解决问题。

我想做以下事情:

 $1 = "Mazada"
 $2 = "Toyota"
 $3 = "Mitsubishi"

$car = Read-Host "Type Variable here" 

Write-Output = $car

现在最终产品会在“Read-Host”命令中为您提供一个变量列表,然后您就会知道要输入什么内容。我知道我必须解决这个问题,因为那些人​​注意到了缺少的成分。脚本。

理想情况下,我希望任何人都可以在Read-Host部分输入“$ 3”这样的汽车选择,然后将其分配给$ car变量,以便输出三菱。

我做错了什么?

如果我输入$ 3,我只需= $ 3

非常感谢

1 个答案:

答案 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"