功能中的switch语句

时间:2019-06-05 07:54:22

标签: powershell powershell-3.0 powershell-4.0

我写了一个菜单,它将一个整数输入到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

我知道它正在工作,因为写输出很好。但是写主机显示它在函数之外还没有生存。

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

我可能完全以错误的方式进行此操作,但是会得到任何帮助。

2 个答案:

答案 0 :(得分:3)

函数中的变量仅限于该函数,除非另行声明。 将脚本/全局变量分配给结果,例如$ Global:SQLSettings-或更好的方法是将函数的值作为对象返回。

替换Write-Output $sqlSettings 使用Return $sqlSettings

...并查看运行函数时返回的值,例如

$Result = selectPod 5

答案 1 :(得分:0)

将您的Write-Host命令移至切换块。如果要将输出对象用于其他任何用途,请将其收集在这样的变量中:

$sqlSettings = selectpod 5