本周,我再发一篇关于PowerShell 的探讨。我在管道中使用Sort-Object时,遇到了一个很有趣的现象,现在分享给你们。
你可能已经知道了,可以使用Sort-Object在管道中给你的对象排序。就让我们把从命令Get-Service中返回的对象按照属性Name简单的升序排列。
Get-Service | Sort-Object -Property Name | Format-Table Name, Status -AutoSize
按照服务的名称升序排列,非常靠谱。
PS I:\> Get-Service | Sort-Object -Property Name | Format-Table Name, Status -AutoSize Name Status ---- ------ AdobeARMservice Running AeLookupSvc Stopped ALG Stopped AlipaySecSvc Running AllUserInstallAgent Stopped AppHostSvc Running
接下来,再使用Sort-Object的参数–Descending按服务名称降序排列
Get-Service | Sort-Object -Property Name -Descending | Format-Table Name, Status -AutoSize
PS I:\> Get-Service | Sort-Object -Property Name -Descending | Format-Table Name, Status -AutoSize Name Status ---- ------ WwanSvc Stopped wudfsvc Running wuauserv Stopped WSService Stopped WSearch Running wscsvc Running
很简单,似乎也没问题。
那假如我现在想这样做:我按照服务的状态升序排列,把正在运行的服务放在前面,把已停止的服务放在后面。在字母中,‘R’排在‘S’前面,感觉应当没问题。
Get-Service | Sort-Object -Property Status | Format-Table Name, Status -AutoSize
PS I:\> Get-Service | Sort-Object -Property Status | Format-Table Name, Status -AutoSize Name Status ---- ------ vmicshutdown Stopped vmicrdv Stopped NetTcpPortSharing Stopped NcaSvc Stopped vmictimesync Stopped Netlogon Stopped vmickvpexchange Stopped PeerDistSvc Stopped
可是结果却出人意料,奇怪了,我明明期望运行的服务在前面,停止的服务在后面,因为我指定了按照服务的状态来升序排列啊。
属性“Status”是一个枚举值,而枚举值的定义中为整数。具体:服务停止的值为“1”,服务运行的值为“4”,这就不难理解了。
接下来让我们按照两个不同的属性,不同的排序顺序来排序:
get-service | sort-object -property @{Expression="Status";Descending=$true}, @{Expression="Name";Descending=$false} | format-table name, status –autosize
PS I:\> get-service | sort-object -property @{Expression="Status";Descending=$true}, @{Expression="Name";Descending=$false} |format-table name, status –autosize Name Status ---- ------ AdobeARMservice Running AlipaySecSvc Running AppHostSvc Running Appinfo Running AppMgmt Running AudioEndpointBuilder Running Audiosrv Running avast! Antivirus Running
最后再强调下,按照服务的状态Status降序排序时,运行的服务才会排在最前面。
原文作者:Stefan Stranger
原文链接:PowerShell Sort-Object gotcha’s
本文链接: https://www.pstips.net/powershell-sort-object-gotchas.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
学习了。传播知识,太赞了!