PowerShellに触れてみる

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

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

1
2
3
4
5
6
7
8
**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を使用。PowerShell3.0から使えるとのこと。
#invoke-webrequest以外にもHttpWebRequestやWebClientを使う方法があるみたいだけれど省略。

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

1
2
3
4
5
6
7
$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

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

1
2
3
4
5
6
7
$response = Invoke-WebRequest -URI $uri -Method $method -Headers $header -ContentType $contentType -Body $body

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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#に触れるきっかけにツールを作ろうと思っていたけど、当座はこれで十分。
余裕が出来たらツールに挑戦しよう。

Share