从零开始学PowerShell(3)筛选的力量
在之前的幾篇里我們已經學會了如何使用Get-Help命令來查看指定命令的幫助信息,以及如何使用“管道”符將多個命令連接在一起組合使用。
今天要說的另一個極為非常有用的命令就是Where-Object。Where-Object它的主要作用是可以自定義過濾條件,并過濾從管道傳遞來的對象數據。簡單的說就是Where-Object命令是用來做過濾用的一個命令,一般置于管道后。
舉個例子,我們要獲得C:\Windows目錄下所有大小超過200 bytes的文件。像下面這樣只需要一行命令就可以解決這個問題(稍后我們再來一一分析里面的關鍵點)。
PS C:\Users\Administrator> Get-ChildItem C:\Windows | Where-Object -FilterScript {$_.Length -gt 200}你所看到的輸出結果正是滿足了文件大小超過200 bytes的文件信息。
這行命令理解起來非常的簡單,命令行的開頭我使用了Get-Childitem命令獲取指定路徑下的文件和文件夾信息(注:還記得之前有一篇文章里提到的一點嗎?如果你想知道這個命令是做什么用的,用Get-Help去查看下)。?
所以,在這里我用Get-ChildItem C:\Windows 獲取了C盤Windows下的文件與文件夾信息,接著我通過管道符把獲得的所有對象數據傳遞到下一個命令也就是Where-Object,它在獲得了管道傳來的對象數據后開始執行它的命令動作,它做了什么呢?我們給它設定了一個過濾條件,它的條件語法是這樣寫的:Where-Object -FilterScript {$_.Length -gt 200}
首先,Where-Object命令的使用方法只需要寫成Where-Object -FilterScript {}就可以了,當然你也可以省去-FilterScript參數,直接寫成這樣Where-Object {}。而大括號中的條件語句$_.Length -gt 200 自然就是我們自定義的詳細過濾條件。你可以簡單的把這里的$_理解為是指從當前的管道傳遞過來的對象,而$_.Length就代表傳過來的對象的Length屬性信息,-gt 200就代表大于200 bytes的意思。所以整個Where-Object {$_.Length -gt 200} 條件語句你就可以很好的理解了,我要過濾出每個文件Length屬性大于200的文件出來。
前面我們提到-gt 200,剛用PowerShell的新手一定會覺得很奇怪,其實這是PowerShell專門的比較運算符,在PowerShell中所有的比較運算符都有專門的PowerShell寫法,均以”-“開頭,所以你之前看到的-gt 200的含義就是大于200的意思,為了方便參考我直接摘抄標準說明如下:
明白了這個方法后,那就很簡單了,我們可以舉一反三的使用這個命令。比如像下面這樣,我要獲得所有名為svchost的進程信息。
PS C:\Users\Administrator> Get-Process | Where-Object{$_.ProcessName -eq "svchost"}Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- -----------354 33 8956 11296 0.14 276 0 svchost174 13 2496 7380 0.05 280 0 svchost374 15 4168 10668 0.80 544 0 svchost305 18 2628 6592 0.22 572 0 svchost441 21 12116 15708 7.06 788 0 svchost1087 70 13008 27916 5.61 820 0 svchost607 20 5852 10984 0.45 852 0 svchost533 39 6884 16348 0.50 932 0 svchost295 19 7820 11624 0.11 1052 0 svchost421 19 3596 8688 0.20 1484 0 svchost甚至可以篩選之后繼續篩選,比如我要在已經羅列出來的svchost進程信息里繼續篩選出Id屬性值大于1000的是哪些。
PS C:\Users\Administrator> Get-Process | Where-Object{$_.ProcessName -eq "svchost"} | Where-Object{$_.Id -gt 1000}Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- -----------295 19 7820 11624 0.11 1052 0 svchost416 19 3544 8656 0.20 1484 0 svchost對了,其實在PowerShell 3.0版本后Where就有了更簡單的寫法,我們可以甚至不需要大括號和”$_?”符號,像這樣Where-Obejct ProcessName -eq "svchost" 也能達到一樣的效果,下次我們會繼續講講如何進一步通過更多的命令獲得更深層的自定義信息。
總結
以上是生活随笔為你收集整理的从零开始学PowerShell(3)筛选的力量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PCL已有点类型介绍和增加自定义的点类型
- 下一篇: {%csrf_token%}的作用