如何将模块发送到Powershell Start-Job?

时间:2017-11-08 14:21:35

标签: powershell

我向Start-Job发送了一个模块,但它似乎是空的 为什么不填充我的start方法?

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

$m.start()

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

} -ArgumentList $m

我执行上述操作然后:

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

得到:

<argsO:>

唉,$模块似乎是空的。

1 个答案:

答案 0 :(得分:1)

您的$module变量正在填充,它不会产生任何输出。您可以将$module | gm放在Start-Job内进行检查,您会看到它是PSCustomObject

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

} -ArgumentList $m

Get-Job | Wait-Job | Receive-Job

不幸的是,您尝试做的事情不会起作用,因为当对象作为参数传递时会被反序列化,因此它会丢失其方法,因此尝试在其中调用.start()工作回报:

  

[Deserialized.System.Management.Automation.PSCustomObject]没有   包含名为&#39; start&#39;。

的方法