2012-01-01 24 views

答えて

8

関数内の変数は、関数の実行後も存続しません。関数が処理された後でそれらにアクセスする場合は、スコープ修飾子を接頭辞として使用します。詳細については、お使いのコンソールで

PS> function test-var{ $script:var='foo' } 
PS> test-var # excute the function 
PS> $var #print var 
foo 

タイプこれは:シェイが指摘したように

PS> Get-Help about_Scopes 
+0

ありがとうございます! – Sune

5

あなたはより高いレベルのスコープで利用できるようになり、関数のスコープ内のグローバル変数と呼ばれるものを作成することができます。しかし、グローバル変数は一般的には良い考えではないので、いくつかの選択肢を提案したいと思います。

これは、ウィキペディアglobal variableページからさ:

彼らは通常ため、その 非局所性、正確悪い習慣と考えられている:彼らは保護されたメモリに常駐しない限り、グローバル変数は、潜在的に どこでも(から変更することができますそうでない場合は が読み込み専用にレンダリングされます)、プログラムのどの部分もそれに依存する可能性があります。[1] したがって、グローバル変数は相互依存関係を作成するための無限の可能性を持ち、相互依存関係を追加すると複雑さが増します 複雑さ。

いくつかの選択肢:

  • 関数は、呼び出し側が必要とするデータを返しください。 Powershell関数は一般に、Powershell関数の名詞に関連するデータを返します。naming convention Verb-Noun。名詞に関連付けられていない他のデータを返す必要がある場合は、2番目の機能を作成することを検討してください。

    function Get-Directories { 
        param ([string] $Path) 
    
        # Code to get or create objects here. 
        $dirs = Get-ChildItem -Path $Path | where {$_.PsIsContainer} 
    
        # Explicitly return data to the caller. 
        return $dirs 
    } 
    
    $myDirs = Get-Directories -Path 'C:\' 
    
  • reference variableを使用してください。参照はメモリ内の変数のアドレスを関数に渡します。関数が変数のデータを変更すると、関数の外部でアクセスできるようになりますが、変数のスコープは変更されません。

    function Get-Directories { 
        param ([string] $Path, [ref] $Directories) 
        $Directories.Value = Get-ChildItem -Path $Path | where {$_.PsIsContainer} 
    } 
    
    $myDirs = $null 
    Get-Directories -Path 'C:\' -Directories ([ref] $myDirs) 
    

この情報がお役に立てば幸いです。ハッピーコーディング:-)

+0

あなたのthouroughの答えをありがとう! – Sune

3

で関数を実行する場合。あなたのスコープ内で関数が実行され、関数内で定義されたすべての変数が呼び出し側に利用可能になります。

すなわち

. $func 
$myPrivateVariable # Now Set in the parent scope. 

機能がモジュール内にある場合、あなたはまた、モジュールのスコープにアクセスするにはトリックのこの種を使用することができますが:

$m =Get-Module myModule 
. $m { $myPrivateModuleVariable } 

希望これは、あなたがソースコードを共有することができ

+0

ありがとうございました!しかし、なぜあなたはそれの前にドル記号であなたの機能を実行するのですか?変数のように? – Sune

+0

これはサンプルです:-)しかし、この方法でもコマンドを扱うことができます。私。 $ a = Get-Command Get-Command; &$ a、またはScriptBlock:$ a = {$ b = 1}; 。 $ a; $ b –

関連する問題