PC5250/CA400

20.5250エミュレータから PCコマンドを実行するには?

PCOMM や ClientAccess(iSeiesAccess) から PCの DOSコマンドを実行するには

の2つのコマンドが OS400 によって提供されている。
このうち最も良く知られているのが STRPCCMD である。
STRPCCMD が普及しているのは下記のように PCコマンドを指定するだけの非常に簡単な
ものであるからである。

CLP に STRPCCMD を実行するためのサンプル・ソースを次に示す。

【 STRPCCMD実行サンプル・ソース 】
   PGM                                              
   DCL        VAR(&PCCMD) TYPE(*CHAR) LEN(123)      
                                                    
   CHGVAR     VAR(&PCCMD) VALUE('C:\LOGFILE.TXT  ') 
   STRPCO     PCTA(*NO)                             
   MONMSG     MSGID(IWS4010)                        
    STRPCCMD   PCCMD(&PCCMD) PAUSE(*YES)            
   ENDPGM

これに対して RUNRMTCMD は、あくまでも遠隔コマンドの実行のためのものであって
PCだけでなく System i どうしでも使用することができる。

ただし STRPCCMD に対してユーザー,パスワードによるログインが必要となるので面倒である。
一般の CLP から PCコマンドを起動しようとするとユーザー、パスワードが予めわかって
いなければ使用することができない。
おまけに使用可能なユーザー名は 10バイト以内の文字列であるのでPCに対しては
かなり制約を受けてしまう。
恐らくはこの理由によって RUNRMTCMD よりは STRPCCMD が普及しているものと
推測できる。
ただし STRPCCMD で指定できる PCコマンドの文字列の長さも 123バイトという制限がある。
このため多くの業務で制約を受けることにもなる。
それでは何故、IBM は 123バイトという短かな文字列として制約してしまったのだろうか ?
STRPCCMD が、内部ではどのようにして実行しているかを探ってみれば解答を知ることが
できる。多くのユーザー諸氏は STRPCCMD は PCOMM や C/A独自の機能と想像されて
いると思う。つまり STRPCCMD が,直接、PCOMM や C/A のクライアント・モジュールと
通信してPCOMM や C/Aのクライアント・モジュールが PC上でPCコマンドを実行していると
思われるかも知れないが、実はそうではない。

必要なPCプログラム(PCO.EXE)が活動状態になっていません
PCと連絡することはできません。
再開始するためには,実行キーを押してください

とのメッセージに記憶はないだろうか ?
STRPCCMD を使っていると、たまに、このメッセージを見たことがあるかも知れないが実は
このメッセージは STRPCCMD を実行すると、毎回出力されているのである。
そしてこの画面が出力されると同時に,同じ画面の 5250ストリーム内にユーザーが指定した
PCコマンドの文字列が埋め込まれているのである。
もちろん PCOMM や C/A では、そのPCコマンドの文字列は表示されないようになっている。
しかし 5250ストリームを解析してみれば、そのことは容易に発見することができる。
つまり 5250ストリームに出力されているだけの単純な仕組みであるので123バイトという
中途半端な制約を受けることになってしまうのである。
さて、何故、STRPCCMD の動作の仕組みをここまで説明してのかと言うと

次に STRPCCMD の Web化について考えてみよう。
STRPCCMD は普及しているため業務に直接、STRPCCMD を組み込んでいるケースも
珍しいことではない。
WebFacing ツールなどを使って Web化しようするときに、STRPCCMD の Web化が問題と
なってしまう。
何しろ サーバー側から Windows のDOSコマンドを実行できるとなると、
それは早晩、Windowsのセキュリティ・ホールとなってしまうからである。
一般のHTTPサーバーから クライアントPC の DOSコマンドを実行できるとなるとWebに
接続しただけで自分のPCが侵されてしまうことになる。
しかし WebFacingで業務を Web化するとなると、5250エミュレータでは使えていた
STRPCCMDが使えないとなると、これも問題であるにちがいない。
そこで前述の STRPCCMD が 5250ストリーム内に埋め込まれているだけの事実を
WebFacing の開発者が理解すれば JavaScript の runメソッドや executeメソッドを
使って STRPCCMD を Web上でも再現することが可能となる。
米国のソリューションの開発者は、このことを良く理解していてSTRPCCMD を独自の
5250エミュレータを再現している例がある。
IBM 製品では Host on Demmand (HOD) だけが STRPCCMD をサポートしている。
ただし同じ IBM製品であっても HATS (Host Access Transformation Services ) はサポートしていない。
EnterpriseServer Ver5.0 搭載の AutoWeb では STRPCCMD をサポートした。
以下はその実行の様子である。

【 123バイトの制約の工夫について 】

前述の例では

NOTEPAD C:\MYTEXT.TXT

のようにして、NOTEPAD(メモ帖) を使って C:\MYTEXT.TXT のオープンを指示しているが
DOS コマンドは現在では拡張子に関連づけられたアプリケーションが起動するように改善されている。
従って上記のコマンドは,

C:\MYTEXT.TXT

だけでもよい。
.TXT に関連づけられているアプリケーションが NOTEPAD であればNOTEPAD で起動されることになる。
このような指定であれば多少、PCコマンドの長さを短くすることができる。