扱えるコマンド (標準入出力タイプ)
まず,標準入出力タイプとしてアクセスされた場合に
処理可能なコマンドの用件について説明します.
アクセスされる URL により実行ファイル名と引数を与えます.
具体的には http://foo.bar/exec/cui-command.exe?abc%20bcd のように,
/exec/[実行ファイル名]?[引数]という形で与えます.
URLの指定法については詳しくは
こちらをご覧ください.
標準入出力タイプでアクセスされた場合には,
端末を利用中のユーザーから見えずにバックグラウンドで
処理を行います.
GET methodでアクセスした場合には,
標準入力を与えず指定されたファイルを実行し,
実行終了後に
標準出力や標準エラーの内容をコンテンツとして返します.
標準入力にははじめからEOF が与えられます.
POST method でアクセスした場合には,
リクエストのメッセージボディーの部分を標準入力にして,
実行終了後に
標準出力や標準エラーの内容をコンテンツとして返します.
実行されるコマンドからみると,POST で与えられた内容を
一度全部受信し終わるまでためておいて,受信し終わると
最後にEOF がついた形で標準入力から一気に与えられます.
ブラウザのFORM文では自由な入力が与えられないので,
このようなスクリプトで
アクセスすることをお勧めします.
したがって,遠隔操作で利用できるコマンドは,
標準入力を流し込めば,もしくは標準入力は必要なく,
標準出力や標準エラーに結果等を表示し終了するものに
限ります.
これらの例として,ping.exe, ipconfig.exe,cacls.exe,
無理な例として,インタラクティブな操作が必要な
ftp.exe やGUI操作が必要となる notepad.exe などが挙げられます.
また,perl などのスクリプトが使える環境であれば,
標準入力を流し込めば,もしくは標準入力は必要なく,
標準出力や標準エラーに結果等を表示し終了するスクリプトを
作成すれば,利用可能です.
また CGI とは違い,
はじめにContent-Type を書かなければならないなどの
制限はなく,出力内容をそのまま text/plain な内容の
コンテンツとして返しますので,どんな出力でもかまいません.
サンプルも参考にしてください.
扱えるコマンド (GUIタイプ)
まず,GUIタイプとしてアクセスされた場合に
処理可能なコマンドの用件について説明します.
アクセスされる URL により実行ファイル名と引数を与えます.
具体的には http://foo.bar/guikick/gui-command.exe?abc%20bcd のように,
/guikick/[実行ファイル名]?[引数]という形で与えます.
URLについては詳しくはこちらをご覧ください.
GUIタイプとしてアクセスされた場合には,
端末を利用中のユーザーから見えるようにウィンドウを出します.
ウィンドウを出す場所として,
(1)ユーザーから隠れたウィンドウ (/guikick/の部分を
/kick/に変更してアクセス)
(2)ユーザーの作業画面 (/guikick/ でアクセス)
(3)ログイン画面やCtrl-Alt-Delを押したときの画面 (/guikick/の部分を
/notify/に変更してアクセス)
の二つが選択できます.
この際に注意していただきたい点は,ウィンドウが見える場合にはウィンドウは
端末利用中のユーザーが操作できますが,
プログラムはサービスの実行権限(大抵は管理者権限)で
動いていることです.
不用意に自由度の高いプログラムを走らせることは
システムの保守を考えると危険です.
GET methodでアクセスしてください.
実行終了まで待たずに,キックが成功したかどうかのみを
簡単な文字情報によりレスポンスとして返します.
なお,(1) では
ユーザーに見せないで(Service専用のdesktopで)コマンドをキックするので,
基本的にユーザーに操作される可能性を考慮する必要がありません.
また標準入力や結果の必要ない標準入出力タイプの
コマンドを起動する(そして終了を待たない)ことも可能です.
サンプルも参考にしてください.