提升PowerShell腳本效率的五個經常使用方法

PowerShell腳本運行慢怎麼辦?影響到正常企業流程正常運轉怎麼辦?本文利用例子和數據給你們帶來讓PowerShell運行更快的五個經常使用方法。本人拙見,但願可以給你們帶來一點啓發~html

1. 善用命令參數進行過濾

例子:

若是要查詢事件ID爲16的系統日誌,通常人會這樣寫PowerShell腳本:程序員

而大牛們會這樣寫代碼:正則表達式

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

顯然,第二種方法要快上數倍以上。第一種方法須要查詢遍歷整個事件日誌後再在內存中過濾結果,而第二種方法直接使用命令自帶的參數過濾結果後輸出。數組

觸類旁通:

使用某一個PowerShell命令前,要多多查詢命令幫助文檔,若是有過濾類型的參數,強烈推薦使用它來代替常規管道符過濾方法。服務器

剛開始看Help的時候可能會顯得枯燥乏味,當你看懂後就會更好地提升腳本的效率,寫出更棒的腳本。學習

2. 減小耗時語句的循環次數

例子:

若是要從數據庫中獲取Type爲0而且大小大於100000的文檔對象ID,有些人可能會這樣寫代碼:3d

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

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

顯然第二種要快上幾倍。複雜的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 ,來自永遠薰薰]

相關文章
相關標籤/搜索