다음을 통해 공유


Add-Type

Microsoft .NET Framework 유형(클래스)을 Windows PowerShell 세션에 추가합니다.

구문

Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-언어 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-Namespace <string>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-언어 {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

설명

Add-Type cmdlet을 사용하면 Windows PowerShell 세션에서 .NET Framework 클래스를 정의할 수 있습니다. 그런 다음 New-Object cmdlet을 사용하여 개체를 인스턴스화하고 다른 .NET Framework 개체를 사용하는 경우와 마찬가지로 이 개체를 사용할 수 있습니다. Windows PowerShell 프로필에 Add-Type 명령을 추가하면 모든 Windows PowerShell 세션에서 해당 클래스를 사용할 수 있습니다.

기존 어셈블리 또는 소스 코드 파일을 지정하여 유형을 지정할 수도 있고 인라인 또는 변수에 저장된 소스 코드를 지정할 수도 있습니다. 메서드만 지정해도 Add-Type은 해당 클래스를 정의하고 생성합니다. 이 기능을 사용하여 Windows PowerShell의 관리되지 않는 함수에 대한 플랫폼 호출(P/Invoke)을 수행할 수 있습니다. 소스 코드를 지정할 경우 Add-Type은 지정된 소스 코드를 컴파일하여 새 .NET Framework 유형이 포함된 인-메모리 어셈블리를 생성합니다.

Add-Type의 매개 변수를 사용하여 대체 언어 및 컴파일러(기본값은 CSharp), 컴파일러 옵션, 어셈블리 종속성, 클래스 네임스페이스, 해당 유형의 이름 및 결과 어셈블리를 지정할 수 있습니다.

매개 변수

-AssemblyName <string[]>

해당 유형을 포함하는 어셈블리 이름을 지정합니다. Add-Type은 지정된 어셈블리에서 유형을 가져옵니다. 어셈블리 이름을 사용하여 유형을 만드는 경우 이 매개 변수는 필수입니다.

어셈블리의 전체 이름 또는 간단한 이름("부분 이름"이라고도 함)을 입력합니다. 어셈블리 이름에는 와일드카드 문자를 사용할 수 있습니다. 간단한 이름이나 부분 이름을 입력하면 Add-Type은 이를 전체 이름으로 확인한 다음 전체 이름을 사용하여 어셈블리를 로드합니다.

이 매개 변수는 경로 또는 파일 이름을 사용하지 않습니다. 어셈블리 DLL(동적 연결 라이브러리) 파일에 대한 경로를 입력하려면 Path 매개 변수를 사용하십시오.

필수 여부

true

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

true

-CodeDomProvider <CodeDomProvider>

코드 생성기 또는 컴파일러를 지정합니다. Add-Type은 지정된 컴파일러를 사용하여 소스 코드를 컴파일합니다. 기본값은 CSharp 컴파일러입니다. Language 매개 변수를 사용하여 지정할 수 없는 언어를 사용하려면 이 매개 변수를 사용하십시오. 지정하는 CodeDomProvider는 소스 코드에서 어셈블리를 생성할 수 있어야 합니다.

필수 여부

false

위치

named

기본값

CSharp 컴파일러

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-CompilerParameters <CompilerParameters>

소스 코드 컴파일러에 대한 옵션을 지정합니다. 이 옵션은 수정 없이 컴파일러로 보내집니다.

이 매개 변수를 사용하여 실행 파일을 생성하거나, 리소스를 포함하거나, "/unsafe" 옵션과 같은 명령줄 옵션을 설정하도록 컴파일러에 지시할 수 있습니다. 이 매개 변수는 CompilerParameters 클래스(System.CodeDom.Compiler.CompilerParameters)를 구현합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-IgnoreWarnings

컴파일러 경고를 무시합니다. 이 매개 변수를 사용하여 Add-Type이 컴파일러 경고를 오류로 처리하지 않도록 지정할 수 있습니다.

필수 여부

false

위치

named

기본값

False

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-언어 <Language>

소스 코드에 사용할 언어를 지정합니다. Add-Type은 이 언어를 사용하여 올바른 코드 컴파일러를 선택합니다.

유효한 값은 "CSharp", "CSharpVersion3", "VisualBasic" 및 "JScript"입니다. 기본값은 "CSharp"입니다.

필수 여부

false

위치

named

기본값

CSharp

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-MemberDefinition <string[]>

클래스의 새 속성 또는 메서드를 지정합니다. Add-Type은 해당 속성 또는 메서드를 지원하는 데 필요한 템플릿 코드를 생성합니다.

이 기능을 사용하여 Windows PowerShell의 관리되지 않는 함수에 대한 플랫폼 호출(P/Invoke)을 수행할 수 있습니다. 자세한 내용은 예를 참조하십시오.

필수 여부

true

위치

2

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Name <string>

만들 클래스의 이름을 지정합니다. 멤버 정의에서 유형을 생성하는 경우 이 매개 변수는 필수입니다.

유형 이름 및 네임스페이스는 세션 내부에서 고유해야 합니다. 유형을 언로드하거나 변경할 수 없습니다. 유형에 대한 코드를 변경해야 하는 경우 해당 이름을 변경하거나 새 Windows PowerShell 세션을 시작해야 합니다. 그렇지 않으면 명령이 실패합니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Namespace <string>

유형의 네임스페이스를 지정합니다.

이 매개 변수가 명령에 포함되어 있지 않으면 유형은 Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes 네임스페이스에 만들어집니다. 이 매개 변수가 명령에 빈 문자열 값 또는 $null 값으로 지정된 경우 유형은 전역 네임스페이스에 생성됩니다.

필수 여부

false

위치

named

기본값

Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-OutputAssembly <string>

어셈블리에 대한 DLL 파일을 해당 위치에 지정된 이름으로 생성합니다. 경로(선택 사항)와 파일 이름을 입력하십시오. 와일드카드 문자를 사용할 수 있습니다. Add-Type은 기본적으로 어셈블리를 메모리에만 생성합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

true

-OutputType <OutputAssemblyType>

출력 어셈블리의 출력 유형을 지정합니다. 유효한 값은 Library, ConsoleApplication 및 WindowsApplication입니다.

기본적으로 출력 유형은 지정되지 않습니다.

이 매개 변수는 명령에서 출력 어셈블리를 지정한 경우에만 사용할 수 있습니다.

필수 여부

false

위치

named

기본값

없음

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-PassThru

추가된 유형을 나타내는 System.Runtime 개체를 반환합니다. 기본적으로 이 cmdlet에서는 출력을 생성하지 않습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Path <string[]>

해당 유형이 포함된 소스 코드 파일 또는 어셈블리 DLL 파일의 경로를 지정합니다.

소스 코드 파일을 전송하면 Add-Type은 파일의 코드를 컴파일하고 해당 유형의 인-메모리 어셈블리를 만듭니다. Path 값에 지정된 파일 이름 확장명에 따라 Add-Type이 사용하는 컴파일러가 결정됩니다.

어셈블리 파일을 전송하면 Add-Type은 해당 어셈블리에서 유형을 가져옵니다. 인-메모리 어셈블리 또는 전역 어셈블리 캐시를 지정하려면 AssemblyName 매개 변수를 사용하십시오.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-ReferencedAssemblies <string[]>

유형이 종속된 어셈블리를 지정합니다. 기본적으로 Add-Type은 System.dll 및 System.Management.Automation.dll을 참조합니다. 이 매개 변수를 사용하여 지정하는 어셈블리는 기본 어셈블리에 추가하여 참조됩니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-TypeDefinition <string>

유형 정의가 포함된 소스 코드를 지정합니다. 소스 코드를 문자열 또는 here-string으로 입력하거나 소스 코드가 포함된 변수를 입력하십시오. here-string에 대한 자세한 내용은 about_Quoting_Rules를 참조하십시오.

유형 정의에 네임스페이스 선언을 포함하십시오. 네임스페이스 선언을 누락하면 유형 이름이 다른 유형 또는 다른 유형의 바로 가기 이름과 같아져서 해당 유형을 덮어쓰는 일이 발생할 수 있습니다. 예를 들어 "Exception"이라는 유형을 정의하는 경우 System.Exception에 대한 바로 가기로 "Exception"을 사용하는 스크립트가 실패합니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-UsingNamespace <string[]>

클래스에 필요한 다른 네임스페이스를 지정합니다. 이 매개 변수는 C#의 Using 키워드와 매우 유사합니다.

기본적으로 Add-Type은 System 네임스페이스를 참조합니다. MemberDefinition 매개 변수가 사용되는 경우 Add-Type은 기본적으로 System.Runtime.InteropServices 네임스페이스도 참조합니다. UsingNamespace 매개 변수를 사용하여 추가하는 네임스페이스는 기본 네임스페이스에 추가하여 참조됩니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

없음

Add-Type으로 개체를 파이프할 수 없습니다.

출력

없음 또는 System.RuntimeType

PassThru 매개 변수를 사용하는 경우 Add-Type은 새 유형을 나타내는 System.RuntimeType 개체를 반환합니다. 그렇지 않으면 아무 출력도 생성하지 않습니다.

참고

추가한 유형은 현재 세션에서만 존재합니다. 해당 유형을 모든 세션에서 사용하려면 Windows PowerShell 프로필에 추가하십시오. 프로필에 대한 자세한 내용은 about_Profiles를 참조하십시오.

유형 이름(및 네임스페이스)은 세션 내부에서 고유해야 합니다. 유형을 언로드하거나 변경할 수 없습니다. 유형에 대한 코드를 변경해야 하는 경우 해당 이름을 변경하거나 새 Windows PowerShell 세션을 시작해야 합니다. 그렇지 않으면 명령이 실패합니다.

IronPython 및 JSharp와 같은 일부 언어에 대한 CodeDomProvider 클래스는 출력을 생성하지 않습니다. 따라서 이러한 언어로 작성된 유형은 Add-Type에 사용할 수 없습니다.

이 cmdlet은 CodeDomProvider 클래스에 기반을 두고 있습니다. 이 클래스에 대한 자세한 내용은 Microsoft .NET Framework SDK를 참조하십시오.

예 1

C:\PS>$source = @"
public class BasicTest
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }

    public int Multiply(int a, int b)
    {
        return (a * b);
    }
}
"@

C:\PS> Add-Type -TypeDefinition $source

C:\PS> [BasicTest]::Add(4, 3)

C:\PS> $basicTestObject = New-Object BasicTest 
C:\PS> $basicTestObject.Multiply(5, 2)

설명
-----------
이들 명령은 변수에 저장된 소스 코드를 지정하여 BasicTest 클래스를 세션에 추가합니다. 해당 유형에는 Add라는 정적 메서드와 Multiply라는 비정적 메서드가 포함되어 있습니다.

첫 번째 명령은 클래스의 소스 코드를 $source 변수에 저장합니다.

두 번째 명령은 Add-Type cmdlet을 사용하여 클래스를 세션에 추가합니다. 인라인 소스 코드를 사용하고 있으므로 이 명령은 TypeDefinition 매개 변수를 사용하여 코드를 $source 변수에 지정합니다.

나머지 명령에서는 새 클래스를 사용합니다.

세 번째 명령은 BasicTest 클래스의 Add 정적 메서드를 호출합니다. 이 명령에서는 이중 콜론 문자(::)를 사용하여 클래스의 정적 멤버를 지정합니다.

네 번째 명령은 New-Object cmdlet을 사용하여 BasicTest 클래스의 인스턴스를 인스턴스화한 다음 새 개체를 $basicTestObject 변수에 저장합니다. 

