這幾天在看Powershell,感覺挺強大的,一個小任務,是用powershell實現多個文件中檢索萬行記錄的腳本。剛開始想用用Get-Content 結合Where-Object來實現,發現檢索的結果太慢,而且檢索的條目顯示出來后不知道來自哪個文件,這個雖然也容易實現,但是經過對多種方法的探索,我發現竟然一條強大的命令竟然可以實現所有這些需求,而且超快的。
一般用于IIS日志分析,由于主要是介紹這個PS命令的,IIS日志是從服務器端抓取的,這里僅就是測試用的一半數據。
首先進入到相應目錄,查看當前目錄下的文件,其中四個log文件是用來測試的。如下:

然后就用下面這條命令實現那個強大的功能:

比如要搜索關鍵字write,則輸入write回車之后,搜索到的結果如下(僅截取部分,這里由于隱私,日志文件是俺造的,只是數據量比較大,內容純屬虛構~~):

可以將這條語句賦給一個臨時變量,來查看一下在這瞬間查出了多少數據:

其實也不多,4個日志文件中瞬間查出了500條數據,其實這個看不出來,因為我造的數據量還不夠大。。。
下面對這條強大的命令簡單解釋下:
整體其實就是使用了Select-String這個命令,具體用法參考:
http://technet.microsoft.com/zh-cn/library/dd315403.aspx
Get-ChildItem是得到當前面目錄下的所有項,然后通過管道| 輸入給?(就是Where-Object的別名)來篩選,及篩選當前目錄下的log文件,$_代表當前對象,即前面查出的結果,-like使用了模式匹配,$(Read-Host)是從控制臺讀入,類似C#中的ReadLine()(相應的標準輸出是Write-Host),即當用戶輸入一個關鍵字后,命令會從后向前的執行。
由于是剛入門,如有出錯,大神們多多指教。