如何将模块发送到Powershell启动作业?

如何将模块发送到Powershell启动作业?,powershell,Powershell,我向开始作业发送了一个模块,但它似乎是空的。 为什么它没有填入我的start方法 $m = New-Module -ScriptBlock{ function start(){ "started" }; } -AsCustomObject $m.start() Start-Job -ScriptBlock{ $module = $args[0] "<argsO:$module>" } -Argume

我向
开始作业
发送了一个模块,但它似乎是空的。
为什么它没有填入我的
start
方法

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

$m.start()

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

} -ArgumentList $m
要获得:

<argsO:>


唉,$module似乎是空的。

您的
$module
变量正在填充,它只是不产生任何输出。您可以通过将
$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]没有 包含名为“start”的方法


该死!你知道实现我目标的方法吗将模块/对象发送到作业中?如果该模块已存在于正在运行作业的计算机上的一个默认模块目录中,您应该能够加载它。可以执行
Start job-InitializationScript{module Import'MyModule.psm1'-Force}
来为每个作业加载模块。但是这与我尝试发送的模块
$m
不同,因为这样的模块可以在调用者处设置内部变量。我可以通过
Start Job-ParameterList
发送此变量,但不希望它是
$m
模块的私有变量。
Start-Job -ScriptBlock{
    $module = $args[0]
    $module | gm

} -ArgumentList $m

Get-Job | Wait-Job | Receive-Job