2014-02-27 71 views
0

我正在使用powershell腳本編制我們的數據庫對象來執行定期審計。我現在已經把它變成了現在我在功能上開心的地方......但是希望它快一點。在SO上發現並試圖實現它......但是,我沒有看到速度方面的任何改進。 SMO連接的本質是不管這個過程如何進行?谷歌收集了很少的信息......有人可以用一些光進行報道?多線程Powershell腳本

Can Powershell Run Commands in Parallel?

+0

只看該工作流支持的文件有一個foreach -parallel活動http://technet.microsoft.com/en-us/library/jj713711.aspx –

+0

@KeithHill噢...,這看起來非常有前途!我會給它一個結果並更新結果!謝謝! –

+0

兩個準備使用的工具在這個答案中提到:http://stackoverflow.com/a/21520735/323582 –

回答

1

foreach -parallel construct只能在PowerShell中的工作流定義,沒有先進的功能一起使用。以下是您如何使用它的簡要示例。

workflow Audit-DB { 
    $ComputerList = @('server1', 'server2', 'server3')*100; 
    foreach -parallel ($Computer in $ComputerList) { 
     Get-Date -Format 'hh:mm:ss'; 
     # Run your database audit code here. 
     } 
} 

Audit-DB; 

Get-Date位只是爲了表明它真的並行工作。

當您在PowerShell Workflow中工作時,要記住的重要一點是您只能撥打活動而不是PowerShell功能。 PowerShell會自動將其許多核心cmdlet轉換爲活動,但您應該瞭解其差異。值得慶幸的是,有一個名爲InlineScript的活動允許您調用常規的PowerShell腳本代碼。

工作流的一個很酷的事情是,你甚至不需要使用foreach -parallel構造。而是自動獲取-PSComputerName參數,該參數允許您在遠程計算機上部署Workflow。這要求您提前在所有目標系統上配置PowerShell遠程處理,因爲Workflow位於其之上。

雖然它變得更好! PowerShell工作流也隱含地使您能夠將您的工作流作爲PowerShell後臺作業執行!您只需在調用工作流程時添加-AsJob參數。

下面是一個示例,顯示InlineScript,-AsJob參數以及如何將工作流程部署到遠程計算機。

workflow Audit-DBWorkflow { 
    InlineScript { 
     function Audit-DB { 
      # Run your audit code here 
     } 

     Audit-DB; 
    } 
} 

$ComputerList = @('localhost', 'localhost')*10; # Create an array of computers 
Audit-DBWorkflow -PSComputerName $ComputerList -AsJob; 
+1

看起來你需要在PowerShell 4.0這個..但確實很有希望。謝謝。 –