Sort-Object
依據屬性值排序物件。
語法
Sort-Object [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-Descending] [-InputObject <psobject>] [-Unique] [<CommonParameters>]
描述
Sort-Object Cmdlet 會依據物件的屬性值以遞減或遞減順序來排序物件。
您可以指定一個屬性或多個屬性 (用於多重索引鍵排序),並選取區分大小寫的排序或不區分大小寫的排序。也可以指示 Sort-Object 只顯示特定屬性有唯一值的物件。
參數
-CaseSensitive
指出排序應區分大小寫。根據預設,排序不會區分大小寫。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Culture <string>
指定排序時使用的文化特性設定。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Descending
物件以遞減順序排序。預設為遞增順序。
Descending 參數會套用到所有屬性。若要以遞增順序
排序一些屬性,以遞減順序排序其他屬性,就必須使用雜湊表指定屬性值。如需詳細資料,請參閱範例。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-InputObject <psobject>
指定要排序的物件。
當您使用 InputObject 參數送出項目的集合時,Sort-Object 會接收一個代表集合的物件。因為一個物件無法進行排序,Sort-Object 將原封不動地傳回整個集合。
若要排序物件,請經由管道將物件輸出至 Sort-Object。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
true (ByValue) |
接受萬用字元? |
false |
-Property <Object[]>
指定排序時所要使用的屬性。物件是依據這些屬性的值來排序。請輸入屬性的名稱。允許使用萬用字元。
如果指定多個屬性,會先依據第一個屬性排序物件。如果有一個以上的物件的值與第一個屬性的值相同,會再依據第二個屬性排序。這個過程會持續到已無指定的屬性可套用,或不再有物件群組需要排序為止。
如果未指定屬性,Cmdlet 會依據物件型別的預設屬性進行排序。
Property 參數的值可以是新的計算屬性。若要建立計算屬性,請使用雜湊表。有效的索引鍵包括:
-- Expression <字串> 或 <指令碼區塊>
-- Ascending <布林值>
-- Descending <布林值>
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
true |
-Unique
排除重複的成員,並只傳回集合的唯一成員。此參數可以用來代替 Get-Unique Cmdlet。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.Management.Automation.PSObject 您可經由管道將要排序的物件輸出至 Sort-Object。 |
輸出 |
System.Management.Automation.PSObject Sort-Object 會傳回已排序的物件。 |
附註
Sort-Object 會依據您所指定的屬性或該物件型別的預設排序屬性來排序物件。
如果物件沒有其中一個指定的屬性,Cmdlet 會將該物件的屬性值解譯為 NULL,並放在排序順序的最後。
排序物件時,Sort-Object 會使用每個屬性的 Compare 方法。如果屬性沒有實作 IComparable,Cmdlet 會將屬性值轉換成字串,並使用 System.String 的 Compare 方法。
Sort-Object Cmdlet 會依據物件的屬性值以遞減或遞減順序來排序物件。
如果排序依據的屬性值為列舉,Sort-Object 會以數值順序來排序列舉值,不會對列舉成員名稱進行排序。例如,若依據狀態排序服務,狀態為 "Stopped" 的服務會出現在狀態為 "Running" 的服務的前面,因為 Status 的值為 ServiceControllerStatus 列舉,其中 "Stopped" 的值為 1,而 "Running" 的值為 4。
範例 1
C:\PS>get-childitem | sort-object
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 9/13/2005 4:24 PM 0 0
-a--- 9/6/2005 4:19 PM 12 a.csv
-a--- 9/21/2005 3:49 PM 529 a.Ps
-a--- 8/22/2005 4:14 PM 22 a.pl
-a--- 9/27/2005 10:33 AM 24 a.txt
-a--- 9/15/2005 10:31 AM 398 a.vbs
-a--- 7/21/2005 12:39 PM 37066 a.xml
-a--- 8/28/2005 11:30 PM 5412 a.xslt
-a--- 10/25/2005 1:59 PM 125 AdamTravel.txt
-a--- 7/21/2005 9:49 AM 59 add2Num.Ps
-a--- 8/29/2005 5:42 PM 7111 add-content.xml
-a--- 9/21/2005 12:46 PM 8771 aliens.Ps
-a--- 8/10/2005 2:10 PM 798 array.xml
-a--- 8/4/2004 5:00 AM 110 AUTORUN.INF
-a--- 9/6/2005 4:20 PM 245 b.csv
...
描述
-----------
這個命令會對目前目錄中的子目錄和檔案進行排序。因為未指定任何屬性,這個命令會依據檔案和目錄的預設排序屬性、Name,以遞增字母順序來進行排序。
範例 2
C:\PS>get-childitem | sort-object -property length
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 12/3/2006 5:35 PM 2 pref.txt
-a--- 9/6/2006 3:33 PM 15 count.txt
-a--- 7/26/2006 10:01 AM 30 filenoext
-a--- 8/18/2006 9:02 AM 52 temp.ps1
-a--- 8/18/2006 9:02 AM 52 temp.msh
-a--- 9/6/2006 3:33 PM 56 fivewords.txt
-a--- 7/26/2006 9:28 AM 80 date.csv
-a--- 7/29/2006 7:15 PM 84 test2.txt
-a--- 7/29/2006 7:15 PM 84 test.ps1
描述
-----------
這個命令會依照檔案長度的遞增順序,顯示目前目錄中的檔案。
範例 3
C:\PS>get-process | sort-object -property WS | select-object -last 5
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1105 25 44236 18932 197 93.81 2032 iexplore
2526 66 37668 36836 221 393.27 868 svchost
974 19 22844 45928 371 88.39 3952 WINWORD
1371 22 42192 61872 323 75.75 1584 INFOPATH
2145 58 93088 70680 619 396.69 3908 OUTLOOK
描述
-----------
這個命令會依據處理序的工作組大小,顯示電腦上佔用最多記憶體的五個處理序。
該命令會使用 Get-Process Cmdlet 取得處理序清單,並使用管線運算子 (|) 將結果傳遞給 Sort-Object Cmdlet,讓後者依照工作組順序來排序物件。
另一個管線運算子會將結果傳送給 Select-Object,讓後者只顯示清單中的後五個項目。
範例 4
C:\PS>get-history | sort-object -descending
Id CommandLine
-- -----------
51 get-history | sort -descending
50 get-history | sort -descending
49 get-history | sort -descending
48 get-history | sort -descending
47 get-history | sort -descending
46 get-history | sort -descending
45 get-history | sort -descending
44 cd $pshome
43 get-childitem | sort-object
42 gci *.txt
描述
-----------
這個命令使用 Id 屬性做為預設索引鍵,以排序 HistoryInfo 物件。
範例 5
C:\PS>C:\PS> get-service | sort-object -property `
@{Expression="Status";Descending=$true}, `
@{Expression="DisplayName";Descending=$false}
Status Name DisplayName
------ ---- -----------
Running ALG Application Layer Gateway Service
Running Ati HotKey Poller Ati HotKey Poller
Running wuauserv Automatic Updates
Running BITS Background Intelligent Transfer Ser...
Running Client for NFS Client for NFS
...
Stopped clr_optimizatio... .NET Runtime Optimization Service v...
Stopped Alerter Alerter
Stopped AppMgmt Application Management
Stopped aspnet_state ASP.NET State Service
Stopped ATI Smart ATI Smart
Stopped ClipSrv ClipBook
描述
-----------
這個命令會以 Status 的遞減順序和 DisplayName 的遞增順序來顯示電腦上的服務。
該命令會使用 Get-Service Cmdlet 取得電腦上的服務,並使用管線運算子 (|) 將服務傳送給 Sort-Object Cmdlet。
為了讓一個屬性依照遞增順序排序,另一個屬性依照遞減順序排序,該命令會為 Property 參數的值使用雜湊表。此雜湊表會以 Expression 索引鍵來指定屬性名稱,並以 Ascending 或 Descending 索引鍵來指定排序順序。
依照遞減順序排序 Status 值所產生的檢視,會將 Status 值為 "Running" 的屬性列在 Status 值為 "Stopped" 的屬性的前面。依照遞增順序排序時,"Stopped" 會出現在 "Running" 的前面,因為 Status 為列舉屬性,其中 "Stopped" 的值 (1) 小於 "Running" 的值 (4)。
範例 6
C:\PS>get-childitem *.txt | sort-object -property @{Expression={$_.LastWriteTime - $_.CreationTime}; Ascending=$false} | Format-Table LastWriteTime, CreationTime
LastWriteTime CreationTime
------------- ------------
2/21/2006 10:22:20 AM 10/3/2005 4:19:40 PM
2/27/2006 8:14:24 AM 2/23/2006 10:41:08 PM
2/24/2006 1:26:19 PM 2/23/2006 11:23:36 PM
1/5/2006 12:01:35 PM 1/5/2006 11:35:30 AM
2/24/2006 9:25:40 AM 2/24/2006 9:22:24 AM
2/24/2006 9:40:01 AM 2/24/2006 9:39:41 AM
2/21/2006 10:21:30 AM 2/21/2006 10:21:30 AM
描述
-----------
這個命令根據 CreationTime 與 LastWriteTime 之間的時間長度,依遞減順序排序文字檔。
範例 7
C:\PS>get-content servers.txt
localhost
test01
server01
server02
localhost
server01
C:\PS> get-content servers.txt | sort-object -unique
localhost
server01
server02
test01
描述
-----------
這些命令會對文字檔中的伺服器名稱進行排序。第二個命令會使用 Sort-Object Cmdlet 搭配 Unique 參數,傳回內容不重複的排序清單。