PowerShell
Incorporare codice gestito (C # | VB)
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();