about_Object_Creation

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_Object_Creation

簡短描述

說明如何在 Windows PowerShell® 中建立物件。

詳細描述

您可以在 Windows PowerShell 中建立物件,並在命令和指令碼中使用您建立的物件。

建立物件的方式有很多種:

-- New-Object:New-Object Cmdlet 會建立 .NET Framework 物件或 COM 物件的執行個體。

-- 雜湊資料表:從 Windows PowerShell 3.0 開始,您可以從屬性名稱和屬性值的雜湊資料表中建立物件。

-- Import-Csv:Import-Csv Cmdlet 會從 CSV 檔案的項目建立自訂物件 (PSCustomObject)。每個資料列都是物件執行個體,而每個資料行都是物件屬性。

這個主題會一一示範並討論這些方法。

NEW-OBJECT

New-object Cmdlet 提供強固且一致的方式來建立新物件。Cmdlet 幾乎和所有類型及所有支援的 Windows PowerShell 版本都能相容。

若要建立新的物件,請指定 .NET Framework 類別或 COM 物件的 ProgID 類型。

例如,下列命令會建立版本物件。

      PS C:\>$v = New-Object -TypeName System.Version -ArgumentList 2.0.0.1
      PS C:\>$v

      Major  Minor  Build  Revision
      -----  -----  -----  --------
      2      0      0      1

      PS C:\>$v | Get-Member

          TypeName: System.Version
          ...
      

如需詳細資訊,請參閱 New-Object Cmdlet 的說明主題。

從雜湊資料表建立物件

從 Windows PowerShell 3.0 開始,您可以從屬性和屬性值的雜湊表中建立物件。

語法如下:

        [<class-name>]@{<property-name>=<property-value>;<property-name>=<property-value>}

這個方法僅適用於具有 null 建構函式的類別,也就是沒有參數的建構函式。物件屬性必須是公用且可設定。

從雜湊資料表建立自訂物件

自訂物件非常實用,而且很容易用雜湊資料表方法建立。若要建立自訂物件,請使用 PSCustomObject 類別,這是專門為此目的設計的類別。

自訂物件是從函式或指令碼傳回自訂輸出的絕佳方式。至今仍比傳回無法重新格式化或傳送至其他命令的格式化輸出來得實用的多。

Test-Object 函式中的命令會設定一些變數值,然後使用這些值建立自訂的物件。(您可以在 Update-Help Cmdlet 說明主題的範例一節中看到此物件的用法。)

        function Test-Object
        {    $ModuleName = "PSScheduledJob" 
             $HelpCulture = "en-us"
             $HelpVersion = "3.1.0.0"
             [PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
    
             $ModuleName = "PSWorkflow" 
             $HelpCulture = "en-us"
             $HelpVersion = "3.0.0.0"
             [PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
        }

此函式的輸出預設為資料表格式的自訂物件集合。

        PS C:\>Test-Object
        
        ModuleName        UICulture      Version
        ---------         ---------      -------
        PSScheduledJob    en-us          3.1.0.0
        PSWorkflow        en-us          3.0.0.0

使用者可以像處理標準物件一樣,管理自訂物件的屬性。

       PS C:\>(Test-Object).ModuleName
        PSScheduledJob
        PSWorkflow

從雜湊資料表建立非自訂物件

您也可以使用雜湊資料表建立非自訂類別的物件。當您建立非自訂類別的物件時,除非類別位於系統命名空間,否則一定要有完整的命名空間名稱。只使用此類別的屬性。

例如,下列命令會建立工作階段選項物件。

       [System.Management.Automation.Remoting.PSSessionOption]@{IdleTimeout=43200000; SkipCnCheck=$True}

雜湊資料表功能的需求,特別是 null 建構函式需求,可消除許多現有的類別。不過,大部分的 Windows PowerShell 選項類別是設計來使用這項功能及其他實用類別,例如 ScheduledJobTrigger 類別。

       [Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger]@{Frequency="Daily";At="15:00"}    

       Id         Frequency       Time                   DaysOfWeek              Enabled
       --         ---------       ----                   ----------              -------
       0          Daily           6/6/2012 3:00:00 PM                            True

您也可以在設定參數值時使用雜湊資料表功能。例如,New-PSSession Cmdlet 的 SessionOption 參數值和 Register-ScheduledJob 的 JobTrigger 參數值都可以是雜湊資料表。

       New-PSSession -ComputerName Server01 -SessionOption @{IdleTimeout=43200000; SkipCnCheck=$True}
       Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{Frequency="Daily";At="15:00"}    

IMPORT-CSV

您可以從 CSV 檔案中的項目建立自訂物件。當您使用 Import-Csv Cmdlet 匯入 CSV 檔案時,Cmdlet 會為檔案中每個項目建立自訂物件 (PSCustomObject)。資料行名稱是物件屬性。

例如,如果匯入電腦資產資料的 CSV 檔案,Import-CSV 會從輸入建立自訂物件的集合。

       #In Servers.csv
       AssetID, Name, OS, Department
       003, Server01, Windows Server 2012, IT
       103, Server33, Windows 7, Marketing
       212, Server35, Windows 8, Finance

       PS C:\>$a = Import-Csv Servers.csv
       PS C:\>$a
    
       AssetID        Name           OS                    Department
       -------        ----           --                    ----------
       003            Server01       Windows Server 2012   IT
       103            Server33       Windows 7             Marketing
       212            Server35       Windows 8             Finance

使用 Get-Member Cmdlet 確認物件類別。

       PS C:\>$a | Get-Member

          TypeName: System.Management.Automation.PSCustomObject
   
       Name        MemberType   Definition
       ----        ----------   ----------
       Equals      Method       bool Equals(System.Object obj)
       GetHashCode Method       int GetHashCode()
       GetType     Method       type GetType()
       ToString    Method       string ToString()
       AssetID     NoteProperty System.String AssetID=003
       Department  NoteProperty System.String Department=IT
       Name        NoteProperty System.String Name=Server01
       OS          NoteProperty System.String OS=Windows Server 2012

您可以像處理標準物件一樣使用自訂物件。

       PS C:\>$a | where {$_.OS -eq "Windows 8"}

       AssetID        Name           OS                    Department
       -------        ----           --                    ----------
       212            Server35       Windows 8             Finance

如需詳細資訊,請參閱 Import-Csv Cmdlet 的說明主題。

另請參閱

about_Objects

about_Methods

about_Properties

about_Pipelines

Get-Member

Import-Csv

New-Object