2017-11-08 19 views
0

モジュールのメソッド/関数をジョブに送信しようとしました。
ジョブ内でメソッド/関数を実行するにはどうすればよいですか?Powershell Start-jobでモジュール関数を呼び出す方法


# Create a module with 1 method. 
$m = New-Module -ScriptBlock{ 
     function start(){ 
      "started" 
     }; 
    } -AsCustomObject 

# Start a job and send in the function/method. 
Start-Job -ScriptBlock{ 
    $func = $args[0] 
    "<args0:$func>" # The function/method seems to contain what I want. 
    $funC# <------------ How do I call $func/$m.start? 
} -ArgumentList $m.start 

上記を実行し、その後job 498 | Receive-Job -Keepができます:私は関数/メソッドを持っているすべての私の知識にとても

PS C:\temp\> job 500 | Receive-Job -Keep 
<argsO:System.Object start();> 

RunspaceId   : 9271e389-cc97-4d2a-9396-5f0ce3f0ae5c 
Script    : 
             "started" 

OverloadDefinitions : {System.Object start();} 
MemberType   : ScriptMethod 
TypeNameOfValue  : System.Object 
Value    : System.Object start(); 
Name    : start 
IsInstance   : True 

答えて

0

Start-Job -ScriptBlock{ 
    $func = $args[0] 
    "<args0:$func>" # The function/method seems to contain what I want. 
    $script = [scriptblock]::Create($func.Script); 
    $script.Invoke() 
} -ArgumentList $m.start 

をしかし、私の同僚が言ったように:うーん、誰がこれを理解することになっていますか?
メソッドを実行するにはあまり複雑ではありませんか?

0

startはscriptmethodです。メソッドとしてstartを呼び出す必要があります。私が見つけた質問投稿後

$M | Get-Member 
$M.start() 

# Create a module with 1 method. 
$m = New-Module -ScriptBlock{ 
     function start(){ 
      mkdir 'C:\Vincent\job' 
     }; 
    } -AsCustomObject 

# Start a job and send in the function/method. 
Start-Job -ScriptBlock{ 
    $func = $args[0] 
    "<args0:$func>" # The function/method seems to contain what I want. 
    $funC# <------------ How do I call $func/$m.start? 
} -ArgumentList $m.start() 

Importing Modules using -AsCustomObject

+0

あなたの例では、$ m.start()はジョブの開始時に実行されますが、そうではありませんか? - 仕事の中ではありません。私の '' "が何か関連していて、' $ func() '_after_' ""を呼び出さなければならないとします。 – LosManos

関連する問題