PowerShell
Einbetten von verwaltetem Code (C # | VB)
Suche…
Einführung
In diesem Thema wird kurz beschrieben, wie C # - oder VB .NET-verwalteter Code in einem PowerShell-Skript skriptiert und verwendet werden kann. In diesem Thema werden nicht alle Facetten des Cmdlets Add-Type untersucht.
Weitere Informationen zum Cmdlet Add-Type finden Sie in der MSDN-Dokumentation (für 5.1) hier: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- Art
Parameter
Parameter | Einzelheiten |
---|---|
-TypeDefinition <String_> | Akzeptiert den Code als Zeichenfolge |
-Sprache <String_> | Gibt die Sprache des verwalteten Codes an. Akzeptierte Werte: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript |
Bemerkungen
Hinzugefügte Typen werden entfernt
In späteren Versionen von PowerShell wurde Remove-TypeData zu den PowerShell-Cmdlet-Bibliotheken hinzugefügt, die das Entfernen eines Typs innerhalb einer Sitzung ermöglichen. Weitere Informationen zu diesem Cmdlet finden Sie hier: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata
CSharp- und .NET-Syntax
Für die Erfahrung mit .NET ist es selbstverständlich, dass die unterschiedlichen Versionen von C # sich in ihrer Unterstützung für bestimmte Syntax stark unterscheiden können.
Wenn Powershell 1.0 und / oder -Language CSharp verwendet wird, wird für den verwalteten Code .NET 2.0 verwendet, dem eine Reihe von Features fehlen, die C # -Entwickler heutzutage normalerweise ohne weiteres verwenden, wie Generics, Linq und Lambda. Hinzu kommt der formale Polymorphismus, der in späteren Versionen von C # /. NET mit Standardparametern behandelt wird.
C # Beispiel
In diesem Beispiel wird gezeigt, wie einige grundlegende C # -Dateien in ein PowerShell-Skript eingebettet werden, dem Runspace / der Sitzung hinzugefügt und der Code innerhalb der PowerShell-Syntax verwendet wird.
$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-Beispiel
In diesem Beispiel wird gezeigt, wie einige grundlegende C # -Dateien in ein PowerShell-Skript eingebettet werden, dem Runspace / der Sitzung hinzugefügt und der Code innerhalb der PowerShell-Syntax verwendet wird.
$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();