PowerShell Select-Object 簡單入門指南:

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 [-InputObject] [Property] [Optional Parameters]

按屬性選擇物件

由於需要更多詳細介紹才能滿足您想了解 Select-Object cmdlet 的需求,為什麼不從其中一個常見用法開始呢?透過使用 Select-Object cmdlet 從對象中選擇特定屬性來啟動本教程。

假設您有一個列出在您的計算機上運行的進程的列表,但您只想看到每個進程的名稱。將 Name 屬性指定給 Select-Object cmdlet 就可以了。

打開 PowerShell,運行下面的 Get-Process 命令,只檢索並打印所有進程的列表 (Select-Object) 按 Name

Get-Process | Select-Object Name
Selecting objects by property

除了運行的進程外,Select-Object cmdlet 還允許您處理 CSV 文件。假設您有一個包含許多列但只需要其中一部分的 CSV 文件。在這種情況下,讓 Select-Object cmdlet 只選擇相關的列,這樣您就可以操作和分析數據。

現在,運行以下命令以選擇多個屬性(Select-Object):NameCPU(用逗號分隔)。此功能在處理大型數據集時非常有用,其中您只需每個對象的一些屬性。

此外,此命令還使用CPU屬性作為參考對象,按-Descending順序對對象列表進行排序(Sort-Object)。

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

下面,您可以看到列出的進程,從消耗資源最多的Google Chrome開始(如果已安裝)。

Selecting multiple properties

創建一個計算屬性

在尋找更適合您需求的屬性時,考慮創建一個計算屬性。為什麼?計算屬性允許您操縱和轉換數據,結合現有屬性,執行數學運算,或以特定方式格式化數據。

要創建計算屬性,您必須指定一個新的屬性名稱和定義該如何計算屬性值的表達式:

運行以下命令執行以下操作:

  • 檢索運行中進程的列表(Get-Process),僅選擇(Select-ObjectNameCPU屬性。
  • 創建一個新的計算屬性,名為Name Memory (MB),該屬性計算每個進程的內存使用量(以兆字節為單位)。內存使用量使用Expression計算,該表達式將WorkingSet屬性除以1MB。任何有效的PowerShell表達式都可以用於創建計算屬性。
  • 按計算的Memory (MB)屬性以-Descending順序打印所有檢索到的運行中進程。
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

排除指定的屬性

在現實生活中,Select-Object命令的結果可能包含敏感信息,如用戶名和密碼。如何避免這種風險?

為了防止敏感數據顯示在輸出中,附加-ExcludeProperty參數以排除輸出中的指定屬性。

運行以下命令執行以下任務:

  • 檢索C:\\目錄中所有文件和文件夾(Get-ChildItem)的列表,並以遞歸方式執行(-Recurse)。
  • 將輸出導向 Select-Object cmdlet,以選擇 NameLengthLastWriteTime 屬性。
  • 從輸出中排除 (-ExcludeProperty) FullName 屬性。這樣做可以防止顯示完整路徑,可能包含機密信息。
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

跳過第一個或最後一個物件數量

在處理大量數據集時,找到所需的數據就像在煤礦中尋找鑽石一樣困難。但為什麼要浪費時間篩選無關的數據呢?

在 PowerShell 中,Select-Object cmdlet 提供兩個參數,讓您分別排除輸出中的第一個 (-Skip) 和最後一個 (-SkipLast) 物件的數量。

要查看跳過輸出中多個物件的工作方式:

運行以下命令以獲取所有運行中的進程 (Get-Process),但跳過前 100 個返回的物件。

請注意,跳過的物件數量基於整數值(正數和無小數點的整數),在這種情況下為 100

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

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

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

選擇第一個或最後一個物件數量

除了跳過第一和最後一個對象外,您還可以選擇首尾對象。使用 Select-Object 命令支持這一功能,並使用 FirstLast 參數,以跳過其他所有對象以節省時間和資源。

執行以下命令以獲取所有進程,但僅選擇 (Select-Object) 返回的前 -First 10 對象。

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

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

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

專屬選擇唯一對象

當您處理更大的數據集時,您將遇到可能希望從輸出中排除的重複值,這是很典型的情況。但是使用 Select-Object 命令的好處在於,您不需要手動排除重複值。

附加 -Unique 參數使您只能從輸出中選擇唯一的對象,從而使您的分析更加流暢,提高結果的準確性。

運行以下命令以選擇 (Select-Object),並返回前 -First 2 對象。

"1","1","2","3" | Select-Object -First 2

下面,您可以看到返回的兩個對象,無論其他對象是否是重複值。

Selecting and returning objects with duplicate values

最後,運行以下命令,僅返回所選擇的每個 -First 2 對象的一個 -Unique 值。

"1","1","2","3" | Select-Object -First 2 -Unique

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

Selecting unique objects exclusively

結論

PowerShell傾向於產生過多的信息。但是在本教程中,您學會了PowerShell的Select-Object cmdlet如何幫助您整理數據,僅查看所需的信息。

您已經看到不同的參數如何允許您從輸出中選擇和排除數據,特別是重複的值。使用Select-Object cmdlet,管理大量數據不必成為一項艱鉅的任務。

到目前為止,您可以快速優化結果,使其更適合分析和故障排除。但為什麼不學習如何格式化您的計算屬性,以提高可讀性和可用性呢?

Source:
https://adamtheautomator.com/powershell-select-object/