使用Measure-Object和Compare-Object可以統(tǒng)計(jì)和對(duì)比管道結(jié)果。Measure-Object允許指定待統(tǒng)計(jì)對(duì)象的屬性。Compare-Object可以對(duì)比對(duì)象前后的快照。
統(tǒng)計(jì)和計(jì)算
使用Measure-Object可以對(duì)對(duì)象的屬性求最小值、最大值、平均值、和。例如要查看當(dāng)前目錄文件占用空間的情況。
PS C:Powershell> ls | measure length
Count : 19
Average :
Sum :
Maximum :
Minimum :
Property : length
PS C:Powershell> ls | measure length -Average -Sum -Maximum -Minimum
Count : 19
Average : 53768.8421052632
Sum : 1021608
Maximum : 735892
Minimum : 0
Property : length
使用Measure-Object還可以統(tǒng)計(jì)文本文件中的字符數(shù),單詞數(shù),行數(shù)
例如我們可以把下面的文本保存到:word.txt 。
Retirement Anxiety Spreads Among the One Percent
Report: Green Monday a Boon for Online Shopping
5 Lesser-Known Ways to Boost Your Credit Score
PS C:Powershell> Get-Content .word.txt | measure -Line -Word -Character
Lines Words Characters Property
----- ----- ---------- --------
3 23 141
比較對(duì)象
有時(shí)需要比較前后兩個(gè)時(shí)間段開(kāi)啟了那些進(jìn)程,服務(wù)狀態(tài)有什么變化。類似這樣的工作可以交給Compare-Object。
比較不同的時(shí)間段
可以先將所有開(kāi)啟的進(jìn)程信息快照保存到一個(gè)變量中,過(guò)一段時(shí)間,再保存一份新的進(jìn)程快照,然后就可以通過(guò)Compare-Object進(jìn)行對(duì)比了。
PS C:Powershell> $before=Get-Process
PS C:Powershell> $after=get-process
PS C:Powershell> Compare-Object $before $after
InputObject SideIndicator
----------- -------------
System.Diagnostics.Process (notepad) =>
System.Diagnostics.Process (notepad) =>
System.Diagnostics.Process (AcroRd32)
$before 是一個(gè)數(shù)組存儲(chǔ)了當(dāng)前所有的Process對(duì)象,Compare-Object的結(jié)果有兩個(gè)列:InputObject為前后不一致的對(duì)象,SideIndicator為不一致?tīng)顟B(tài),=>表示新增的對(duì)象,結(jié)合上面的例子分析:在before和after的時(shí)間段有3個(gè)進(jìn)程(AcroRd32,AcroRd32,prevhost)關(guān)閉了,有2個(gè)進(jìn)程開(kāi)啟了(notepad,notepad)。
檢查對(duì)象的變化
Compare-Object并不僅僅能比較對(duì)象組中的是否新增和減少了對(duì)象,它還可以比較每個(gè)對(duì)象的屬性變化,因?yàn)樗幸粋€(gè)參數(shù)-property 。
PS C:PowerShell> Get-Service wsearch
Status Name DisplayName
------ ---- -----------
Running wsearch Windows Search
PS C:PowerShell> $svc1=Get-Service wsearch
PS C:PowerShell> $svc1.stop()
PS C:PowerShell> $svc2=Get-Service wsearch
PS C:PowerShell> Compare-Object $svc1 $svc2 -Property Status,Name
Status Name SideIndicator
------ ---- -------------
StartPending wsearch =>
Running wsearch
比較文件的內(nèi)容
對(duì)于文本文件可以通過(guò)Get-Content進(jìn)行讀取,并且將文件以行為單位保存為一個(gè)數(shù)組,這時(shí)依然可以通過(guò)Compare-Object進(jìn)行比較。下面的例子創(chuàng)建兩個(gè)不同的文本文件,然后通過(guò)Compare-Object比較兩個(gè)文件的Get-Content結(jié)果。
PS C:PowerShell> "Hellow
>> Power
>> Shell" >a.txt
>>
PS C:PowerShell> "Hollow
>> Shell
>> Linux" >b.txt
>>
PS C:PowerShell> Compare-Object (Get-Content .a.txt) (Get-Content .b.txt)
InputObject SideIndicator
----------- -------------
Hollow =>
Linux =>
Hellow
保存快照以便后期使用
上面的例子都是把對(duì)象保存在變量中,變量有一個(gè)缺點(diǎn)就是一旦Powershell退出或者電腦關(guān)閉變量都會(huì)消失。所以最好的方法就是把對(duì)象保存到磁盤文件中。怎樣把對(duì)象序列化成一個(gè)文件,Powershell提供了一條命令:Export-Clixml,可以完成此工作,還有一條反序列化的命令I(lǐng)mport-Clixml。這樣可以使Compare-object的命令更方便。例如一個(gè)月前保存一個(gè)$before對(duì)象,一個(gè)月后比較都可以。
PS C:PowerShell> Get-Process | Export-Clixml before.xml
PS C:PowerShell> $before=Import-Clixml .before.xml
PS C:PowerShell> $after=Get-Process
PS C:PowerShell> Compare-Object -ReferenceObject $before -DifferenceObject $after
您可能感興趣的文章:- PowerShell實(shí)現(xiàn)按條件終止管道的方法
- PowerShell中終止管道的方法
- PowerShell入門教程之PowerShell管道介紹
- Windows Powershell導(dǎo)出管道結(jié)果
- Windows Powershell過(guò)濾管道結(jié)果
- Windows Powershell排序和分組管道結(jié)果
- Windows Powershell使用管道
- Windows Powershell 管道和重定向
- PowerShell函數(shù)中接收管道參數(shù)實(shí)例
- PowerShell中使用Filter來(lái)創(chuàng)建管道輸入函數(shù)
- PowerShell管道入門必看篇(管道例子大全)