다섯 번째 명령은 $basicTestObject의 Multiply 메서드를 사용합니다.





예 2

C:\PS>[BasicTest] | get-member

C:\PS> [BasicTest] | get-member -static

C:\PS> $basicTestObject | get-member

C:\PS> [BasicTest] | get-member


   TypeName: System.RuntimeType

Name                           MemberType Definition
----                           ---------- ----------
Clone                          Method     System.Object Clone()
Equals                         Method     System.Boolean Equals
FindInterfaces                 Method     System.Type[] FindInt
...


C:\PS> [BasicTest] | get-member -static

   TypeName: BasicTest

Name            MemberType Definition
----            ---------- ----------
Add             Method     static System.Int32 Add(Int32 a, Int32 b)
Equals          Method     static System.Boolean Equals(Object objA,
ReferenceEquals Method     static System.Boolean ReferenceEquals(Obj


C:\PS> $basicTestObject | get-member

   TypeName: BasicTest

Name        MemberType Definition
----        ---------- ----------
Equals      Method     System.Boolean Equals(Object obj)
GetHashCode Method     System.Int32 GetHashCode()
GetType     Method     System.Type GetType()
Multiply    Method     System.Int32 Multiply(Int32 a, Int32 b)
ToString    Method     System.String ToString()

설명
-----------
이들 명령은 Get-Member cmdlet을 사용하여 이전 예에서 Add-Type 및 New-Object cmdlet이 만든 개체를 검사합니다.

첫 번째 명령은 Get-Member cmdlet을 사용하여 Add-Type이 세션에 추가한 BasicTest 클래스의 유형 및 멤버를 가져옵니다. Get-Member 명령은 해당 유형이 System.Object 클래스에서 파생된 System.RuntimeType 개체임을 보여 줍니다.

두 번째 명령은 Get-Member의 Static 매개 변수를 사용하여 BasicTest 클래스의 정적 속성 및 메서드를 가져옵니다. 출력에는 Add 메서드가 포함되어 있음이 표시됩니다.

세 번째 명령은 Get-Member를 사용하여 $BasicTestObject 변수에 저장된 개체의 멤버를 가져옵니다. 이 변수는 $BasicType 클래스로 New-Object cmdlet을 사용하여 만든 개체 인스턴스입니다. 

출력에서는 $basicTestObject 변수의 값이 BasicTest 클래스의 인스턴스이고 Multiply라는 멤버를 포함하고 있음을 보여 줍니다.





예 3

C:\PS>$accType = add-type -assemblyname accessib* -passthru

설명
-----------
이 명령은 Accessibility 어셈블리의 클래스를 현재 세션에 추가합니다. 이 명령은 AssemblyName 매개 변수를 사용하여 어셈블리의 이름을 지정합니다. 와일드카드 문자를 사용하면 이름이나 철자를 잘 모르는 경우에도 올바른 어셈블리를 가져올 수 있습니다.

이 명령은 PassThru 매개 변수를 사용하여 세션에 추가된 클래스를 나타내는 개체를 생성하고 이 개체를 $accType 변수에 저장합니다.





예 4

C:\PS>add-type -path c:\ps-test\Hello.vb

[VBFromFile]::SayHello(", World")

# From Hello.vb
Public Class VBFromFile

Public Shared Function SayHello(sourceName As String) As String
Dim myValue As String = "Hello"

return myValue + sourceName
End Function
End Class

C:\PS> [VBFromFile]::SayHello(", World")
Hello, World

설명
-----------
이 예에서는 Add-Type cmdlet을 사용하여 Hello.vb 파일에 정의된 VBFromFile 클래스를 현재 세션에 추가합니다. Hello.vb 파일의 텍스트가 명령 출력에 표시됩니다.

첫 번째 명령은 Add-Type cmdlet을 사용하여 Hello.vb 파일에 정의된 유형을 현재 세션에 추가합니다. 이 명령은 path 매개 변수를 사용하여 원본 파일을 지정합니다. 

두 번째 명령은 VBFromFile 클래스의 정적 메서드로 SayHello 함수를 호출합니다.





예 5

C:\PS>$signature = @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@

$showWindowAsync = Add-Type -memberDefinition $signature -name "Win32ShowWindowAsync" -namespace Win32Functions -passThru

# Minimize the Windows PowerShell console
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 2) 

# Restore it
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 4)

설명
-----------
이 예의 명령은 Windows PowerShell에서 기본 Windows API를 호출하는 방법을 보여 줍니다. Add-Type은 플랫폼 호출(P/Invoke) 메커니즘을 사용하여 Windows PowerShell에서 User32.dll의 함수를 호출합니다.

첫 번째 명령은 ShowWindowAsync 함수의 C# 시그니처를 $signature 변수에 저장합니다. 자세한 내용은 MSDN 라이브러리(https://go.microsoft.com/fwlink/?LinkId=143643)의 "ShowWindowAsync Function(ShowWindowAsync 함수)"을 참조하십시오. 결과 메서드를 Windows PowerShell 세션에서 볼 수 있도록 표준 시그니처에 "public" 키워드가 추가되었습니다.

두 번째 명령은 Add-Type cmdlet을 사용하여 Add-Type이 만드는 클래스의 정적 메서드로 ShowWindowAsync 함수를 Windows PowerShell 세션에 추가합니다. 이 명령은 MemberDefinition 매개 변수를 사용하여 $signature 변수에 저장된 메서드 정의를 지정합니다.
 
이 명령은 Name 및 Namespace 매개 변수를 사용하여 클래스의 이름 및 네임스페이스를 지정하고, PassThru 매개 변수를 사용하여 유형을 나타내는 개체를 생성한 다음 이 개체를 $showWindowAsync 변수에 저장합니다.

세 번째 및 네 번째 명령은 새 ShowWindowAsync 정적 메서드를 사용합니다. 이 메서드는 창 핸들과 창 표시 방법을 지정하는 정수를 매개 변수로 사용합니다.

세 번째 명령은 ShowWindowAsync를 호출합니다. 이 명령은 $pid 자동 변수와 함께 Get-Process cmdlet을 사용하여 현재 Windows PowerShell 세션을 호스팅하는 프로세스를 가져옵니다. 그런 다음 현재 프로세스의 MainWindowHandle 속성 및 SW_MINIMIZE 값을 나타내는 "2"를 사용합니다.

창을 복원하기 위해 네 번째 명령은 창 위치로 SW_RESTORE 값을 나타내는 "4"를 사용합니다. SW_MAXIMIZE는 3입니다.





예 6

C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScript

설명
-----------
이 명령은 Add-Type cmdlet을 사용하여 인라인 JScript 코드의 메서드를 Windows PowerShell 세션에 추가합니다. 이 명령은 MemberDefinition 매개 변수를 사용하여 $jsMethod 변수에 저장된 소스 코드를 전송하며, Name 변수를 사용하여 Add-Type이 메서드에 대해 만드는 클래스 이름을 지정하고 Language 매개 변수를 사용하여 JScript 언어를 지정합니다.





예 7

C:\PS>Add-Type -Path FSharp.Compiler.CodeDom.dll


C:\PS> Add-Type -Path FSharp.Compiler.CodeDom.dll
C:\PS> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider

C:\PS> $fSharpCode = @" 
let rec loop n = 
if n <= 0 then () else begin
print_endline (string_of_int n);
loop (n-1)
end
"@

C:\PS> $fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $provider -PassThru | where { $_.IsPublic }
C:\PS> $fsharpType::loop(4)
4
3
2
1

설명
-----------
이 예에서는 Add-Type cmdlet을 사용하여 FSharp 코드 컴파일러를 Windows PowerShell 세션에 추가하는 방법을 보여 줍니다. Windows PowerShell에서 이 예를 실행하려면 FSharp 언어와 함께 설치되는 FSharp.Compiler.CodeDom.dll이 있어야 합니다.

예의 첫 번째 명령은 Add-Type cmdlet을 Path 매개 변수와 함께 사용하여 어셈블리를 지정합니다. Add-Type은 어셈블리의 유형을 가져옵니다.

두 번째 명령은 New-Object cmdlet을 사용하여 FSharp 코드 공급자의 인스턴스를 만든 다음 그 결과를 $provider 변수에 저장합니다.

세 번째 명령은 Loop 메서드를 정의하는 FSharp 코드를 $FSharpCode 변수에 저장합니다.

네 번째 명령은 Add-Type cmdlet을 사용하여 $fSharpCode에 정의된 public 유형을 $fSharpType 변수에 저장합니다. TypeDefinition 매개 변수는 해당 유형을 정의하는 소스 코드를 지정합니다. CodeDomProvider 매개 변수는 소스 코드 컴파일러를 지정합니다. 

PassThru 매개 변수는 해당 유형을 나타내는 Runtime 개체를 반환하도록 Add-Type에 지시하고 파이프라인 연산자(|)는 해당 Runtime 개체를 public 유형만 반환하는 Where-Object cmdlet으로 보냅니다. Where-Object 필터는 FSharp 공급자가 결과로 생성되는 public 유형을 지원하기 위해 public이 아닌 유형을 생성하기 때문에 사용됩니다.

다섯 번째 명령은 $fSharpType 변수에 저장된 유형의 정적 메서드로 Loop 메서드를 호출합니다.





참고 항목

개념

Add-Member
New-Object