PowerShell 2.0 で WebRequest を呼び出す
PowerShell バージョン 3.0 から、Invoke-WebRequest
コマンドレットが導入され、HTTP または HTTPS Web 要求を送信して応答を取得できるようになりました。
それ以前の PowerShell バージョン 2.0 では、.Net
基本クラス ライブラリを使用して Web 要求を送信していました。 WebRequest
クラスと HttpWebRequest
クラスの両方をこの目的に使用できます。
PowerShell の強みは、組み込みの .Net
クラスとメソッドに簡単にアクセスできることです。
PowerShell 静的メンバー演算子 ::
PowerShell の最も重要な利点は、PowerShell スクリプト内で .Net
クラスにアクセスできることです。 静的メンバー演算子は、.Net
ライブラリ クラス内の静的メソッドとプロパティを呼び出します。
DateTime
クラスの Now
プロパティにアクセスしたいとしましょう。 理想的には、現在のシステムの日付と時刻を返します。
次のように、PowerShell を使用してこのプロパティを呼び出すことができます。
[datetime]::Now
出力:
予想どおり、現在の日付と時刻が出力されました。
WebRequest
クラスを使用して Web リクエストを作成し、PowerShell 2.0 で WebRequest を呼び出す
WebRequest
クラスは、指定された URI (Uniform Resource Identifier) に対して要求を呼び出すために実装された .NET
ベースの抽象です。 .NET
フレームワークの System.Net
パッケージにあります。
以下は、PowerShell から Web リクエストを呼び出す構文です。
[System.Net.WebRequest]::Create(uri)
ここで、uri
は Web サイトの URI です。
https://google.com
への簡単な GET
リクエストを作成してみましょう。
$req = [System.Net.WebRequest]::Create('https://google.com')
これにより、さらに操作できる PowerShell $req
オブジェクトが作成されます。 $req
オブジェクトで利用可能なプロパティとメソッドを一覧表示できます。
$req | Get-Member
出力:
GetResponse()
メソッドを使用して、このリクエストからレスポンス オブジェクトにアクセスできます。
$resp = $req.GetResponse()
$resp
オブジェクトを PowerShell コンソール ウィンドウに書き込みます。
POST
リクエストを処理する必要がある場合は、追加情報を使用して同じ手順に従うことができます。 その場合、request
メソッドを POST
として使用する必要があります。
さらに、リクエストのコンテンツ タイプとボディは、次のように作成して渡す必要があります。
$request = [System.Net.WebRequest]::Create('https://abc.com');
$request.Method = "POST";
$request.ContentType = "application/x-www-form-urlencoded";
$bytes = [System.Text.Encoding]::ASCII.GetBytes("name=tony&age=55");
$request.ContentLength = $bytes.Length;
$requestStream = $request.GetRequestStream();
$requestStream.Write( $bytes, 0, $bytes.Length );
$requestStream.Close();
$request.GetResponse();
上記の実装を使用して、WebRequest
クラスを使用して POST
リクエストを続行できます。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.