New-Object

Microsoft .NET Framework 또는 COM 개체의 인스턴스를 만듭니다.

Syntax

New-Object
   [-TypeName] <String>
   [[-ArgumentList] <Object[]>]
   [-Property <IDictionary>]
   [<CommonParameters>]
New-Object
   [-ComObject] <String>
   [-Strict]
   [-Property <IDictionary>]
   [<CommonParameters>]

Description

cmdlet은 New-Object .NET Framework 또는 COM 개체의 인스턴스를 만듭니다.

.NET Framework 클래스의 형식 또는 COM 개체의 ProgID를 지정할 수 있습니다. 기본적으로 .NET Framework 클래스의 정규화된 이름을 입력하고 cmdlet은 해당 클래스의 인스턴스에 대한 참조를 반환합니다. COM 개체의 인스턴스를 만들려면 ComObject 매개 변수를 사용하고 개체의 ProgID를 해당 값으로 지정합니다.

예제

예제 1: System.Version 개체 만들기

다음은 "1.2.3.4" 문자열을 생성자로 사용하여 System.Version 개체를 만드는 예제입니다.

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"

Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      4

예제 2: Internet Explorer COM 개체 만들기

이 예제에서는 Internet Explorer 애플리케이션을 나타내는 COM 개체의 두 인스턴스를 만듭니다. 첫 번째 인스턴스는 Property 매개 변수 해시 테이블을 사용하여 Navigate2 메서드를 호출하고 개체의 Visible 속성을 설정하여 애플리케이션을 표시합니다$True. 두 번째 인스턴스는 개별 명령을 사용하여 동일한 결과를 가져옵니다.

$IE1 = New-Object -COMObject InternetExplorer.Application -Property @{Navigate2="www.microsoft.com"; Visible = $True}

# The following command gets the same results as the example above.
$IE2 = New-Object -COMObject InternetExplorer.Application`
$IE2.Navigate2("www.microsoft.com")`
$IE2.Visible = $True`

예제 3: Strict 매개 변수를 사용하여 종료하지 않는 오류 생성

이 예제에서는 Strict 매개 변수를 추가하면 New-Object COM 개체가 interop 어셈블리를 사용할 때 cmdlet이 종료하지 않는 오류를 생성하는 것을 보여 줍니다.

$A = New-Object -COMObject Word.Application -Strict -Property @{Visible = $True}

New-Object : The object written to the pipeline is an instance of the type
"Microsoft.Office.Interop.Word.ApplicationClass" from the component's primary interop assembly. If
this type exposes different members than the IDispatch members, scripts written to work with this
object might not work if the primary interop assembly is not installed.

At line:1 char:14
+ $A = New-Object  <<<< -COM Word.Application -Strict; $a.visible=$true

예제 4: Windows 데스크톱을 관리하는 COM 개체 만들기

이 예제에서는 COM 개체를 만들고 사용하여 Windows 바탕 화면을 관리하는 방법을 보여 줍니다.

첫 번째 명령은 cmdlet의 New-Object ComObject 매개 변수를 사용하여 Shell.Application ProgID를 사용하여 COM 개체를 만듭니다. 결과 개체를 변수에 $ObjShell 저장합니다. 두 번째 명령은 변수를 $ObjShell cmdlet으로 Get-Member 파이프하여 COM 개체의 속성과 메서드를 표시합니다. 메서드 중에는 ToggleDesktop 메서드가 있습니다. 세 번째 명령은 개체의 ToggleDesktop 메서드를 호출하여 바탕 화면에서 열린 창을 최소화합니다.

$Objshell = New-Object -COMObject "Shell.Application"
$objshell | Get-Member
$objshell.ToggleDesktop()

TypeName: System.__ComObject#{866738b9-6cf2-4de8-8767-f794ebe74f4e}

Name                 MemberType Definition
----                 ---------- ----------
AddToRecent          Method     void AddToRecent (Variant, string)
BrowseForFolder      Method     Folder BrowseForFolder (int, string, int, Variant)
CanStartStopService  Method     Variant CanStartStopService (string)
CascadeWindows       Method     void CascadeWindows ()
ControlPanelItem     Method     void ControlPanelItem (string)
EjectPC              Method     void EjectPC ()
Explore              Method     void Explore (Variant)
ExplorerPolicy       Method     Variant ExplorerPolicy (string)
FileRun              Method     void FileRun ()
FindComputer         Method     void FindComputer ()
FindFiles            Method     void FindFiles ()
FindPrinter          Method     void FindPrinter (string, string, string)
GetSetting           Method     bool GetSetting (int)
GetSystemInformation Method     Variant GetSystemInformation (string)
Help                 Method     void Help ()
IsRestricted         Method     int IsRestricted (string, string)
IsServiceRunning     Method     Variant IsServiceRunning (string)
MinimizeAll          Method     void MinimizeAll ()
NameSpace            Method     Folder NameSpace (Variant)
Open                 Method     void Open (Variant)
RefreshMenu          Method     void RefreshMenu ()
ServiceStart         Method     Variant ServiceStart (string, Variant)
ServiceStop          Method     Variant ServiceStop (string, Variant)
SetTime              Method     void SetTime ()
ShellExecute         Method     void ShellExecute (string, Variant, Variant, Variant, Variant)
ShowBrowserBar       Method     Variant ShowBrowserBar (string, Variant)
ShutdownWindows      Method     void ShutdownWindows ()
Suspend              Method     void Suspend ()
TileHorizontally     Method     void TileHorizontally ()
TileVertically       Method     void TileVertically ()
ToggleDesktop        Method     void ToggleDesktop ()
TrayProperties       Method     void TrayProperties ()
UndoMinimizeALL      Method     void UndoMinimizeALL ()
Windows              Method     IDispatch Windows ()
WindowsSecurity      Method     void WindowsSecurity ()
WindowSwitcher       Method     void WindowSwitcher ()
Application          Property   IDispatch Application () {get}
Parent               Property   IDispatch Parent () {get}

예제 5: 생성자에 여러 인수 전달

이 예제에서는 여러 매개 변수를 사용하는 생성자를 사용하여 개체를 만드는 방법을 보여줍니다. ArgumentList 매개 변수를 사용할 때는 매개 변수를 배열에 넣어야 합니다.

$array = @('One', 'Two', 'Three')
$parameters = @{
    TypeName = 'System.Collections.Generic.HashSet[string]'
    ArgumentList = ([string[]]$array, [System.StringComparer]::OrdinalIgnoreCase)
}
$set = New-Object @parameters

PowerShell은 배열의 각 멤버를 생성자의 매개 변수에 바인딩합니다.

참고 항목

이 예제에서는 가독성을 위해 매개 변수 스플래팅을 사용합니다. 자세한 내용은 about_Splatting 참조하세요.

예제 6: 배열을 단일 매개 변수로 사용하는 생성자 호출

이 예제에서는 배열 또는 컬렉션인 매개 변수를 사용하는 생성자를 사용하여 개체를 만드는 방법을 보여줍니다. 배열 매개 변수는 다른 배열 내부에 래핑되어야 합니다.

$array = @('One', 'Two', 'Three')
# This command throws an exception.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList $array
# This command succeeds.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList (,[string[]]$array)
$set

New-Object : Cannot find an overload for "HashSet`1" and the argument count: "3".
At line:1 char:8
+ $set = New-Object -TypeName 'System.Collections.Generic.HashSet[strin ...
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

