PowerShell 2.0 で WebRequest を呼び出す

Migel Hewage Nimesha 2024年2月15日
  1. PowerShell 静的メンバー演算子 ::
  2. WebRequest クラスを使用して Web リクエストを作成し、PowerShell 2.0 で WebRequest を呼び出す
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

出力:

PowerShell 静的メンバー オペレーター - 出力

予想どおり、現在の日付と時刻が出力されました。

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

出力:

PowerShell 2.0 で WebRequest を呼び出す - 出力 1

GetResponse() メソッドを使用して、このリクエストからレスポンス オブジェクトにアクセスできます。

 $resp = $req.GetResponse()

$resp オブジェクトを PowerShell コンソール ウィンドウに書き込みます。

PowerShell 2.0 で WebRequest を呼び出す - 出力 2

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 リクエストを続行できます。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.