GAMMD

覚書や日々のこと。不足している知識や非効率な部分を新しい知識で補完/改善していきたい。

PowerShellに触れてみる

APIを検証する際、curlをバッチファイルに書いて半自動/半手動で行っている。
これをスマートに行えるようにPowerShellを使う。

使用しているpowershellのバージョンは以下の通り。

Name                           Value
PSVersion                      5.0.10586.117
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.117
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Invoke-WebRequestを使用。PowerShell 3.0から使えるとのこと。
invoke-webrequest以外にもHttpWebRequestやWebClientを使う方法があるみたいだけれど省略。

基本的な書き方はこんな感じ。

$uri = "http://example.com"
$method = "POST"
$header = @{"hoge" = "fuga"}
$contentType = "application/json"
$body =  "test"

Invoke-WebRequest -URI $uri -Method $method -Headers $header -ContentType $contentType -Body $body

結果を扱いたい場合はリクエストを変数にとって扱える。便利!

$response = Invoke-WebRequest -URI $uri -Method $method -Headers $header -ContentType $contentType -Body $body

//レスポンスヘッダー取得
$header = $response.Headers

//レスポンスボディー取得
$body = $response.Content

400以上のエラーが出た場合は[System.Net.WebException]が飛んでくるのでcatchしてあげる。
ヘッダやボディー情報をとることも、もちろん出来る。

try {
   $response = Invoke-WebRequest -URI $uri -Method $method -Headers $header -ContentType $contentType -Body $body
      :
    }
}
catch [System.Net.WebException] {
    #write some code
}
catch {
    #write some code
}
finally {
    #write some code
}

本当に便利・・・。
今まで何て非効率なことをやっていたんだろう。

C#に触れるきっかけにツールを作ろうと思っていたけど、当座はこれで十分。
余裕が出来たらツールに挑戦しよう。