Переключение оператора в функцию - PullRequest
1 голос
/ 05 июня 2019

Я написал меню, которое будет вводить целое число в функцию 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 ]

3 голосов
/ 05 июня 2019

Переменные внутри функции ограничены функцией, если вы не объявите иначе.Либо присвойте результату скрипт / глобальную переменную, например, $ Global: SQLSettings, либо лучше вернуть значение из функции в виде объекта.

Заменить Write-Output $sqlSettings на Return $sqlSettings

... и посмотрите на значение, возвращаемое при запуске функции, например

$Result = selectPod 5
0 голосов
/ 05 июня 2019

Переместите команду Write-Host в блок переключателей.Если вы хотите использовать выходной объект для чего-либо еще, соберите его в переменную, подобную этой:

$sqlSettings = selectpod 5
...