PowerShell 過濾和對比

2021-08-26 12:07:32 字數 1833 閱讀 5916

shell提供了兩種方式縮小結果集,他們都歸結為過濾。

第一種方式:嘗試指定cmdlet命令只檢索指定的內容。

第二種方式:採用迭代的方式,通過第乙個cmdlet 獲得所有結果,並使用第二個cmdlet過濾掉不想要的東西。

第一種方式我們稱之為盡可能提前過濾。這讓cmdlet更加容易知道你想要的是什麼。例如,使用get-service, 你可以告訴它你想要的服務名稱:

get-service -name e*, *s*

如果你想讓get-service只返回正在執行的服務,而不考慮他們的服務名稱,,該cmdlet就無法做到這一點。因為他們有提供相關的引數來指定該資訊。

同理,如果你是用微軟的活動目錄模組,素有的get- cmdlets 命令都提供了 -filter引數。通過 -filter *,你可以獲取所有的物件,但是這樣做會增加域控制器牙裡。我們可以指定類似下面清晰的條件說明;

get-adcomputer -filter "name  -like 'dc'"

上述技巧的優勢在於該cmdlet只檢索匹配的物件,我們稱之為左過濾技術。

左過濾

z左過濾意味著盡可能把過濾條件放置在左側或者靠近命令列的開始部分, 越早過濾掉你不需要的物件,就越能減輕其他cmdlet命令的工作,並且減少不必要的心思通過網路傳輸到你的電腦。

但是左過濾技術的缺點是每個cmdlet都可以通過自己的方式指定過濾,並且每個cmdlet都會有不同的過濾方式。所以就需要我們去熟悉很多cmdlets不同的過濾方式。

當然,我們也會碰到無法通過乙個cmdlet就可以完成你所需的所有過濾時,你可以使用乙個叫做where-object(alias: where) 的核心powershell cmdlet命令。這是乙個通用的語法,當需要檢索的時候,使用它過濾任何型別的物件,並把它放入管道。

為了使用where,我們需要學會如何告訴shell如何過濾你想要的資訊,這其中就包括了對比操作。

過濾物件的管道

例如: get-service | where

工作原理:

當你傳遞多個物件到where-object時,它會檢查每個物件從而進行過濾。一次只放置乙個物件到佔位符 $_., 接著執行對比來檢視返回的時true還是false。

如果時false,該物件就會被移出管道。如果結果為true,該物件就會從where傳輸到下乙個cmdlet的管道中。

佔位符 $_. 是乙個特殊的產物,該佔位符只能在powershell能找到特定位置中使用。在我們的例子中,佔位符恰好是在其中乙個特定位置。

這時候我們使用gm可以讓我們快速並且以方便的方式發現乙個物件中所包含的屬性。這樣我們就可以馬上使用這些屬性進行類似上面的比較。

迭代的命令列模式

我們稱powershell迭代命令列模式為psiclm,其核心思想在於你不需要一開始就建立乙個大而複雜的命令列,而是從簡單的開始。

比如,你想己算正在使用虛擬記憶體十大程序占用的虛擬記憶體總量,如果這些程序中含了powershell程序,而又不想在結果中包含該程序,快速羅列出幾個需要的步驟:

獲取程序列表: get-service

排除powershell程序;

按照虛擬記憶體進行排序;

只儲存前10個或者後10個,這取決於我們的排序方式; (使用select-object)

把剩下程序的虛擬記憶體相加。

get-process | where name -ne "powershell" | sort vm -descending | select -first 10  | measure-object -property

vm -sum

使用 powershell 的 grep 過濾文字

有個log檔案,大小在4m左右,要求找出裡面耗時超過100s 的記錄。首先想到了強大的 grep 那麼就搞起。先在網上找一下資料,這篇文章,有幾種方式 第一種 get content somefile.txt findstr someregexp get content可以換成cat,powersh...

和 對比 對比

對比是為了避免頁面上的元素太過相似。元素中如字型 顏色 大小 線寬 形狀 空間等不相同,那就乾脆讓它們截然不同。要讓頁面引人注目,對比通常是最重要的乙個因素。要記住乙個重要規則 要想實現有效的對比,對比就必須強烈。對比的目的 對比是增加頁面視覺效果的最有效途徑,也是在不同元素之間建立一種有組織的層次...

PowerShell 條件判斷和迴圈

對於多資料處理,條件判斷和迴圈是常用的。下面簡單列出基本用法。比較運算子 eq 等於 ne 不等於 gt 大於 ge 大於等於 lt 小於 le 小於等於 contains 包含 notcontains 不包含 布林運算子 and 和 or 或 xor 異或 not 逆 var 布林運算 陣列運算 ...