PowerShell 具有強大的功能,有時一些小雜事用 C# 處理會有一種殺雞用牛刀的感覺,這時 PowerShell 就是個簡單快速的選擇。然而有時還是會遇到用單純的 script 來寫過於複雜的情況,如果用 PowerShell 呼叫 .NET dll 來處理特定問題,絕對是個令人神清氣爽的解決方安。

由於現在的 .NET 6 跟過往的 .NET Framework 已經完全不同,所以新版的 PowerShell 底層也由新的 .NET 翻新,呼叫上也改為 pwsh,需注意的是如果是用powershell 來呼叫,就會用到舊版的。接下來示範如何從 PowerShell 呼叫 .NET 的 dll,首先用 C# 寫個簡單的類別:

namespace ClassLibraryForPowershell
{
    public class TestClass
    {
        public void WriteMessage(string message)
        {
            Console.WriteLine(message);
        }

        public int GetResult(int x,int y)
        {
            return x + y;
        }

        public static string GetString()
        {
            return "Hello World!!!!";
        }
    }
}

之後把編譯好的 dll 跟 script 檔放在同一個目錄下,特別注意的是,以往要呼叫 dll 時,也需同時指定有使用到的 .NET 內建的函式庫,但在 .NET 6 中有支援所謂的 隱含全域 Using,也就是不用再特別去指定了,簡化了寫法,底下示範了如何呼叫 static method 以及如何建立物件並呼叫其 method:

$CurrentLocation = Get-Location;
$PSLib = "$CurrentLocation\ClassLibraryForPowershell.dll";
$PSLib;
$Dlls = (
    $PSLib
);
Add-Type -LiteralPath $Dlls;

[ClassLibraryForPowershell.TestClass]::GetString();

$instance = New-Object ClassLibraryForPowershell.TestClass;
$instance.GetResult(1, 7);

參考資料