about_Object_Creation
適用於: Windows PowerShell 2.0, Windows PowerShell 3.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