PowerShellからBizRobo!のシナリオをREST API経由で起動させる。

#この記事について

当記事はPowerShellよりBizRobo!マネージメントコンソールにあるシナリオをREST API経由で起動させる方法を解説しています。

#検証に使ったバージョン

 * PowerShell：5.1.18362.628
 * BizRobo!：10.3.0.4 260

#動かすシナリオ

実行時パラメータがなく、値を返すだけのシンプルなシナリオです。値はタイプで宣言した変数を二度返却しています。

![シナリオ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168941/5e4fcda2-b40a-b658-d445-51718290dec8.png)

DesginStudio上でのデバッグの実行結果は以下の通りです。
![デバッグ結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168941/d652d71c-1f4a-cf78-9c66-c2c478d63094.png)


#REST APIの呼び出し


## 呼び出しURLの取得
シナリオをマネージメントコンソールにアップロードし、呼び出し用のURLを取得します。手順は以下の通りです。

 1. マネージメントコンソールにログインをする
 2. 「Repository」タグにアクセスする
 3. 「Robots」タブにアクセスする
 4. シナリオ一覧が出力されるので対象ロボットの「REST」列にある鎖をクリックする
 5. ウインドウが開くので、URL（赤い下線）をコピーする
 
![鎖のアイコン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168941/f5a49411-1f50-7ce9-f90d-493f87e76c5f.png)

 
![URLウインドウ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168941/32ceae27-db7d-7ae3-fa51-83642c934653.png)


##ユーザ認証

最初にマネージメントコンソールにログインするためのユーザとパスワードを変数に保存します。
PowerShellを起動して、以下のコマンドを実行してください。

```PowerShell
$User = "USER_ID"
$Pass = "PASSWORD"
$Secpswd = ConvertTo-SecureString $Pass -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential($User, $Secpswd)
```

「USER_ID」と「PASSWORD」はお使いの環境に合わせて変更してください。

これで"Cred"という変数に認証情報が保存されました。

##呼び出し

次にPowerShellからREST APIを叩き、シナリオを起動します。PowerShellで以下のコマンドを実行してREST APIを叩きます。

```PowerShell
$Response = Invoke-WebRequest http://YOUR_URL -Credential $Cred
```

「YOUR_URL」の部分は上記でコピーしたURLをお使いください。

シナリオが実行されたので、REST APIから渡された結果を確認します。

```PowerShell
$Response.Content
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rest-result executionTime="1084">
    <values>
        <value typeName="Test_return_value">
            <attribute type="text" name="Value2_String">aaaa</attribute>
            <attribute type="integer" name="Value1_Int">33</attribute>
        </value>
        <value typeName="Test_return_value">
            <attribute type="text" name="Value2_String">bbbb</attribute>
            <attribute type="integer" name="Value1_Int">22</attribute>
        </value>
    </values>
</rest-result>
```

シナリオで返却した二つの値がXML形式で渡されているのが確認できます。

##各メソッド

先ほどの方法だとGETメソッドでの呼び出しになるので、その他のメソッド試してみます。

###POST

POSTメソッドで呼び出すために、PowerShellで以下のコマンドを実行します。「YOUR_URL」の部分は上記でコピーしたURLをお使いください。

```PowerShell
$Body = "{`"parameters`":[]}"
$Response = Invoke-WebRequest http://YOUR_URL  -Credential $Cred -Method 'POST'  -ContentType "application/json" -Body $Body
$Response.Content
<rest-result executionTime="1040">
    <values>
        <value typeName="Test_return_value">
            <attribute type="text" name="Value2_String">aaaa</attribute>
            <attribute type="integer" name="Value1_Int">33</attribute>
        </value>
        <value typeName="Test_return_value">
            <attribute type="text" name="Value2_String">bbbb</attribute>
            <attribute type="integer" name="Value1_Int">22</attribute>
        </value>
    </values>
</rest-result>
```

GETと同様にXMLで値が渡されているのが確認できます。


###PUT

PUTメソッドも試してみます。

```PowerShell
$Response = Invoke-WebRequest http://YOUR_URL  -Credential $Cred -Method 'PUT'  -ContentType "application/json" -Body $Body
Invoke-WebRequest : Kapow
Version 10.3.0.4
An unexpected error occurred
The request could not be processed
Contact your administrator for further information.
発生場所 行:1 文字:13
+ $Response = Invoke-WebRequest http://YOUR_URL ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
    ption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
```
PUTメソッドは対応していないため、マネージメントコンソールよりエラーが帰ってくるのが確認できます。


#最後に

PowerShellから簡単にシナリオを呼び出せることが確認できました。
PowerShellからシナリオが起動できると、ちょっとシナリオを動かしたい時や、パソコンが起動してる間だけ定期的にシナリオを実行することが出来るようになります。