脚本编程:Powershell:Powershell Function高阶使用:动态使用.Net Framwork类库(1)

tlin82大约 3 分钟Scripting Language脚本编程PowershellPowershell

前言

我们知道Powershell可以调用.Netopen in new window Framework的静态类,也就可以大大提高了脚本功能。熟悉C#的同学

可以在Powershell里面直接编写C#代码,然后在代码里面直接使用。

正文

来自阿里千问

直接定义

Add-Type是PowerShell的一个命令,用于在PowerShell会话中动态地添加.NETopen in new window Framework类。它可以用来引入自定义的.NET类型或者加载未在当前环境中注册的.NETopen in new window DLL。Add-Type可以让你在PowerShell中使用C#、VB.NET或其他.NET语言编写的类和方法,从而扩展PowerShell的功能。

  • 定义了一个简单的C#类并在PowerShell中使用:
Add-Type -TypeDefinition @"
    using System;
    public class HelloWorld {
        public static string SayHello() {
            return "Hello, World!";
        }
    }
"@

[HelloWorld]::SayHello()

在这个例子中,Add-Type命令定义了一个名为HelloWorld的C#类,该类包含一个静态方法SayHello。然后,我们通过[HelloWorld]::SayHello()调用了这个方法,输出"Hello, World!"。

Add-Type的一些常用参数包括:

  • -TypeDefinition: 用于提供类的C#或VB.NET代码。
  • -Language: 指定代码的语言,如CSharp、VisualBasic等。
  • -OutputType: 指定输出类型,如Class、Struct等。
  • -OutputAssembly: 指定输出的DLL文件名,用于保存定义的类型。
  • -ReferencedAssemblies: 引用的.NET框架的其他dll文件。

请注意,使用Add-Type创建的类型只存在于当前PowerShell会话中。当你关闭会话后,这些类型将消失。如果你想持久化这些类型,你需要将它们保存到一个DLL文件中,然后在后续的会话中通过-Path参数加载这个DLL。

编译封装

要将使用Add-Type创建的类型保存到一个DLL文件中,你可以使用-OutputAssembly参数指定输出的DLL文件名。以下是一个示例,它创建一个类并将其保存到DLL文件:

Add-Type -TypeDefinition @"
    using System;
    public class MyClass {
        public string MyMethod() {
            return "Hello, Persistent Type!";
        }
    }
"@ -OutputAssembly "MyCustomTypes.dll" -OutputType ConsoleApplication

在这个例子中,MyCustomTypes.dll是输出的DLL文件名,ConsoleApplication表示输出类型为控制台应用程序。这样,MyClass就会被编译并保存到这个DLL文件中。

要加载这个DLL文件并在以后的PowerShell会话中使用,你可以使用Add-Type-Path参数:

Add-Type -Path "MyCustomTypes.dll"
[MyClass]::new().MyMethod()

这将加载DLL文件,并允许你像之前一样使用MyClass。请注意,加载的DLL文件必须与PowerShell会话的.NETopen in new window Framework版本兼容。如果你的PowerShell运行在.NETopen in new window Core上,那么你需要确保DLL是针对.NETopen in new window Core编译的。