Szukaj…


Wprowadzenie

W tym temacie krótko opisano, w jaki sposób można zarządzać kodem C # lub VB .NET Managed w skrypcie PowerShell. W tym temacie nie opisano wszystkich aspektów cmdletu Add-Type.

Aby uzyskać więcej informacji na temat polecenia cmdlet Add-Type, zapoznaj się z dokumentacją MSDN (dla 5.1) tutaj: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- rodzaj

Parametry

Parametr Detale
-TypeDefinition <String_> Akceptuje kod jako ciąg
-Język <String_> Określa język kodu zarządzanego. Akceptowane wartości: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript

Uwagi

Usuwanie dodanych typów

W późniejszych wersjach programu PowerShell do bibliotek poleceń cmdlet programu PowerShell została dodana funkcja Remove-TypeData, która umożliwia usunięcie typu w ramach sesji. Aby uzyskać więcej informacji na temat tego polecenia cmdlet, przejdź tutaj: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata

Składnia CSharp i .NET

Dla tych, którzy mają doświadczenie z .NET, oczywiste jest, że różne wersje C # mogą być dość radykalnie różne pod względem poziomu obsługi niektórych składni.

Jeśli używasz Powershell 1.0 i / lub -Language CSharp, kod zarządzany będzie wykorzystywał .NET 2.0, którego brakuje w wielu funkcjach, które programiści C # zwykle używają w tej chwili bez zastanowienia, takich jak Generics, Linq i Lambda. Do tego dochodzi formalny polimorfizm, który jest obsługiwany przy użyciu domyślnych parametrów w późniejszych wersjach C # / .NET.

Przykład C #

Ten przykład pokazuje, jak osadzić podstawowe C # w skrypcie PowerShell, dodać go do obszaru roboczego / sesji i wykorzystać kod w składni 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();

Przykład VB.NET

Ten przykład pokazuje, jak osadzić podstawowe C # w skrypcie PowerShell, dodać go do obszaru roboczego / sesji i wykorzystać kod w składni 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow