サーチ…


前書き

このトピックでは、PowerShellスクリプト内でC#またはVB .NET Managedコードをスクリプト化して利用する方法について簡単に説明します。このトピックでは、Add-Typeコマンドレットのすべての側面について検討していません。

Add-Typeコマンドレットの詳細については、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コマンドレットライブラリに追加されました。このライブラリは、セッション内の型の削除を可能にします。このコマンドレットの詳細については、こちらを参照してください。https : //msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata

CSharpと.NETの構文

.NETでの経験のために、C#の異なるバージョンは特定の構文に対するサポートのレベルがかなり根本的に異なることは言うまでもない。

Powershell 1.0および/または-Language CSharpを使用する場合、マネージドコードは、Generics、Linq、Lambdaなど、C#開発者が最近一般的に考えていない多くの機能に欠けている.NET 2.0を利用します。これに加えて、正式な多型があります。これは、C#/ .NETのそれ以降のバージョンでデフォルトパラメータで処理されます。

C#の例

この例では、基本的なC#をPowerShellスクリプトに埋め込み、それをrunspace / sessionに追加し、コードを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の例

この例では、基本的なC#をPowerShellスクリプトに埋め込み、それをrunspace / sessionに追加し、コードを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();


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow