PowerShell
Вложение управляемого кода (C # | VB)
Поиск…
Вступление
В этом разделе кратко описывается, как 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();