One
Two
Three

이 예제에서 개체를 만드는 첫 번째 시도가 실패합니다. PowerShell은 생성자의 매개 변수에 세 멤버를 $array 바인딩하려고 했지만 생성자는 세 개의 매개 변수를 사용하지 않습니다. 다른 배열을 래핑 $array 하면 PowerShell에서 생성자의 매개 변수에 세 멤버 $array 를 바인딩하려고 시도하지 않습니다.

매개 변수

-ArgumentList

.NET Framework 클래스의 생성자에 전달할 인수 배열을 지정합니다. 생성자가 배열인 단일 매개 변수를 사용하는 경우 해당 매개 변수를 다른 배열 내부에 래핑해야 합니다. 예시:

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList (,$bytes)

ArgumentList동작에 대한 자세한 내용은 about_Splatting 참조하세요.

ArgumentList별칭은 Args입니다.

Type:Object[]
Aliases:Args
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComObject

COM 개체의 ProgID(프로그래밍 식별자)를 지정합니다.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Property

속성 값을 설정하고 새 개체의 메서드를 호출합니다.

키가 속성 또는 메서드의 이름이고 값이 속성 값 또는 메서드 인수인 해시 테이블을 입력합니다. New-Object 는 개체를 만들고 각 속성 값을 설정하고 해시 테이블에 나타나는 순서대로 각 메서드를 호출합니다.

새 개체가 PSObject 클래스에서 파생되고 개체 New-Object 에 없는 속성을 지정하는 경우 개체에 지정된 속성을 NoteProperty로 추가합니다. 개체가 PSObject가 아닌 경우 명령은 종료되지 않는 오류를 생성합니다.

Type:IDictionary
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Strict

만들려는 COM 개체가 interop 어셈블리를 사용할 때 cmdlet이 종료하지 않는 오류를 생성했음을 나타냅니다. 이 기능은 COM 호출 가능 래퍼를 사용하여 .NET Framework 개체와 실제 COM 개체를 구분합니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TypeName

.NET Framework 클래스의 정규화된 이름을 지정합니다. TypeName 매개 변수와 ComObject 매개 변수를 둘 다 지정할 수 없습니다.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

입력

None

개체를 이 cmdlet으로 파이프할 수 없습니다.

출력

Object

이 cmdlet은 만든 개체를 반환합니다.

참고

  • New-Object 는 VBScript CreateObject 함수의 가장 일반적으로 사용되는 기능을 제공합니다. VBScript와 같은 Set objShell = CreateObject("Shell.Application") 문은 PowerShell에서 변환 $objShell = New-Object -COMObject "Shell.Application" 할 수 있습니다.
  • New-Object 는 명령줄 및 스크립트 내에서 .NET Framework 개체를 쉽게 사용할 수 있도록 하여 Windows 스크립트 호스트 환경에서 사용할 수 있는 기능을 확장합니다.