Поиск…


Вступление

В этом разделе кратко описывается, как C # или VB .NET Managed code может быть сценарием и использоваться в сценарии PowerShell. В этом разделе не рассматриваются все грани командлета Add-Type.

Дополнительные сведения о командлете Add-Type см. В документации MSDN (для версии 5.1): https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add- тип

параметры

параметр подробности
-TypeDefinition <String_> Принимает код как строку
-Language <String_> Указывает язык управляемого кода. Принятые значения: CSharp, CSharpVersion3, CSharpVersion2, VisualBasic, JScript

замечания

Удаление добавленных типов

В более поздних версиях PowerShell Remove-TypeData была добавлена ​​в библиотеки командлетов PowerShell, которые могут позволить удалить тип в сеансе. Дополнительные сведения об этом командлете см. Здесь: https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.utility/remove-typedata.

Синтаксис CSharp и .NET

Для тех, кто имеет опыт работы с .NET, само собой разумеется, что разные версии C # могут быть совершенно радикальными в своем уровне поддержки определенного синтаксиса.

Если использовать Powershell 1.0 и / или -Language CSharp, управляемый код будет использовать .NET 2.0, который не обладает рядом функций, которые разработчики C # обычно используют без второй мысли в наши дни, такие как Generics, Linq и Lambda. Кроме того, это формальный полиморфизм, который обрабатывается с дефолтными параметрами в более поздних версиях C # /. NET.

Пример C #

В этом примере показано, как встроить базовый C # в сценарий PowerShell, добавить его в рабочую область / сеанс и использовать код в синтаксисе 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();

Пример VB.NET

В этом примере показано, как встроить базовый C # в сценарий PowerShell, добавить его в рабочую область / сеанс и использовать код в синтаксисе 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow