PowerShell
Incrustar código gestionado (C # | VB)
Buscar..
Introducción
Este tema es para describir brevemente cómo el código administrado de C # o VB .NET puede ser ejecutado en un script de PowerShell. Este tema no está explorando todas las facetas del cmdlet Add-Type.
Para obtener más información sobre el cmdlet Add-Type, consulte la documentación de MSDN (para 5.1) aquí: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- tipo
Parámetros
Parámetro | Detalles |
---|---|
-TypeDefinition <String_> | Acepta el código como una cadena. |
-Lenguaje <String_> | Especifica el lenguaje de código administrado. Valores aceptados: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript |
Observaciones
Eliminar tipos agregados
En versiones posteriores de PowerShell, Remove-TypeData se agregó a las bibliotecas de cmdlet de PowerShell que pueden permitir la eliminación de un tipo dentro de una sesión. Para obtener más detalles sobre este cmdlet, vaya aquí: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata
Sintaxis CSharp y .NET
Para aquellas experiencias con .NET, no hace falta decir que las diferentes versiones de C # pueden ser radicalmente diferentes en su nivel de compatibilidad con cierta sintaxis.
Si utiliza Powershell 1.0 y / o -Language CSharp, el código administrado utilizará .NET 2.0, que carece de una serie de características que los desarrolladores de C # normalmente usan sin pensarlo dos veces, como Genéricos, Linq y Lambda. Además de esto, se encuentra el polimorfismo formal, que se maneja con parámetros predeterminados en versiones posteriores de C # / .NET.
Ejemplo de C #
Este ejemplo muestra cómo incrustar algunos C # básicos en un script de PowerShell, agregarlo al espacio de ejecución / sesión y utilizar el código dentro de la sintaxis de 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();
Ejemplo de VB.NET
Este ejemplo muestra cómo incrustar algunos C # básicos en un script de PowerShell, agregarlo al espacio de ejecución / sesión y utilizar el código dentro de la sintaxis de 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();