run-remote コマンドは、1 つ以上のリモート システム上で、文字列またはディスク ファイルに含まれている JavaScript コードを実行します。 リモート実行を行うには、リモート ターゲット ノードに AutoShell クライアントをインストールし、適切に設定する必要があります。 スクリプト ファイルはマネージャ システム上に保存し、実行するターゲット システムに転送する必要があります。 デフォルトでは、スクリプトは非同期で実行されます。つまり、リモート実行が完了する前もローカル処理は継続されています。
コマンドの構文は、以下のとおりです。
run-remote [script] [-file file] [-wait] [-with args,...] [-user username] [-pass password] [-key key phrase] [-port portnumber] on remoteTargets
run-remote コマンドは、指定したサーバでのスクリプトの実行状態を表す RemoteTarget オブジェクトの配列を返します。 この配列の要素はそれぞれ、remoteTargets リストの対応する位置にあるリモート ノードに対応します。 RemoteTarget オブジェクトはいくつかの結果を確認できます。たとえば、エラーの発生、実行の完了、および成功の可否などです。 RemoteTarget オブジェクトを使用してリモート ノードをすでに指定している場合、配列には元の RemoteTarget オブジェクトへの参照が格納されます。 ターゲット システムが文字列によって指定されている場合、新しい RemoteTarget オブジェクトが内部に作成され、配列に割り当てられます。
(オプション)実行する JavaScript コードが含まれている文字列を指定します。 この funclet は、文字列またはファイルからスクリプトを実行します。 そのため、script 引数と file 引数はどちらかしか指定できません。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。
デフォルト: ""
(オプション)実行するスクリプト ファイルを絶対パスまたは相対パスで指定します。 この funclet は、文字列またはファイルからスクリプトを実行します。 そのため、script 引数と file 引数はどちらかしか指定できません。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。
デフォルト: ""
(オプション)デフォルトでは、run-remote はリモート実行を開始すると戻ってきます。リモート処理は非同期で行われます。 -wait オプションを指定すると、run-remote はすべてのリモート タスクが正常に完了するか、エラーで中止されるまで待機します。
(オプション)スクリプトに渡す実際の引数をカンマ区切りのリストで指定します。 スクリプト コードでは、標準的な JavaScript 引数配列を使用してこれらの引数にアクセスできます。
(オプション)リモート ノードへのログインに使用するユーザ名を指定します。 パスワードまたは公開鍵認証を使用する場合、ユーザ名は必須です。 ユーザ名を指定しない場合、AutoShell へのログイン時に入力されたユーザ名が使用されます。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。 指定したユーザ名は、remoteTargets リスト内のホスト名で識別されるリモート システムにのみ使用されます。 RemoteTarget オブジェクトを使用してホストを指定している場合、RemoteTarget オブジェクトによってホストごとにユーザ名が個別に設定されます。
デフォルト: $$User
(オプション)リモート ノードへのログインに使用するパスワードを指定します。 パスワードを指定しない場合、AutoShell へのログイン時に入力されたパスワードが使用されます。 このコマンドを発行した後に非表示でパスワードを入力するには、引数としてオプションのプロンプトと PW_GET() を指定します。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。 指定したパスワードは、remoteTargets リスト内のホスト名で識別されるリモート システムにのみ使用されます。 RemoteTarget オブジェクトを使用してホストを指定している場合、RemoteTarget オブジェクトによってホストごとにユーザ名が個別に設定されます。
デフォルト: $$Pass
(オプション)リモート ノードへのログインに使用する、RSA の秘密鍵が保存されているファイルへの絶対パスまたは相対パスを指定します。 秘密鍵とパスワードが指定された場合、AutoShell はまず公開鍵でログオンしようとします。公開鍵でのログオンに失敗した場合は、パスワードでログオンします。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。 このパラメータは、公開鍵認証を使用して、オンザフライで SSH セッションを作成する場合にのみ必要です。
デフォルト: ""
(オプション)秘密鍵のパスフレーズを指定します。 キーが暗号化されていない場合、パスフレーズは不要です。 このコマンドを発行した後に非表示でパスワードを入力するには、引数としてオプションのプロンプトと PW_GET() を指定します。 引用符で囲まれていない引数トークンは自動的に文字列に変換されます。 式のコードは丸かっこ内に配置して、式が自動的に引用符で囲まれないようにします。
デフォルト: ""
(オプション)ターゲット システムに接続するポートを指定します。 指定したポートは、remoteTargets リスト内のホスト名で識別されるリモート システムにのみ使用されます。 RemoteTarget オブジェクトを使用してホストを指定している場合、RemoteTarget オブジェクトによってホストごとにポートが個別に設定されます。
デフォルト: SSH の標準ポート 22。
指定したスクリプトを実行するリモート システムのカンマ区切りリストを指定します。 ターゲット ノードは、ホスト名/アドレスと WinRemote オブジェクトの 2 つの方法で指定できます。 WinRemote オブジェクトを使用するときに名前またはアドレスを使用してターゲット システムを指定すると、たとえば別のホストに別の認証情報を使用するなど、より柔軟に実行プロセスを制御できます。 リモート ターゲット リストには、ホスト名/アドレスを持つ WinRemote オブジェクトおよび文字列を混合させることができます。 ターゲット リストの要素は自動的に文字列化されません。したがって、ホスト名用のリテラル文字列を使用する場合は、引用符で囲む必要があります。
例
単純な式を評価し、実行が完了するまで待機します。
aRT = run-remote "1+2" on "ascli1" -wait ? "Error occurred:", aRT[0].errorOccurred() ? "Result:", get-remoteResult(aRT[0])
2 つのリモート システムにあるファイルのスクリプトを評価して、実行が完了するまで待機し、出力(「Hello World!」)および結果(42)を表示します。
s="? 'Hello World';42;"
// 説明のみのためにスクリプト ファイルを作成する
// 次のように呼び出すこともできる
// aRT=run-remote (s) on "ascli1", "ascil2"
memoWrit("hello.js", s);
aRT=run-remote -file hello.js on "ascli1", "ascli2"
for(i=0; i<aRT.length; i++)
{
? "Target:", aRT[i].getHostName()
? "Error occurred:", aRT[i].errorOccurred()
? "Output:", aRT[i].errorOccurred()
? "Result:", get-remoteResult(aRT[i])
}
RemoteTarget オブジェクトを使用して 2 つのリモート システムのスクリプトを評価し、ターゲット システムに異なる認証情報を指定します。
rt1 = new RemoteTarget("ascli1", "alice", "casogood42");
rt2 = new RemoteTarget("ascli2", "bob", "!secret!7");
// リモート システムから OS バージョンの文字列を取得する
aRT = run-remote "! ver" on rt1, rt2
// 自分自身を待機する
while(true)
{
// エラーが発生した場合、hasCompleted() は
// 同様に true を返す
if(rt1.hasCompleted() && rt2.hasCompleted())
break;
sleep(500);
}
// 元の RemoteTarget オブジェクト(上記参照)
// または返された配列(下記参照)内の参照の
// いずれかを使用できる。
for(i=0; i<aRT.length; i++)
{
? "Target:", aRT[i].getHostName()
? "Error occurred:", aRT[i].errorOccurred()
? "Output:", aRT[i].errorOccurred()
}
|
Copyright © 2013 CA.
All rights reserved.
|
|