今回は、PowerShellから.NET Frameworkのオブジェクトを参照する方法についてまとめます。
主に参考にしているのはこちらの本です。
一応日本語版もあるのですが、2008年に出版されたもので、最新版は翻訳されていないため、英語で読むのがいいと思います。
もくじ
PowerShellと.NET Framework
PowerShellは、OSSで開発が進んでおり、Windows、Linux、MacOSで動作するパワフルなシェルであり、オブジェクト指向言語として設計されたスクリプト言語です。
PowerShellは.NET Frameworkを基盤としています。
Bashなどでいうところのコマンドに相当する命令は、コマンドレットと呼ばれていますが、その実態は.NET Frameworkオブジェクトです。
Linuxなどで使用されるシェルと同様に、パイプを用いた処理結果の受け渡しが可能ですが、渡される情報は、テキストではなく.NET Frameworkのオブジェクトです。
そのため、柔軟でパワフルな処理を実現できるというわけです。
次の項では、実際にPowerShellから.NET Frameworkのオブジェクトを読み込んでいきます。
System.Net.WebClientを参照する
例えば、PowerShellで以下のスクリプトを実行するだけで、$contentという変数には、指定したURLのHTTPレスポンスが格納されるというわけです。
Add-Type -AssemblyName System.Net.Http $webClient = New-Object System.Net.Http.HttpClient $content = $webClient.GetAsync("https://yukituna.com")
具体的には、まず.NET Frameworkクラスを定義することができるAdd-Typeコマンドレットを用いて、System.Net.Httpクラスを参照します。
次に、$webClientにSystem.Net.Httpクラスのインスタンスを格納し、GetAsyncメソッドを用いて、指定したURLのHTTPレスポンスを取得しています。
この$contentを実際に出力してみると、以下のような結果が確認できました。
PS > $content Result : StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Transfer-Encoding: chunked Connection: keep-alive Link: https://yukituna.com/wp-json/; rel="https://api.w.org/" Vary: Range Vary: Accept-Encoding X-Cache: MISS Date: Wed, 01 Jul 2020 07:38:37 GMT Server: Apache X-Powered-By: PHP/7.4.4 Content-Type: text/html; charset=UTF-8 } Id : 365 Exception : Status : RanToCompletion IsCanceled : False IsCompleted : True CreationOptions : None AsyncState : IsFaulted : False AsyncWaitHandle : System.Threading.ManualResetEvent CompletedSynchronously : False
まとめ
というわけで、PowerShellでNET Frameworkのオブジェクトを参照できることについてまとめました。
.NET Frameworkのオブジェクトを参照できるということは、極端な話C#でできることってPowerShellでも実装できちゃう、って話ですね。
PowerShellからC#プログラムを呼び出せるみたいなので、全部をPowerShellで書く必要はないかもしれませんが…。
参考
WebClient クラス (System.Net) | Microsoft Docs