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