開(kāi)頭先講四句話:

第一,如果要過(guò)濾對(duì)像,可以使用Where-Object;
第二,如果要過(guò)濾對(duì)像的屬性,可以使用Select-Object;
第三,如果要自定義過(guò)濾效果,可以使用ForEach-Object;
第四,如果想過(guò)濾重復(fù)的結(jié)果,可以使用Get-Unique;
然后再加上對(duì)有些命令行中 -Filter的理解,F(xiàn)ilter在有些命令中會(huì)出現(xiàn),也是過(guò)濾的意思,我查了半天的文檔,沒(méi)有一個(gè)明確的解釋,但突然從一個(gè)命令的解釋中得到了官方的解釋:
查詢一個(gè)命令的全部幫助,如下:
PS C:\> help Get-WmiObject -full
NAME
Get-WmiObject
SYNOPSIS
Gets instances of WMI classes or information about the available classes.
SYNTAX
Get-WmiObject [-Class] <String> [[-Property] <String[]>] [-Amended] [-AsJob] [-Authentication {Default | None |
Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-Authority <String>] [-ComputerName
<String[]>] [-Credential <PSCredential>] [-DirectRead] [-EnableAllPrivileges] [-Filter <String>] [-Impersonation
{Default | Anonymous | Identify | Impersonate | Delegate}] [-Locale <String>] [-Namespace <String>]
[-ThrottleLimit <Int32>] [<CommonParameters>]
這條命令中有一個(gè)-filter參數(shù),詳細(xì)解釋如下:
-Filter <String>
Specifies a Where clause to use as a filter. Uses the syntax of the WMI Query Language (WQL).
Important: Do not include the Where keyword in the value of the parameter. For example, the following commands
return only the logical disks that have a DeviceID of 'c:' and services that have the name 'WinRM' without
using the Where keyword.
`Get-WmiObject Win32_LogicalDisk -filter "DeviceID = 'c:' "`
`Get-WmiObject win32_service -filter "name='WinRM'"`
Required? false
Position? named
Default value None
Accept pipeline input? False
Accept wildcard characters? false
我對(duì)這個(gè)解釋的理解是,首先不是所有命令支持-filter參數(shù),對(duì)于支持的命令,所遵守的語(yǔ)法是WMI查詢語(yǔ)言,如果想過(guò)多的查義這個(gè)句法,自行研究吧。
準(zhǔn)備數(shù)據(jù)源,其實(shí)我就想看看一個(gè)對(duì)像有多少屬性,然后去調(diào)用一下子。
PS C:\> Get-Service | Select-Object -First 1 | Get-Member -MemberType Properties
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
CanPauseAndContinue Property bool CanPauseAndContinue {get;}
CanShutdown Property bool CanShutdown {get;}
CanStop Property bool CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName Property string DisplayName {get;set;}
MachineName Property string MachineName {get;set;}
ServiceHandle Property System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName Property string ServiceName {get;set;}
ServicesDependedOn Property System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType Property System.ServiceProcess.ServiceType ServiceType {get;}
Site Property System.ComponentModel.ISite Site {get;set;}
StartType Property System.ServiceProcess.ServiceStartMode StartType {get;}
Status Property System.ServiceProcess.ServiceControllerStatus Status {get;}
第一,如果要過(guò)濾對(duì)像,可以使用Where-Object;
PS C:\> Get-Service | Where-Object {$_.status -eq "Running"}
Status Name DisplayName
------ ---- -----------
Running AdobeARMservice Adobe Acrobat Update Service
Running Appinfo Application Information
Running Apple Mobile De... Apple Mobile Device Service
Running AppMgmt Application Management
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
Running BDESVC BitLocker Drive Encryption Service
這個(gè)命令的理解就是,where本身就是條件的意思,然后得接一個(gè)指令塊,指明具體的條件。換句都明白的話就是我想看看現(xiàn)在哪些服務(wù)是運(yùn)行的狀態(tài)呢。$_代表當(dāng)前對(duì)像。點(diǎn)就不解釋了。
第二,如果要過(guò)濾對(duì)像的屬性,可以使用Select-Object;
當(dāng)我們找出想要的對(duì)像來(lái),還有一些想法,一般情況下,只顯示了部分對(duì)像的屬性,那要看到指定的對(duì)像屬性怎么弄呢? SO EASY
PS C:\> Get-Service | Where-Object {$_.status -eq "Running"} | Select-Object Name,MachineName,Site,Status
Name MachineName Site Status
---- ----------- ---- ------
AdobeARMservice . Running
Appinfo . Running
Apple Mobile Device Service . Running
AppMgmt . Running
AudioEndpointBuilder . Running
Audiosrv . Running
BDESVC . Running
用句中國(guó)人都能聽(tīng)懂的話,就是想看哪個(gè)屬性寫哪個(gè)屬性。
第三,如果要自定義過(guò)濾效果,可以使用ForEach-Object;
這個(gè)就得換個(gè)例子了,同時(shí)有一個(gè)好玩的占位符可以用呀,顯得高大尚,其實(shí)很EASY
上代碼:
PS C:\> ls | ForEach-Object {"FileName:{0} FileSize{1:n2}KB" -f $_.name,($_.length / 1kb)}
FileName:XMPCache FileSize0.00KB
FileName:baseline.xml FileSize30,812.20KB
看想來(lái)很惡心的樣子,其實(shí)用簡(jiǎn)單的意思理解一下,LS 這條命令產(chǎn)生了好多對(duì)像集,然后用FOREACH-OBJECT 進(jìn)行處理,后面的代碼塊就是執(zhí)行的條件啦,{0}{1:n2} -f $_.name,($_.length / 1kb)}
這件事的理解就是0,1代表占位符而已,簡(jiǎn)單吧。{1:n2}n2,看上去很高大上的,其實(shí)就是N代表是數(shù)字,2,呵呵,保留兩位小數(shù)。這些東西如果不解釋,呵呵,以前我就是非常不明白,看了好多文檔,其實(shí)SO EASY。
第四,如果想過(guò)濾重復(fù)的結(jié)果,可以使用Get-Unique;
這個(gè)直譯就是得到唯一值。舉個(gè)例子。
PS C:\> ls | ForEach-Object {$_.Extension } | Sort-Object | Get-Unique
.csv
.docx
.html
.log
.ps1
.txt
.xlsx
.xml
PS C:\>
這個(gè)命令的解釋,LS 想要得到當(dāng)前的目錄對(duì)像,然后找找當(dāng)前文件的擴(kuò)展名,再扔進(jìn)一個(gè)管道排排序,再扔進(jìn)一個(gè)管道去掉重復(fù)的。記住你扔來(lái)扔去的都是對(duì)一個(gè)對(duì)像集進(jìn)行操作而已。
POWERSHELL的命令和語(yǔ)法感覺(jué)很復(fù)雜,但只要是理解了原理,使用起來(lái)就SO EASY啦。事上無(wú)難事,只要肯攀登。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:PowerSehll中過(guò)濾管道結(jié)果-創(chuàng)新互聯(lián)
地址分享:http://www.chinadenli.net/article26/djcscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容