我正在使用powershell腳本編制我們的數據庫對象來執行定期審計。我現在已經把它變成了現在我在功能上開心的地方......但是希望它快一點。在SO上發現並試圖實現它......但是,我沒有看到速度方面的任何改進。 SMO連接的本質是不管這個過程如何進行?谷歌收集了很少的信息......有人可以用一些光進行報道?多線程Powershell腳本
Can Powershell Run Commands in Parallel?
我正在使用powershell腳本編制我們的數據庫對象來執行定期審計。我現在已經把它變成了現在我在功能上開心的地方......但是希望它快一點。在SO上發現並試圖實現它......但是,我沒有看到速度方面的任何改進。 SMO連接的本質是不管這個過程如何進行?谷歌收集了很少的信息......有人可以用一些光進行報道?多線程Powershell腳本
Can Powershell Run Commands in Parallel?
的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;
看起來你需要在PowerShell 4.0這個..但確實很有希望。謝謝。 –
只看該工作流支持的文件有一個foreach -parallel活動http://technet.microsoft.com/en-us/library/jj713711.aspx –
@KeithHill噢...,這看起來非常有前途!我會給它一個結果並更新結果!謝謝! –
兩個準備使用的工具在這個答案中提到:http://stackoverflow.com/a/21520735/323582 –