函数中的switch语句

Switch statement in function

我编写了一个菜单,它将一个整数输入到 selectPod 函数中,然后我希望填充了服务器和数据库的 $sqlSettings 对象用于一些 SQL 我稍后编写的查询剧本。 我已经完成了棘手的部分,但似乎无法正常工作。

$SQLServer = @()
$Server = @()
$database = @()
function selectPod($podnumber) {
       switch ($podnumber)
            {
                1 {  $Server = "SQLSERVER01";
                     $Database = "DATABASE01"
                    }

                2 {  $Server = "SQLSERVER02";
                     $Database = "DATABASE02"
                    }

                3 {  $Server = "SQLSERVER03";
                     $Database = "DATABASE03"}

                4 {  $Server = "SQLSERVER04";
                     $Database = "DATABASE04"}

                5 {  $Server = "SQLSERVER05"
                     $Database = "DATABASE05"}
            }
            $properties =  $params = @{
                           'Pod' = $podnumber;
                           'SQLServer' = $Server;
                           'Database' = $Database;
            }
            $sqlSettings = New-Object -TypeName PSObject -Property $properties
            Write-Output $sqlSettings
}

selectPod 5


Write-Host "you are targeting " $($SQLSettings.POD) " which is SQLServer`
                 $($SQLSettings.server) and $($SQLSettings.database)" -ForegroundColor Green

我知道它可以正常工作,因为写入输出很好。但是write-host show在函数外是无法存活的

you are targeting    which is SQLServer  and 
SQLServer   Pod Database  
---------   --- --------  
SQLSERVER05   5 DATABASE05

我这样做的方式可能完全错误,但如有任何帮助,我们将不胜感激。

函数内的变量仅限于函数,除非您另外声明。 为结果分配一个 script/global 变量,例如$Global:SQLSettings - 或者更好的方法是 return 函数中的值作为对象。

替换Write-Output $sqlSettings 随着 Return $sqlSettings

...然后查看 运行 函数时 return 的值,例如

$Result = selectPod 5

将您的 Write-Host 命令移动到开关块中。如果您想将输出对象用于其他任何用途,请将其收集在一个变量中,如下所示:

$sqlSettings = selectpod 5