如何更新powershell中变量中的变量?

如何更新powershell中变量中的变量?,powershell,Powershell,我正在为一个脚本制作一个菜单系统,我可以通过使用菜单或将它们作为参数传递给脚本来更改需要的值。我目前的一个烦恼是在菜单刷新时输入新值后,菜单文本中的变量不会更新为新值 $global:drive="C:" $title = "Setup " $message = "The default variables are: VARIABLES TO CHANGE 1. The Drive

我正在为一个脚本制作一个菜单系统,我可以通过使用菜单或将它们作为参数传递给脚本来更改需要的值。我目前的一个烦恼是在菜单刷新时输入新值后,菜单文本中的变量不会更新为新值

      $global:drive="C:"

      $title = "Setup 

      "
           $message = "The default variables are:
            VARIABLES TO CHANGE

            1. The Drive Location: $global:drive <<<--- This is the variable that does not update after I change it when I run the script.
       "

      $one = New-Object System.Management.Automation.Host.ChoiceDescription "&1 Drive", "The Drive Location:"

      $options = [System.Management.Automation.Host.ChoiceDescription[]]($one)

     :OuterLoop do 
{ 
    for ($i = 1; )
    {

      $result =  $host.ui.PromptForChoice($title, $message, $options, 1) 

    switch ($result)
        {
            0 {$global:drive = Read-Host "Drive is $global:drive .Set the  Drive Location";
                "The Drive is now: $global:drive";
                break;}

          }

                }
}

 while ($y -ne 100)
$global:drive=“C:”
$title=“设置
"
$message=“默认变量为:
要更改的变量

1.驱动器位置:$global:Drive我运行了你的代码,但我的代码在菜单中发生了变化。我所做的唯一一件事就是注释掉你的第一个
$global:Drive=“C:
。如果这始终位于脚本的顶部,那么
$global:Drive
将始终显示
C:

您可以使用以下代码检查变量是否存在,如果该变量尚不存在,则为其赋值:

if $(!(Get-Variable -Name Drive -Scope global -ErrorAction SilentlyContinue)) { $global:drive="C:" }
如果全局变量
Drive
存在,它将不起任何作用。如果它不存在,
$global:Drive
将设置为
C:
。希望这有帮助

在@Norm comment之后编辑:

消息未更新的原因是
$title
设置在循环外部。因为
$title
已经定义,所以不需要每次循环运行时都更改。只需将
$title
的声明移到循环内部
$result=$host.ui.PromptForChoice行之前($title、$message、$options,1)
。这将解决您遇到的问题


Edit2:对不起,需要移动的是
$message
,不是
$title

我运行了你的代码,但是我在菜单中做了更改。我所做的唯一一件事就是注释掉你的第一个
$global:drive=“C:
。如果这始终位于脚本的顶部,那么
$global:drive
将始终显示
C:

您可以使用以下代码检查变量是否存在,如果该变量尚不存在,则为其赋值:

if $(!(Get-Variable -Name Drive -Scope global -ErrorAction SilentlyContinue)) { $global:drive="C:" }
如果全局变量
Drive
存在,它将不起任何作用。如果它不存在,
$global:Drive
将设置为
C:
。希望这有帮助

在@Norm comment之后编辑:

消息未更新的原因是
$title
设置在循环外部。因为
$title
已经定义,所以不需要每次循环运行时都更改。只需将
$title
的声明移到循环内部
$result=$host.ui.PromptForChoice行之前($title、$message、$options,1)
。这将解决您遇到的问题


Edit2:对不起,需要移动的是
$message
,而不是
$title

,谢谢Nick。我给出的代码不准确,因为它是一个更大集合的一部分,我必须对它进行一些删节才能切中要害。这样做我就省去了while循环。如果你再次运行它,你应该明白我的意思。不过你提出了一个很好的观点。谢谢这太明显了。谢谢尼克。我只是一直告诉自己……DUH1:)没问题,我们在某个时候都做过同样的事情:)谢谢尼克。我给出的代码不准确,因为这是一个更大的集合的一部分,我不得不对它进行一些删减以达到目的。这样我就省去了while循环。如果你再运行一次,你应该明白我的意思。不过你提出了一个很好的观点。谢谢,伙计,这太明显了。谢谢尼克。我只是一直告诉自己……DUH1:)没问题,我们在某些时候都做过同样的事情:)