并行运行函数

时间:2017-06-02 20:31:18

标签: powershell

有没有办法在 PowerShell 中运行并行编程功能

类似的东西:

Function BuildParallel($configuration)
{
    $buildJob = {
        param($configuration)
        Write-Host "Building with configuration $configuration."
        RunBuilder $configuration;
    }

    $unitJob = {
        param()
        Write-Host "Running unit."
        RunUnitTests;
    }

    Start-Job $buildJob -ArgumentList $configuration
    Start-Job $unitJob

    While (Get-Job -State "Running")
    {
        Start-Sleep 1
    }

    Get-Job | Receive-Job
    Get-Job | Remove-Job
}

不起作用,因为它抱怨不能识别“RunUnitTests”和“RunBuilder”,它们是在同一个脚本文件中声明的函数。显然这是因为脚本块是一个新的上下文,并且对同一文件中声明的脚本一无所知。

我可以尝试在Start-Job中使用 -InitializationScript ,但RunUnitTests和RunBuilder都会调用在同一文件中声明或从其他文件引用的更多函数,所以......

我确信有办法做到这一点,因为它只是模块化编程(函数,例程和所有东西)。

1 个答案:

答案 0 :(得分:1)

您可以将这些功能放在一个单独的文件中,然后通过点源将它们导入到当前上下文中。我在我的Powershell配置文件中执行此操作,因此我的一些自定义功能可用。

$items = Get-ChildItem "$PSprofilePath\functions"
$items | ForEach-Object {
    . $_.FullName
}  

如果你想导入一个文件,那就是:

. C:\some\path\RunUnitTests.ps1