2017-06-02 83 views
3

有没有什么办法可以运行并行编程功能 in 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”,这是在同一个脚本文件中声明功能。显然这是因为脚本块是一个新的上下文,并且不知道在同一个文件中声明的脚本。

我可以尝试使用-InitializationScript在启动工作,但都RunUnitTests和RunBuilder调用同一个文件中声明或其他文件中引用更多的功能,所以......

我敢肯定有一个方法来做到这一点,因为它只是模块化编程(函数,例程和所有东西)。

回答

1

您可以将函数放在单独的文件中,并通过点源在需要的地方将其导入到当前上下文中。我在我的Powershell配置文件中这样做,所以我的一些自定义功能可用。

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

如果你想导入一个文件,这纯粹是:

. C:\some\path\RunUnitTests.ps1 
+0

但我应该使用里面的脚本块和功能将被自动识别? – Luis

+0

正确的,ScriptBlock /作业是在它自己的上下文中运行的,所以你可以在每个scriptblock的开始处运行它,以将你的函数导入到作业的上下文中。 –

+0

非常感谢,它工作正常! – Luis