PowerShell腳本運行慢怎么辦?影響到正常企業流程正常運轉怎么辦?本文利用例子和數據給大家帶來讓PowerShell運行更快的五個常用方法。本人拙見,希望能夠給大家帶來一點啟發~
1. 善用命令參數進行過濾
例子:
如果要查詢事件ID為16的系統日志,一般人會這樣寫PowerShell腳本:

而大牛們會這樣寫代碼:

哪一個運行更快呢?來看效率對比結果:

顯然,第二種方法要快上數倍以上。第一種方法需要查詢遍歷整個事件日志后再在內存中過濾結果,而第二種方法直接使用命令自帶的參數過濾結果后輸出。
舉一反三:
使用某一個PowerShell命令前,要多多查詢命令幫助文檔,如果有過濾類型的參數,強烈推薦使用它來代替常規管道符過濾方法。
剛開始看Help的時候可能會顯得枯燥乏味,當你看懂后就會更好地提高腳本的效率,寫出更棒的腳本。
2. 減少耗時語句的循環次數
例子:
如果要從數據庫中獲取Type為0並且大小大於100000的文檔對象ID,有些人可能會這樣寫代碼:

還有一些人會這樣寫代碼:

哪一種運行更快呢?來看效率對比結果:

顯然第二種要快上幾倍。復雜的TSQL查詢語句使得返回的對象要少一些,耗時長的語句循環次數減少很多。
舉一反三:
盡量減少客戶端與服務器端交流的次數,復雜而精確的查詢語句可以使服務器返回盡量少的結果,該方法不止適用於數據庫查詢情況,也用於AD查詢,Office 365查詢等。
3. 盡量減少耗時命令的使用
例子:
如果要執行類似循環遍歷給一個文件末尾添加內容的操作,有些人可能會使用一些已有的PowerShell操作API,比如Add-Content,Out-File -Append和Export-CSV Append等。如下:

對於很小的文件,這些方法比較適用,如果是數以萬計的文件循環,則會大大的影響效率。
這里推薦使用.NET對象來代替已有PowerShell API,如下:

效率對比如下:

顯然,第二種要比第一種方法快上數倍以上,原因是由於Add-Content操作,每一次調用都需要這幾步驟——打開文件、滾到最后、添加內容、關閉文件,所以大量執行才會很慢。
舉一反三:
PowerShell一些現成的API使用起來很方便,但是也有自己的弊端,建議使用之前一定要細讀幫助文檔,了解具體過程,才能最佳的使用。
4. 減少無用內存對象復制操作
在給一個數組添加對象的時候,有些人會像下面的方法寫,以及效率對比如下:

可以看出,第二種方法效率高的不是一星半點,而且數組越大,差距越明顯。
原因是:在第一種方法執行過程中,.Net會復制整個數組到內存中,添加對象並且刪除原來的舊數組。既耗時又耗費空間。
5. 善用正則表達式
例子:
正則表達式是一個老生常談的技術,我相信沒有一個程序員不知道的。在PowerShell中正則表達式也具有高效的解析字符串的功能。請看如下例子:
我想把”TestDomain\TestUser”通過分析字符串的方法,取出Domain和User。

可以看到第二種正則表達式的方法是最高效的。
舉一反三:
正則表達式是每一個程序員必備的知識,應用巨廣泛。在PowerShell中檢索字符串匹配還具有很高的效率,建議大家一定要吃透用透。
[原創文章,轉載請注明出處,僅供學習研究之用,如有錯誤請留言,如覺得不錯請推薦,謝謝支持]
[原文:http://www.cnblogs.com/lavender000/p/7216477.html ,來自永遠薰薰]
