私は異なる環境で動作するようになるpowershellスクリプトを作成しています。したがって、私は1つのメインスクリプトを持ち、必要な数の環境スクリプトを持つことができるように、環境ごとに別々の変数ファイルを作成しています。選択に基づいてpowershellで変数を動的にロードする方法
私は二つのファイル
ENV-CI.ps1 ENV-QA.ps1
の両方を持つ動的テスト目的のために、私の固有の環境ファイル
をロードするためのPowerShellを得ることができなかったがファイルには、それぞれ1つの変数 [string] $ envName = "CI" と [string] $ envName = "QA"のみが含まれています。
私はどの環境で作業するのかを指定するためにpromptForChoiceを使用していますが、読み込むスクリプトを取得できません。
私はドットについて読んだことがあるが、これはこれは私のスクリプトファイルエラーがスローされません
function whatEnvironment {
[string] $answer = ""
[string] $title = ""
[string] $message = "What environment are you updating"
$ci = New-Object System.Management.Automation.Host.ChoiceDescription "&CI", `
"Update the CI environment."
$qa = New-Object System.Management.Automation.Host.ChoiceDescription "&QA", `
"Update the QA Environment."
$uat = New-Object System.Management.Automation.Host.ChoiceDescription "&UAT", `
"Update the UAT environment."
$production = New-Object System.Management.Automation.Host.ChoiceDescription "&Production", `
"Update the Production Environment."
$options = [System.Management.Automation.Host.ChoiceDescription[]]($ci, $qa, $uat, $production)
:OuterLoop do
{
$answer = $host.ui.PromptForChoice($title, $message, $options, -1)
switch ($answer)
{
0 {
. .\environment-CI.ps1
break OuterLoop
}
1 {
. .\environment-QA.ps1
break OuterLoop
}
2 {break OuterLoop}
3 {break OuterLoop}
}
}
while ($y -ne 100)
return $answer
}
cls
$environment = whatEnvironment
write-host $environment
write-host $envName
あるファイル
をロードするためには表示されませんが、環境変数を含むファイルがロードされていません。
これは単なるスコープの問題であると確信しています。変数は、それらのソースをドットする関数内でのみ有効です。 '[string] $ Global:envName =" CI "' – whatever
私はglobal:を使用しています。これは動作します。私が気になることの1つは、スクリプト実行後もグローバル・ステイとして定義された変数です。したがって、グローバルに物事を置くと、私は緊張し、利用可能なら他のものを好むでしょう。 –
Ansgardsの答えは間違いなく、これについてもっと良い方法です: '[string] $ Script:envName =" CI "'を使ってみてください。また、スクリプトが実行された後に変数を残さないようにすることもできます。あなたは今すぐそれを試すことができません。 – whatever