依據屬性值排序物件。

語法

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 參數,傳回內容不重複的排序清單。






請參閱




目錄