about_Object_Creation

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.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

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"}    

Import-Csv

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