PowerShell

PowerShellで.NET Frameworkオブジェクトを参照してHTTPレスポンスを取得

今回は、PowerShellから.NET Frameworkのオブジェクトを参照する方法についてまとめます。

主に参考にしているのはこちらの本です。

一応日本語版もあるのですが、2008年に出版されたもので、最新版は翻訳されていないため、英語で読むのがいいと思います。

もくじ

  1. PowerShellと.NET Framework
  2. System.Net.WebClientを参照する
  3. まとめ
  4. 参考

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

Add-Type

COMMENT

メールアドレスが公開されることはありません。