Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归函数调用:Powershell(作用域?)_Powershell_Recursion_Scope_Powershell 2.0 - Fatal编程技术网

递归函数调用:Powershell(作用域?)

递归函数调用:Powershell(作用域?),powershell,recursion,scope,powershell-2.0,Powershell,Recursion,Scope,Powershell 2.0,我的菜单不好用。我想做一个菜单类,但我被v2困住了。每次我在主菜单中输入1时,它都会简单地重新显示主菜单,而不是使用新的$menuType重新输入函数 function presentMenu{ param ([string]$menuType) if($menuType = "Main"){ Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"

我的菜单不好用。我想做一个菜单类,但我被v2困住了。每次我在主菜单中输入1时,它都会简单地重新显示主菜单,而不是使用新的$menuType重新输入函数

function presentMenu{
param ([string]$menuType)

if($menuType = "Main"){
     Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"
     $command = Read-Host
     ##DEBUG## write-host $menuType

     if ($command -eq 1){
         presentMenu("addScaner")
     }
     elseif ($command -eq 2){

     }
     elseif ($command -eq 3){

     }
     elseif ($command -eq 4){
        exit
     }
     elseif ($command -eq 5){
        exit
     }
    else{
        presentMenu("Main")
    }
  }

elseif($menuType = "addScanner"){
    Write-Host "ADD SCANNER: 1.) From File 2.) From Input 3.) Back  4.) Exit"
    $command = Read-Host
    if ($command -eq 1){
        addScannerController("File")
    }
    if ($command -eq 2){
        addScannerController("Input")
    }
    if ($command -eq 3){
        presentMenu("Main")
    }
    if ($command -eq 4){
        exit
    }
    else{
        presentMenu("addScanner")
    }       
  }
}


try{
presentMenu("Main")
}
catch{
  Write-Error $_.Exception.ToString()
  Read-Host -Prompt "The above error occurred. Press Enter to exit."
}
当您在主菜单中输入1时,预期结果是显示addScanner菜单。这在我看来确实是一个范围问题,但我似乎不知道如何更正它?

您使用=来比较参数,您需要使用-eq

您还有一个输入错误,在addScanner中缺少一个n

下面是一个简单的例子:

function presentMenu
{
    param ([string]$menuType)
    if($menuType -eq "Main")
    {
         Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"
         $command = Read-Host
         if ($command -eq 1)
         {
             presentMenu addScanner
         }
    }
    elseif($menuType -eq "addScanner")
    {
        Write-Host "ADD SCANNER: 1.) From File 2.) From Input 3.) Back  4.) Exit"
        $command = Read-Host
        if ($command -eq 1)
        {
            Write-Host "Scanner added"
        }
    }
}

presentMenu Main

用presentMenu addScanner(无括号)替换呼叫。当您开始使用powershell时,这是一个典型的问题。函数调用没有括号。也考虑使用Switter语句,而不是…如果E.el.I..如果…=是赋值,而不是比较。顺便说一句,PowerShell不是函数式语言,而且,恕我直言,它不支持tailcall优化。你能告诉我是PS的新手吗我一直这么做,语言转换的职业危害!