タグ別アーカイブ: PowerShell

PowerShellでRedmine REST APIにJSON形式でPOSTしてプロジェクトを新規作成する

PowerShellでRedmine REST APIにJSON形式でデータをPOSTしてプロジェクトを新規作成するとき、注意すべき事項は以下の2点。

・連想配列(ハッシュ)でPOSTするデータを用意するとき、プロジェクトの属性データ全体を”project”キーの値とした連想配列にする必要がある。
・連想配列(ハッシュ)をUTF8でエンコードする必要がある。
・APIアクセスキーを access_key をキーとしてデータに含める必要がある。

たとえば、作成したいプロジェクトの属性データは下記とします。


$data = @{
"name" = "テストのプロジェクト";
"identifier" = "testproject";
"description" = "";
"status" = 1;
"is_public" = "true";
"enabled_module_names" = @("issue_tracking", "time_tracking");
};

このデータを http://(ホスト名)/projects.json にPOSTしても422 Errorになります。

まずaccess_keyを追加する必要があります。


$data["access_key"] = "(APIアクセスキーの文字列)"

次に属性データ全体を project というキーの値にしてからPOSTする必要があります。


$postdata = @{"project" = $data}

さらにUTF8にエンコードする必要があるので。


$jsondata = ConvertTo-Json -InputObject $postdata
$jsonUTF8data = [System.Text.Encoding]::UTF8.GetBytes($jsondata)

この $jsonUTF8data をInvoke-RestMethodの-Bodyパラメータに設定します。


Invoke-RestMethod -Uri $postURI -Method POST -ContentType "application/json" -Body $jsonUTF8data -Credential $cred

これでようやく422 Errorが解消します。

PowerShellでフォーム認証Webアプリのログイン後セッションを使いまわす

PowerShellでフォーム認証のWebアプリケーションにログインし、そのセッションを利用していろいろな操作をする方法。

詳細者こちらのMicrosoftのページ

$loginURLにはログインフォームのあるページのURLを代入しておく。

フォームのあるページのソースコードを表示して、ユーザ名、パスワードそれぞれの入力欄のnameプロパティを調べておく。
ここではそれぞれ「username」「password」だと仮定する。

-SessionVariableで「ss」と指定しているので、セッションは$ssという変数に格納される。


$ret = Invoke-WebRequest $loginURL -SessionVariable ss
$form = $ret.Forms[0]
$form.Fields["username"] = "yamada"
$form.Fields["password"] = "hogehoge"
$ret = Invoke-WebRequest $loginURL -WebSession $ss -Method Post -Body $form.Fields