PowerShell 是一個強大的工具,用於管理數據,但通常一次提供太多信息。正如您所知,過多的信息可能會讓人感到不知所措,難以解析。但請不要擔心。 PowerShell Select-Object
命令碼將派上用場。
在本教程中,您將學習 Select-Object
命令碼的基礎知識,以多種方式縮小或過濾結果。
繼續閱讀,開始輕鬆管理數據!
先決條件
本教程包含實際示範。要跟隨操作,請確保您的系統已安裝 PowerShell。本教程使用 Windows 10 和 PowerShell 7,但任何現代版本也應該適用。
什麼是 PowerShell Select-Object 命令碼?
Select-Object
命令碼通過允許您從對象或數據集中選擇特定屬性來簡化數據管理。同時,您還可以重命名屬性或根據現有屬性創建計算屬性。
基本的 Select-Object
語法如下:
Parameter | Function |
---|---|
-InputObject |
Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet. |
Property |
Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas. |
Optional Parameters |
Allows you to refine your selection, such as selecting a certain number of objects or skipping objects. |
按屬性選擇物件
由於需要更多詳細介紹才能滿足您想了解 Select-Object
cmdlet 的需求,為什麼不從其中一個常見用法開始呢?透過使用 Select-Object
cmdlet 從對象中選擇特定屬性來啟動本教程。
假設您有一個列出在您的計算機上運行的進程的列表,但您只想看到每個進程的名稱。將 Name
屬性指定給 Select-Object
cmdlet 就可以了。
打開 PowerShell,運行下面的 Get-Process
命令,只檢索並打印所有進程的列表 (Select-Object
) 按 Name
。

除了運行的進程外,
Select-Object
cmdlet 還允許您處理 CSV 文件。假設您有一個包含許多列但只需要其中一部分的 CSV 文件。在這種情況下,讓Select-Object
cmdlet 只選擇相關的列,這樣您就可以操作和分析數據。
現在,運行以下命令以選擇多個屬性(Select-Object
):Name
和CPU
(用逗號分隔)。此功能在處理大型數據集時非常有用,其中您只需每個對象的一些屬性。
此外,此命令還使用CPU
屬性作為參考對象,按-Descending
順序對對象列表進行排序(Sort-Object
)。
下面,您可以看到列出的進程,從消耗資源最多的Google Chrome開始(如果已安裝)。

創建一個計算屬性
在尋找更適合您需求的屬性時,考慮創建一個計算屬性。為什麼?計算屬性允許您操縱和轉換數據,結合現有屬性,執行數學運算,或以特定方式格式化數據。
要創建計算屬性,您必須指定一個新的屬性名稱和定義該如何計算屬性值的表達式:
運行以下命令執行以下操作:
- 檢索運行中進程的列表(
Get-Process
),僅選擇(Select-Object
)Name
和CPU
屬性。 - 創建一個新的計算屬性,名為
Name
Memory (MB)
,該屬性計算每個進程的內存使用量(以兆字節為單位)。內存使用量使用Expression
計算,該表達式將WorkingSet
屬性除以1MB
。任何有效的PowerShell表達式都可以用於創建計算屬性。 - 按計算的
Memory (MB)
屬性以-Descending
順序打印所有檢索到的運行中進程。

排除指定的屬性
在現實生活中,Select-Object
命令的結果可能包含敏感信息,如用戶名和密碼。如何避免這種風險?
為了防止敏感數據顯示在輸出中,附加-ExcludeProperty
參數以排除輸出中的指定屬性。
運行以下命令執行以下任務:
- 檢索
C:\\
目錄中所有文件和文件夾(Get-ChildItem
)的列表,並以遞歸方式執行(-Recurse
)。
- 將輸出導向
Select-Object
cmdlet,以選擇Name
、Length
和LastWriteTime
屬性。 - 從輸出中排除 (
-ExcludeProperty
)FullName
屬性。這樣做可以防止顯示完整路徑,可能包含機密信息。

跳過第一個或最後一個物件數量
在處理大量數據集時,找到所需的數據就像在煤礦中尋找鑽石一樣困難。但為什麼要浪費時間篩選無關的數據呢?
在 PowerShell 中,Select-Object
cmdlet 提供兩個參數,讓您分別排除輸出中的第一個 (-Skip
) 和最後一個 (-SkipLast
) 物件的數量。
要查看跳過輸出中多個物件的工作方式:
運行以下命令以獲取所有運行中的進程 (Get-Process
),但跳過前 100
個返回的物件。
請注意,跳過的物件數量基於整數值(正數和無小數點的整數),在這種情況下為
100
。

現在,運行以下命令以獲取工作目錄內容的列表 (Get-ChildItem
),但跳過最後的 (-SkipLast
) 100
個返回的物件。

選擇第一個或最後一個物件數量
除了跳過第一和最後一個對象外,您還可以選擇首尾對象。使用 Select-Object
命令支持這一功能,並使用 First
和 Last
參數,以跳過其他所有對象以節省時間和資源。
執行以下命令以獲取所有進程,但僅選擇 (Select-Object
) 返回的前 -First 10
對象。

現在,運行以下命令以獲取工作目錄的所有內容 (Get-ChildItem
),但僅選擇 (Select-Object
) 返回的後 -Last 10
對象。

專屬選擇唯一對象
當您處理更大的數據集時,您將遇到可能希望從輸出中排除的重複值,這是很典型的情況。但是使用 Select-Object
命令的好處在於,您不需要手動排除重複值。
附加 -Unique
參數使您只能從輸出中選擇唯一的對象,從而使您的分析更加流暢,提高結果的準確性。
運行以下命令以選擇 (Select-Object
),並返回前 -First 2
對象。
下面,您可以看到返回的兩個對象,無論其他對象是否是重複值。

最後,運行以下命令,僅返回所選擇的每個 -First 2
對象的一個 -Unique
值。
這次,您可以看到從前兩個物件中僅返回一個,因為另一個只是重複的值。正如您所了解的,這個輸出證明了-Unique
參數對於快速丟棄數據中的任何重複物件是很方便的。

結論
PowerShell傾向於產生過多的信息。但是在本教程中,您學會了PowerShell的Select-Object
cmdlet如何幫助您整理數據,僅查看所需的信息。
您已經看到不同的參數如何允許您從輸出中選擇和排除數據,特別是重複的值。使用Select-Object
cmdlet,管理大量數據不必成為一項艱鉅的任務。
到目前為止,您可以快速優化結果,使其更適合分析和故障排除。但為什麼不學習如何格式化您的計算屬性,以提高可讀性和可用性呢?
Source:
https://adamtheautomator.com/powershell-select-object/