在 PowerShell 呼叫 .NET 6 的 dll
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);
參考資料