$ZF(-100) で実行したコマンドの結果をファイルに出力する方法
これは InterSystems FAQ サイトの記事です。
以下の方法で、$ZF(-100) で実行したコマンドの出力を取得することが可能です。
★$ZF(-100) での実行でコマンドキーワードを使用する方法:
/STDOUT や /STDERR などの便利なキーワードを指定して、$ZF(-100) でコマンドを実行することが可能です。
USER>write $zf(-100,"/SHELL/STDOUT=c:\temp\result.log/STDERR=c:\temp\error.log","net","use","\\testsrv\public","/user:testuser","password")
2
USER>!type c:\temp\result.log
USER>!type c:\temp\error.log
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続
は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、
再試行してください。
USER>write $zf(-100,"/SHELL/STDOUT=c:\temp\result.log/STDERR=c:\temp\err.log","netstat","-anp","tcp")
0
USER>!type "c:\temp\result.log"
アクティブな接続
プロトコル ローカル アドレス 外部アドレス 状態
TCP 0.0.0.0:23 0.0.0.0:0 LISTENING
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
:
USER>!type "c:\temp\err.log"
USER>
コマンドキーワードについては、以下のドキュメントをご覧ください。
$ZF(-100) で指定できる便利なキーワード
※ /STDOUT と /STDERR に同じファイルを指定した場合、両方のタイプのデータがそのファイルに書き込まれます。
★標準エラー出力(2) を 標準出力(1) へリダイレクトする方法:
以下の方法で、標準エラー出力(2) を 標準出力(1) へリダイレクトし、さらにコマンドの 標準出力 を ファイル(result.log) へ出力する方法が使用できます。
USER>Set st = $ZF(-100, "/shell", "net", "use", "\\server1\Public", "/user:name", "password", ">result.log", "2>&1")
USER>write st // 戻り値が0(成功)以外の時、ログを見て原因を調査してみる
2
上記コマンドの場合、実行したネームスペースのデフォルトデータベースのフォルダに result.log が出力されます。
内容は以下のような標準出力が記録されています。
/* result.log */
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。
【ご参考】