2016-04-05 4 views
-1

このようにスクリプトブロックにハッシュテーブルを渡そうとしましたが、$arg3はハッシュテーブルです。しかし、それは失敗しました。誰かが正しい方法でそれを行う方法を知っていますか?スクリプトブロックに何かを渡しているようには見えません。ハッシュテーブルをスクリプトブロックに渡すには?

$commandParameters.ComputerName = $ComputerName 

$commandParameters.ScriptBlock = { 

     param( 
      [Parameter()] 
      [switch]$arg1 = $false,    
      [Parameter()] 
      [array]$arg2, 
      [Parameter()] 
      [hashtable]$arg3     
     ) 
    enter code here 
    Doing something here  
} 

Invoke-Command @commandParameters -ArgumentList $arg1, @($arg2), $arg3 

=========================================== ======================

私は答えを自分自身を発見し、それは私のために動作します。これは連想配列を作成し、それをスクリプトブロックに渡す方法です。理由は分かりませんが、関数内のハッシュテーブルを参照するためにドット表記($ hash.a.b)を使用していましたが、それは機能しますが、スクリプトブロックでは機能しません。スクリプトブロックで[](例:$ hash [a] [b])を使う必要があるようです。

$ compADGroups = @ {}

foreachの($広告グループで$広告グループ){

if ($compADGroups.$computerNameGroup -eq $null) { 

    $compADGroups[$computerName] = @{} 

    $compADGroups[$computerName]["Group"] = @{} 

    $compADGroups[$computerName]["Group"] = $hashString        
} 

}

$セッション=新のPSSession -ComputerName 'コンピューター1'

Invoke-Commandコマンド-Session $セッション-ArgumentList $ compADGroups -ScriptBlock {のparam($ compADGroups)$ compADGroups [$ ENV:コンピュータ名] [ "グループ"]}

Get-PSSession |削除-PSSessionコマンド

+0

いただきましたエラーメッセージ? –

+2

「失敗」を定義します。期待どおりに動作しないのは何ですか?スクリプトブロックはどのように定義されていますか?ハッシュテーブルはどのように定義されていますか? –

+0

@Yean私たちが適切に援助できるよう、この情報すべてを元の質問に編集する必要があります。 –

答えて

0

あなたは、Invoke-Commandコマンドを正しく使用していることを確認してください。

$ScriptBlock = { 
param(
    [Parameter(Mandatory=$True,Position=1)] 
    [hashtable]$myHashTable 
) 

    # Code here 

} 

Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList ([hashtable]$hashtable) 

スクリプトブロックに特定の引数を指定する場合は、位置値も記述する必要があります。暗黙的に定義された引数の配列の2番目の引数としてハッシュテーブルを渡そうとする場合は、その特定の位置でハッシュテーブルを取るようにスクリプトブロックを記述します。例えば

$ScriptBlock= { 
param(
    [Parameter(Position=2)] # Take note of the position you set here 
    [hashtable]$myHashTable, 
    [Parameter(Position=1)] 
    [string]$myString, 
    [Parameter(Position=3)] 
    [int]$myInteger 
) 

    # Do stuff 

} 

Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList ($myString,$myHashTable,$myInteger); 
                     #^variable is in second position 
+0

私は試しました。これは、スクリプトブロック内のハッシュテーブルを正しく参照した後に機能するため、ここでは位置を指定してもしなくても問題ありません。 – Yean

関連する問題