Ricerca…


introduzione

Questo argomento descrive brevemente come il codice gestito C # o VB .NET può essere copiato e utilizzato all'interno di uno script PowerShell. Questo argomento non sta esplorando tutti gli aspetti del cmdlet Add-Type.

Per ulteriori informazioni sul cmdlet Add-Type, consultare la documentazione MSDN (per 5.1) qui: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- genere

Parametri

Parametro Dettagli
-TypeDefinition <String_> Accetta il codice come una stringa
-Language <String_> Specifica il linguaggio del codice gestito. Valori accettati: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript

Osservazioni

Rimozione dei tipi aggiunti

Nelle versioni successive di PowerShell, Remove-TypeData è stato aggiunto alle librerie dei cmdlet di PowerShell che possono consentire la rimozione di un tipo all'interno di una sessione. Per maggiori dettagli su questo cmdlet, vai qui: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata

Sintassi CSharp e .NET

Per quelle esperienze con .NET è ovvio che le diverse versioni di C # possono essere abbastanza radicalmente differenti nel loro livello di supporto per certe sintassi.

Se si utilizza Powershell 1.0 e / o -Language CSharp, il codice gestito utilizzerà .NET 2.0, che è carente in un certo numero di funzionalità che gli sviluppatori C # utilizzano normalmente senza pensarci in questi giorni, come Generics, Linq e Lambda. A ciò si aggiunge il polimorfismo formale, che viene gestito con i parametri predefiniti nelle versioni successive di C # /. NET.

C # Esempio

Questo esempio mostra come incorporare un C # di base in uno script PowerShell, aggiungerlo allo spazio di esecuzione / sessione e utilizzare il codice all'interno della sintassi di 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();

Esempio VB.NET

Questo esempio mostra come incorporare un C # di base in uno script PowerShell, aggiungerlo allo spazio di esecuzione / sessione e utilizzare il codice all'interno della sintassi di 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow