PowerShell
임베디드 관리 코드 (C # | VB)
수색…
소개
이 항목에서는 PowerShell 스크립트 내에서 C # 또는 VB .NET Managed 코드를 스크립팅하고 활용하는 방법을 간략하게 설명합니다. 이 항목에서는 Add-Type cmdlet의 모든 측면을 살펴 보지는 않습니다.
Add-Type cmdlet에 대한 자세한 내용은 MSDN 설명서 (5.1 용)를 참조 하십시오. https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- 유형
매개 변수
매개 변수 | 세부 |
---|---|
-TypeDefinition <String_> | 코드를 문자열로 받아들입니다. |
- 언어 <String_> | 관리 코드 language.Accepted 값을 지정합니다 : CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript |
비고
추가 된 유형 제거 중
이후 버전의 PowerShell에서는 Remove-TypeData가 PowerShell cmdlet 라이브러리에 추가되어 세션 내에서 형식을 제거 할 수있게되었습니다. 이 cmdlet에 대한 자세한 내용은 다음을 참조 하십시오. https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata
CSharp 및 .NET 구문
.NET을 사용하는 사람들은 C #의 여러 버전이 특정 구문에 대한 지원 수준이 크게 다를 수 있다는 것을 알 수 있습니다.
Powershell 1.0 및 / 또는 -Language CSharp를 사용하는 경우 관리되는 코드는 C # 개발자가 Generics, Linq 및 Lambda와 같은 요즘 생각하지 않고 일반적으로 사용하는 많은 기능이 부족한 .NET 2.0을 활용하게됩니다. 그 외에 공식적인 다형성이 있습니다.이 다형성은 이후 버전의 C # / .NET에서 기본 매개 변수로 처리됩니다.
C # 예제
이 예제는 PowerShell 스크립트에 기본 C #을 포함시키고이를 runspace / 세션에 추가하고 PowerShell 구문 내에서 코드를 활용하는 방법을 보여줍니다.
$code = "
using System;
namespace MyNameSpace
{
public class Responder
{
public static void StaticRespond()
{
Console.WriteLine("Static Response");
}
public void Respond()
{
Console.WriteLine("Instance Respond");
}
}
}
"@
# Check the type has not been previously added within the session, otherwise an exception is raised
if (-not ([System.Management.Automation.PSTypeName]'MyNameSpace.Responder').Type)
{
Add-Type -TypeDefinition $code -Language CSharp;
}
[MyNameSpace.Responder]::StaticRespond();
$instance = New-Object MyNameSpace.Responder;
$instance.Respond();
VB.NET 예제
이 예제는 PowerShell 스크립트에 기본 C #을 포함시키고이를 runspace / 세션에 추가하고 PowerShell 구문 내에서 코드를 활용하는 방법을 보여줍니다.
$code = @"
Imports System
Namespace MyNameSpace
Public Class Responder
Public Shared Sub StaticRespond()
Console.WriteLine("Static Response")
End Sub
Public Sub Respond()
Console.WriteLine("Instance Respond")
End Sub
End Class
End Namespace
"@
# Check the type has not been previously added within the session, otherwise an exception is raised
if (-not ([System.Management.Automation.PSTypeName]'MyNameSpace.Responder').Type)
{
Add-Type -TypeDefinition $code -Language VisualBasic;
}
[MyNameSpace.Responder]::StaticRespond();
$instance = New-Object MyNameSpace.Responder;
$instance.Respond();