2017-11-08 2 views
1

モジュールでStart-Jobに送信しますが、それは空のようです。
なぜstartメソッドで埋められないのですか?Powershell Start-Jobにモジュールを送信するにはどうすればいいですか?

PS C:\temp> job 510 | Receive-Job -Keep 

取得する:

$m = New-Module -ScriptBlock{ 
     function start(){ 
      "started" 
     }; 
    } -AsCustomObject 

$m.start() 

Start-Job -ScriptBlock{ 
    $module = $args[0] 
    "<argsO:$module>" 

} -ArgumentList $m 

私は上記してから実行し

<argsO:> 

ああを、$モジュールは、空のようです。

答えて

1

$module変数が入力されていますが、出力が生成されません。あなたのStart-Job$module | gmを置くことによって確認することができますし、それがあることがわかりますPSCustomObject

Start-Job -ScriptBlock{ 
    $module = $args[0] 
    $module | gm 

} -ArgumentList $m 

Get-Job | Wait-Job | Receive-Job 

残念ながら、どのようなオブジェクトが直列化復元されますので、あなたが動作しませんやろうとしているときに、引数として渡されたとその結果として、それはとても仕事に戻り内.start()を呼び出そうとし、そのメソッドを失う:

は[Deserialized.System.Management.Automation.PSCustomObject] は、「スタート」という名前のメソッドが含まれていません。

+0

ダング!私の目標を達成する方法を知っていますか? - モジュール/オブジェクトをジョブに送りますか? – LosManos

+0

ジョブが実行されているマシン上のデフォルトのモジュールディレクトリのいずれかにモジュールがすでに存在する場合は、そのモジュールをロードできるだけです。 –

+1

すべてのジョブのモジュールのロードを実現するために 'Start-Job -InitializationScript {Module-Import 'MyModule.psm1' -Force}'を実行できます。 しかし、これはモジュール '$ m'と同じではありません。そのようなモジュールには呼び出し側で設定した内部変数を持つことができるので、私は送信しようとします。私は 'Start-Job -ParameterList'を通してこの変数を送ることができますが、' $ m'モジュールにはプライベートではないことを望みます。 – LosManos

関連する問題