2016-09-01 15 views
0

私はPowershellで一日中戦っています。私はここに置いたようなものを作ろうとしている。私はスクリプトの冒頭に変数を宣言し、次に2つの関数を宣言します。 1つの関数は変数に値を設定し、もう1つの関数は変数を取得します。Powershell変数の割り当てと取得

変数を取得するときに何も得られません - それは空です。

誰もが(私は少し愚かな何かを推測している)私が間違ってやっている任意のアイデアを持ってい

$ImUsedInMultplePlaces = "" 

Function LetsChooseSomething 
{ 
    Write-Host "1: something" 
    Write-Host "2: Something else" 
    $answer = Read-Host "Pick One" 

    switch($answer) 
    { 
     "1" { $ImUsedInMultiplePlaces = "We chose something!"; Write-Host "I put it in there!" } 
     "2" { $ImUsedInMultiplePlaces = "We chose something else!"; Write-Host "I put it in there!" } 
    } 
} 

Function ShowMeMyChoice 
{ 
    Write-Host $ImUsedInMultiplePlaces 
} 

Write-Host "Welcome to this amazing script, im about to make you choose" 
Write-Host "" 
LetsChooseSomething 

Write-Host "" 
Write-Host "Great Choice!" 
Write-Host "" 

ShowMeMyChoice 
+1

[PowerShellの変数のスコープ](http://stackoverflow.com/q/93255)を参照してください。 69)と[公式ドキュメント](https://technet.microsoft.com/en-us/library/hh847849.aspx) – wOxxOm

答えて

1

それはscopeの質問です。これらと交換し、それを行ってください。

"1" { $global:ImUsedInMultiplePlaces = "We chose something!"; Write-Host "I put it in there!" } 
    "2" { $global:ImUsedInMultiplePlaces = "We chose something else!"; Write-Host "I put it in there!" } 
+0

私はそれが何か単純だと分かっていました。ありがとう!これで多くの時間を無駄にしました(はい、今働いています) – Kage

1

グローバル変数を使用すると、ソフトウェアを読みやすく理解しやすくなります。プログラム内の任意のコードはいつでも変数の値を変更できるため、変数の使用を理解するとプログラムの大部分を理解することがあります。グローバル変数は、分離コードを再利用可能なライブラリにすることをより困難にします。あるファイルに定義されているグローバル変数が、別のファイルのグローバル変数に使用されている同じ名前と衝突する可能性があり(リンクが失敗するため)、名前付けの問題が発生する可能性があります。同じ名前のローカル変数はグローバル変数をアクセスから保護することができ、コードを分かりにくくします。グローバル変数を設定すると、見つけにくく予測しにくい副作用が発生する可能性があります。グローバル変数を使用すると、単体テストの目的でコード単位を分離することがより困難になります。したがって、コードの質の低下に直接貢献することができます。

私は、より明確にするために、機能の名前を少し変更しました(変更しました)。あなたが見ることができるように

function Show-Selection ([string]$Selection) 
{ 
    Write-Host $Selection 
} 

:任意の文字列を受け入れることができる第二の関数に([文字列])パラメータを追加することにより

function Select-Something 
{ 
    Write-Host "1: Something" 
    Write-Host "2: Something else" 
    $answer = Read-Host -Prompt "Pick One" 

    switch($answer) 
    { 
     "1" { [string]$output = "We chose something!"  ; Write-Host "I put it in there!" } 
     "2" { [string]$output = "We chose something else!"; Write-Host "I put it in there!" } 
    } 

    return $output 
} 

最初の関数は、文字列を出力しますコードを読みやすくします。

Write-Host "Welcome to this amazing script, I'm about to make you choose." 
Write-Host "" 

$choice = Select-Something 

Write-Host "" 
Write-Host "Great Choice!" 
Write-Host "" 

Show-Selection $choice 
関連する問題