(BluePrism)プロセスを任意のタイミングで実行させたい~Part3/2~
どうも、おむおむです。
テレワークなうです。
出勤時間がカットされるというだけで非常に有意義ですね。
さて、前回まででリソースPCに対して
HTTPから指示を行う方法について記載してきました。
newgraduate19-rpa.hatenablog.com
newgraduate19-rpa.hatenablog.com
今回は、これらを使ってバッチファイルを書いてみたいと思います。
%記号をエスケープする
ご存じの通り、バッチファイル内においては
%で囲まれた文字は変数として扱われます。
前回の記事で、URL内で半角スペースは%20に
エンコードしてあげる必要があると説明しました。
ではバッチファイル内でどうやってエスケープするの!?バックスラッシュ!?
for文を思い出していただきたい。
%は、%%のように2つ並べてあげることでエスケープできるのです!
読みづらくなるね!
curlコマンドでHTTPリクエスト
curlコマンドを使用することで、お手軽?にHTTPリクエストを送ることができます。
オプションはめちゃくちゃ種類があるんですが、
今回はcurl -s <URL>
で十分かと思われます。
これは進捗のゲージ(名前ド忘れした...)を非表示にするやつです。
大文字小文字区別されるので注意!
コマンド実行結果の戻り値を取得する
Linuxであればコマンドをバッククォートで囲むだけで
実行結果を変数に入れることができますが、
Windowsの場合はいちいちForコマンドで諸々せねばなりません。
大文字小文字もなぜか区別されないし、なんか独特ですよね。
で、実行結果を環境変数に格納するには
for /f "usebackq"
というようにオプションを指定します。
使い方はコマンドプロンプトでfor /?
すればよいと思いますが、
一応下記のリンクも載せときます。
qiita.com
実行結果の特定の箇所を指定する
ここからちょっとややこしいです。
認可がAuthedになっているコマンドを使用する場合、
user
とpassword
コマンドを使用してユーザ名とパスワードを
他のコマンド実行前に指定する必要があります。
そのため、実行結果は以下のように複数行にわたります。
USER SET USER AUTHENTICATED <コマンドの実行結果>
ここで最終行の結果だけを環境変数に入れたい場合は、
for /f "skip=〇〇"
というようにスキップする行数を指定します。
また、行内の特定のトークンを指定する場合は
for /f "tokens=〇〇"
のように指定します。
例えば、createas
コマンドを使用すると、
セッションIDが以下のような形式で返ってきます。
SESSION CREATED : <セッションID>
この場合、トークンは「SESSION」、「CREATED」、「:」、「セッションID」の
4つに分かれている、とカウントできます。
そのため、セッションIDの部分だけを環境変数に格納したい場合は
for /f "tokens=4"
のように指定すると良きかと思います。
・・・長いよね、ごめんね。
実際に書いてみた
ここまでの総まとめとして、実際にbatファイルを記述してみました!
いくらでも書きようはあると思いますが、
エラーハンドリング等々ある程度無視してますが、
一例としてご参考になれば幸いです!
@ECHO OFF REM 変数宣言 SET base=http://<リソースPC名>:8181/ SET procid=<procidコマンドで取得したプロセスID> SET userid=<useridコマンドで取得したユーザID> SET sessionflg=false REM ユーザのパスワード入力 SET /P pw=パスワードを入力してください。: SET auth=%base%user%%20%userid%^&password%%20%pw% REM リソースPCのセッション状況確認 FOR /F "skip=2 usebackq" %%i in (`CURL -s "%auth%&busy"`) do ( SET isbusy=%%i ) IF %isbusy% == USER ( ECHO パスワードが違います。 PAUSE EXIT ) ELSE IF %isbusy% == YES ( ECHO ランタイムリソースに保留中もしくは実行中のセッションが存在します。 PAUSE EXIT ) :gettoken REM 認証トークン取得 FOR /F "usebackq" %%j in (`CURL -s "%base%getauthtoken%%20%procid%%%20%userid%%%20%pw%"`) do ( SET token=%%j ) IF %sessionflg% == True ( goto startp ) REM セッション作成 FOR /F "skip=2 tokens=4 usebackq" %%k in (`CURL -s "%auth%&createas%%20%token%%%20%procid%"`) do ( SET sessionid=%%k ) SET sessionflg=True goto gettoken REM 開始指示 :startp FOR /F "skip=2 usebackq" %%l in (`CURL -s "%auth%&startas%%20%token%%%20%sessionid%"`) do ( SET result=%%l ) IF NOT %result% == STARTED ( ECHO プロセスの開始指示ができませんでした。 PAUSE EXIT )
パスワードだけは実行者に入力してもらって、
実行端末は決め打ちにしてます。
また、今までの記事ではuser%20name%20<ユーザ名>
としていましたが、
冗長になるのでuser%20<ユーザID>
の形で指定しています。
そのほかにも諸々手を加えてみたので、
お暇な方は調べてみてください!
まとめ
・コマンドプロンプトって便利(雑)
以上です!長くなりましたがお読みいただきアザス!
次は最近作ったおもちゃを紹介します。