2017-11-08 8 views
0

Ich versuche, die Methode/Funktion eines Moduls zu einem Job zu senden.
Wie führe ich die Methode/Funktion innerhalb des Jobs aus?Wie rufe ich eine Modulfunktion in Powershell auf 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 

die oben laufen und dann job 498 | Receive-Job -Keep gibt:

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 

so zu all mein Wissen ich die Funktion/Methode zu tun haben.

Antwort

0

Nach der Frage Entsendung ich gefunden:

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 

Aber wie mein Kollege sagte: Hmmm, die das verstehen soll?
Gibt es nicht weniger komplizierte Methoden, um eine Methode auszuführen?

0

Start ist eine Skriptmethode. Sie müssen start als Methode aufrufen.

$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

In Ihrem Beispiel wird $ m.start() ausgeführt, wenn der Job gestartet wird, oder? - Nicht in der Arbeit. Sag, dass mein '" "' etwas Relevantes getan hat und dass ich '$ func()' _after_ '" "' 'nennen musste. – LosManos

Verwandte Themen