Powershell:在后台调用函数,包含所有变量和对象

时间:2018-02-21 12:52:45

标签: powershell parallel-processing

我正在尝试调用已定义的函数(使用声明的变量和对象)作为后台任务来改变powershell gui中的对象。

应该是这样的:

function CallFunction
{
    #call function in background        
    Start-Job {alterLabel}
}

function alterLabel
{
    $Label.text                      = "Label was altered"
}

是否有可能调用已经使用过的此功能。因此,我无法将其定义为变量,因为它会导致巨大的冗余。

1 个答案:

答案 0 :(得分:0)

您可以使用runspacepool执行类似的操作:

$Runspace = [runspacefactory]::CreateRunspace()

$PowerShell = [powershell]::Create()

$PowerShell.runspace = $Runspace

$Runspace.Open()

[void]$PowerShell.AddScript({

    function alterLabel
            {
            $Label.text = "Label was altered"
            }

    alterLabel
})

$AsyncObject = $PowerShell.BeginInvoke()
$AsyncObject

根据评论,请尝试这种方法。在start-job中有一个 InitializationScript 参数,您可以在之前编译该函数。

$init= function alterLabel
{
    $Label.text  = "Label was altered"
}

Start-Job -InitializationScript $init -ScriptBlock {alterLabel}

希望它有所帮助。