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();


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow