Sök…


Introduktion

Detta ämne är att kort beskriva hur C # eller VB. NET-hanterad kod kan skriptas och användas i ett PowerShell-skript. Det här ämnet utforskar inte alla aspekter på cmdleten Add-Type.

För mer information om Add-Type cmdlet, se MSDN-dokumentationen (för 5.1) här: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- typ

parametrar

Parameter detaljer
-TypeDefinition <String_> Accepterar koden som en sträng
-Språkvård <String_> Anger språk för hanterad kod.Accepterade värden: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript

Anmärkningar

Ta bort tillagda typer

I senare versioner av PowerShell har Remove-TypeData lagts till i PowerShell-cmdletbibliotek som kan möjliggöra borttagning av en typ inom en session. För mer information om denna cmdlet, gå hit: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata

CSharp och .NET syntax

För dem som har erfarenhet av .NET säger det sig självt att de olika versionerna av C # kan vara ganska radikalt olika i deras stödnivå för viss syntax.

Om du använder Powershell 1.0 och / eller -Language CSharp, kommer den hanterade koden att använda .NET 2.0 som saknas i ett antal funktioner som C # -utvecklare vanligtvis använder utan andra tanke i dag, till exempel Generics, Linq och Lambda. Ovanpå detta är formell polymorfism, som hanteras med standardparametrar i senare versioner av C # /. NET.

C # Exempel

Detta exempel visar hur man bäddar in några grundläggande C # i ett PowerShell-skript, lägger till det i runspace / session och använder koden i PowerShell-syntax.

$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 Exempel

Detta exempel visar hur man bäddar in några grundläggande C # i ett PowerShell-skript, lägger till det i runspace / session och använder koden i PowerShell-syntax.

$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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow