はじめに
株式会社エクスブレーンでRPAエンジニアとして働いている、fujiwaraです。
BizRobo!(ver11.4)で、ロボット実行専用端末のMicrosoft Officeライセンス認証状態を自動チェックし、ログ保存する仕組みを構築した際のノウハウをまとめました。
当初検討していた構成から、実運用(トラブルシューティングやエビデンス保持)を見据えた構成への変更経緯を含めて記載しています。
1. 導入の背景と前提条件
導入のきっかけ
ロボ運用中の端末において、ライセンス状態が切れる可能性が浮上したため、その事前対策・監視用として本チェック機能を導入することになりました。
実装における前提条件と制約
-
ロボ専用端末である: 人間が日常的に画面操作を行う機会が少なく、画面上でライセンス警告が出ていても人間の目で気づきにくい環境でした。
-
管理者権限が付与されていない: ロボ用端末のログインユーザーには、Windowsの管理者権限が付与されていませんでした。
2. 開発方針
当初案:画面操作や直接ExcelやWordを起動してチェックする方法
当初はロボでExcelを起動し、アカウント認証ポップアップや設定画面のテキストを抽出する設計を考えていました。
その場合、他の本番運用されているロボットとExcel操作でバッティングする可能性があり、処理の干渉やバッティングによるエラーが懸念点としてありました。
採用案:ospp.vbs のコマンド実行
調べていく中で、Microsoft Officeに標準搭載されているライセンス管理スクリプト ospp.vbs の存在を知りました。
ospp.vbs をコマンドプロンプト経由(cscript)で呼び出し、その実行結果をBizRobo!で判定・保存します。
この案であれば、Excel操作のバッティングを回避でき、コマンドを実行するだけのシンプルな仕組みのため、ロボ開発のコストも低く抑えられると考え、本案を採用しました。
3. コマンド仕様の検討
基本コマンドと実行権限
ospp.vbs には様々なオプションがありますが、今回の目的である「状態確認(/dstatus)」だけであれば管理者権限は不要です。
今回の前提条件であった「管理者権限がない標準ユーザー」の環境でも問題なく実行できました。
cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus
(※32bit版Officeの場合は C:\Program Files (x86)\...)
findstrによるログ絞り込み検討
当初案:コマンド結果から不要な情報を削ぎ落とすためにfindstrで絞り込む構成(例:... /dstatus | findstr "NAME STATUS")
しかし、コマンドの出力内容を絞りすぎると、万が一認証エラーが発生した際に詳細なエラーコードがログに残らず、原因究明に手間取る可能性があると考えました。
コマンド出力例
LICENSE NAME: Office 16, Office16ProPlusVL_KMS_Client edition
LICENSE STATUS: ---LICENSED---
採用案:全出力を取得してログファイル(.txt)へ保存
実運用でのメンテナンス性・トラブルシューティング性を最優先し、コマンド出力は絞り込まずそのままテキストファイルへログとして保存し、同時にBizRobo!の変数に格納して文字列検索で判定する構成を採用しました。
全出力保存のメリット
人間が目視チェックする機会が少ない端末だからこそ、後からテキストファイルを開くだけで詳細なエラー情報やプロダクト情報を一目で確認できる。
コマンド出力例
---Processing------------------------------------
-------------------------------------------------
PRODUCT ID: 00339-10000-00000-AA234
SKU ID: d72b2645-812d-4370-9856-12128e469550
LICENSE NAME: Office 16, Office16ProPlusVL_KMS_Client edition
LICENSE DESCRIPTION: Office 16, VOLUME_KMSCLIENT channel
BETA EXPIRATION: 1601/01/01
LICENSE STATUS: ---LICENSED---
ERROR CODE: 0x0 with CScript Error Code
REMAINING GRACE: 180 days (259200 minute(s) before expiring)
LAST 5 CHARACTERS OF INSTALLED PRODUCT KEY: WFG99
Activation Type Configuration: ALL
DNS record decrypted successfully.
KMS machine name from DNS: kms.example.local:1688
KMS machine extended pid: 06164-03300-000-000000-03-1041-9200.0000-2442026
Activation interval: 120 minutes
Renewal interval: 10080 minutes
KMS host caching is enabled
-------------------------------------------------
---Exiting---------------------------------------
4. BizRobo! での実装フロー
① コマンド実行(Execute Command)
cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus を実行し、標準出力を変数(例:OutputText)に格納します。
② テキストファイルへのログ保存
取得した OutputText を日付や端末名を付けた .txt ファイルとして指定フォルダへ書き出します。
③ ステータス判定と通知
OutputText 内に LICENSED / UNLICENSED などのキーワードが含まれるかをテストステップ等で判定し、異常検知時にはメール等で通知を行います。
5. まとめ
-
管理者権限がない標準ユーザー環境でも
ospp.vbs /dstatusによるライセンス状態チェックは可能 -
人間が目視確認しにくいロボ専用端末だからこそ、自動チェックと詳細ログ(.txt)の保持が効果的
-
画面操作を行わずコマンド実行を使うことで、処理の高速化と安定性を確保できる
-
実運用ではログ絞り込み(
findstr)を行わず、全出力をテキスト保存する方がトラブル時の原因特定が容易になる
おわりに
同じようにBizRobo!を触っている方の参考になれば幸いです。
「自分はこうしている」といった工夫があれば、ぜひ共有いただけると嬉しいです!
最後まで読んでいただき、ありがとうございました!
補足
私の所属するエクスブレーンDX事業部の採用情報と紹介記事のリンクを貼っておきます。
興味がありましたら覗いてみてください。よろしくお願いします!