about_Object_Creation

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.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를 지정합니다.

예를 들어 다음 명령은 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 cmdlet에 대한 도움말 항목을 참조하세요.

해시 테이블에서 개체 만들기

Windows PowerShell 3.0부터 속성 및 속성 값의 해시 테이블에서 개체를 만들 수 있습니다.

구문은 다음과 같습니다.

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

이 메서드는 매개 변수가 없는 생성자인 null 생성자가 있는 클래스에서만 작동합니다. 개체 속성은 public이고 설정 가능해야 합니다.

해시 테이블에서 사용자 지정 개체 만들기

사용자 지정 개체는 매우 유용하고 해시 테이블 메서드를 사용하여 쉽게 만들 수 있습니다. 사용자 지정 개체를 만들려면 이 용도로 특별 디자인된 클래스인 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 네임스페이스에 있는 경우 외에는 전체 네임스페이스 이름이 필요합니다. 클래스의 속성만 사용합니다.

예를 들어 다음 명령은 세션 옵션 개체를 만듭니다.

       [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