Function Powershell,将一个变量从函数中的一个开关传递到其余的o

Function Powershell,将一个变量从函数中的一个开关传递到其余的o,function,powershell,switch-statement,do-while,Function,Powershell,Switch Statement,Do While,总结: 我从函数中的do/while循环中的开关中分配变量;我希望能够从这个函数外部(在同一个脚本中)访问这个变量 详情: 脚本有一个do/while循环,它将变量值打印到屏幕上(如果变量没有值,则打印一个字符串),并提供两个选项。一个选项是重新分配变量。如果选择此选项,则进入一个函数和do/while循环,通过多种方式为该变量赋值,该变量实际上由开关执行。开关分配变量(我已确认该变量在开关内分配了正确的值)。完成此操作后,函数退出,返回初始的do/while循环(函数外部),应该打印的变量(或

总结: 我从函数中的do/while循环中的开关中分配变量;我希望能够从这个函数外部(在同一个脚本中)访问这个变量

详情: 脚本有一个do/while循环,它将变量值打印到屏幕上(如果变量没有值,则打印一个字符串),并提供两个选项。一个选项是重新分配变量。如果选择此选项,则进入一个函数和do/while循环,通过多种方式为该变量赋值,该变量实际上由开关执行。开关分配变量(我已确认该变量在开关内分配了正确的值)。完成此操作后,函数退出,返回初始的do/while循环(函数外部),应该打印的变量(或字符串)现在为空

有一个If语句来检查变量是否为空
If($Var-eq“”){Write Host“Some String}
,在这个过程发生后,字符串没有被显示出来…就好像变量被分配了一样,但是仍然没有使用
Write Host“$Var

我已尝试从交换机中返回$Var 我尝试过全局地定义变量的范围
$Global:Var=“some value”
我试过在开关中使用“set variable”

以下是我的一个例子:

Do {
    $exitloop = $False

    If($var -eq "") {
        Write-Host " - No Directory Set - "
    }
    Else {
        Write-Host "$var"
    }

    Write-Host "1 Continue"
    Write-Host "2 Change Directory"
    Write-Host "3 exit"

    $UserInput = Read-Host ""

    Switch($UserInput) {
        1 {
            Some logic we don't care aout
        }
        2 {
            Get_Directory
        }
        3 {
            some logic we don'e care about
        }
    }

}
While ($exitloop = $False)

Function Get_Directory {
    Do {
        $exitloop2 = $False
        clear-Host
        Write-Host "1 - some option"
        Write-Host "2 - some option"
        Write-Host "3 - set variable"

        $UserInput2 = Read-Host ""

        Switch($UserInput2) {
            1{
                Some logic we don't care about
            }
            2{
                Some logic we don't care about
            }
            3{
                Add-Type -AssemblyName System.Windows.Forms
                $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
                [void]$FolderBrowser.ShowDialog()

                If($FolderBrowser.SelectedPath -eq "") {
                    $UserInput2=$Null
                    Clear-Host
                    Write-Host "No folder selected, returning to main menu..."
                    Start-Sleep -s 2
                    Exit
                }
                Else{
                    $Global:Var=$FolderBrowser.SelectedPath
                    $exitloop2 = $False
                    Return
                }
            }
        }
    }
    While($exitloop2 = $False)
}
正如您所看到的,在函数运行之后,应该将您带回初始的do/while循环,并且应该更新$var……但事实并非如此


如果您有任何想法,请告诉我。

很抱歉,在回答了我自己的问题之后,我做了一些摸索。我做了两件事,要么一件,要么两件都修好了

我必须删除$exitloop2=$True行,并使用return$var行传递变量


(或者可能是我第一次使用return$var行时没有保存更改…这就是我第一次测试该方法时它不起作用的原因。

当然你不应该发布整个代码。但至少是一个带有“开关”的函数它包含一个打印变量的循环。应该在10行以内完成,不是吗?用示例代码更新