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 コマンドレットは、.NET Framework オブジェクトまたは COM オブジェクトのインスタンスを作成します。
-- ハッシュ テーブル:Windows PowerShell 3.0 以降では、プロパティ名とプロパティ値のハッシュ テーブルからオブジェクトを作成できます。
-- Import-Csv:Import-Csv コマンドレットは、CSV ファイル内の項目からカスタム オブジェクト (PSCustomObject) を作成します。各行がオブジェクト インスタンスで、各列がオブジェクト プロパティです。
このトピックでは、次の各メソッドについて説明します。
New-Object コマンドレットは、堅牢で一貫性のある方法で新しいオブジェクトを作成します。このコマンドレットは、Windows PowerShell のほぼすべての型およびサポートされているすべてのバージョンで機能します。
新しいオブジェクトを作成するには、.NET Framework クラスの型または COM オブジェクトの ProgID のどちらかを指定します。
たとえば、次のコマンドは Version オブジェクトを作成します。
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 コマンドレットのヘルプ トピックを参照してください。
Windows PowerShell 3.0 以降では、プロパティとプロパティ値のハッシュ テーブルからオブジェクトを作成できます。
構文は次のとおりです。
[<class-name>]@{<property-name>=<property-value>;<property-name>=<property-value>}
このメソッドは、null コンストラクター (パラメーターを持たないコンストラクター) があるクラスに対してのみ機能します。オブジェクト プロパティは、パブリックかつ設定可能である必要があります。
カスタム オブジェクトは非常に便利で、ハッシュ テーブルのメソッドを使用して非常に簡単に作成できます。カスタム オブジェクトを作成するには、PSCustomObject クラス (この目的専用に設計されたクラス) を使用します。
カスタム オブジェクトは、関数またはスクリプトからカスタマイズされた出力を返すための優れた方法です。再フォーマットしたり、その他のコマンドにパイプしたりできない書式設定された出力を返すよりもはるかに有用です。
Test-Object 関数のコマンドは、いくつかの変数値を設定し、それらの値を使用してカスタム オブジェクトを作成します。(Update-Help コマンドレットのヘルプ トピックの例のセクションで、使用中のこのオブジェクトを参照できます。)
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 名前空間にない限り、完全な名前空間名が必要です。クラスのプロパティのみを使用します。
たとえば、次のコマンドはセッション オプション オブジェクトを作成します。
[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 コマンドレットの 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"}
CSV ファイルの項目からカスタム オブジェクトを作成できます。Import-Csv コマンドレットを使用して CSV ファイルをインポートすると、そのファイル内の項目ごとにカスタム オブジェクト (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 コマンドレットを使用します。
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 コマンドレットのヘルプ トピックを参照してください。
about_Objects
about_Methods
about_Properties
about_Pipelines
Get-Member
Import-Csv
New-Object