PowerShell
マネージコードの埋め込み(C#| VB)
サーチ…
前書き
このトピックでは、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();