Zoeken…


Invoering

In dit onderwerp wordt kort beschreven hoe C # of VB .NET Managed-code in een PowerShell-script kan worden gescript en gebruikt. In dit onderwerp worden niet alle facetten van de cmdlet Add-Type onderzocht.

Raadpleeg de MSDN-documentatie (voor 5.1) hier voor meer informatie over de Add-Type-cmdlet: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- type

parameters

Parameter Details
-TypeDefinition <String_> Accepteert de code als een tekenreeks
-Taal <String_> Geeft de taal van de beheerde code aan. Toegelaten waarden: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript

Opmerkingen

Toegevoegde typen verwijderen

In latere versies van PowerShell is Remove-TypeData toegevoegd aan de PowerShell-cmdlet-bibliotheken waarmee een type binnen een sessie kan worden verwijderd. Ga hier voor meer informatie over deze cmdlet: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata

CSharp en .NET syntaxis

Voor die ervaring met .NET is het vanzelfsprekend dat de verschillende versies van C # behoorlijk radicaal kunnen verschillen in hun ondersteuningsniveau voor bepaalde syntaxis.

Als u Powershell 1.0 en / of -Taal CSharp gebruikt, gebruikt de beheerde code .NET 2.0 die ontbreekt in een aantal functies die C # -ontwikkelaars tegenwoordig doorgaans zonder na te denken gebruiken, zoals Generics, Linq en Lambda. Bovendien is er formeel polymorfisme, dat wordt afgehandeld met standaardparameters in latere versies van C # / .NET.

C # Voorbeeld

Dit voorbeeld laat zien hoe u een standaard C # kunt insluiten in een PowerShell-script, dit kunt toevoegen aan de runspace / sessie en de code kunt gebruiken binnen de PowerShell-syntaxis.

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

Dit voorbeeld laat zien hoe u een standaard C # kunt insluiten in een PowerShell-script, dit kunt toevoegen aan de runspace / sessie en de code kunt gebruiken binnen de PowerShell-syntaxis.

$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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow