PowerShell
Osadzanie kodu zarządzanego (C # | VB)
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();