2017-06-02 102 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