run-remote 命令执行 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 对象。 按名称或地址指定目标系统,同时使用 WinRemote 对象可以更灵活地控制执行进程,例如,不同的凭据用于不同的主机。 WinRemote 对象和包含主机名/地址的字符串可以在远程目标列表中同时使用。 目标列表的元素不是自动字符串化的,因此在主机名中使用文本字符串时必须将其置于引号内。
示例
评估简单表达式并等待直到执行完成:
aRT = run-remote "1+2" on "ascli1" -wait ? "Error occurred:", aRT[0].errorOccurred() ? "Result:", get-remoteResult(aRT[0])
在两个远程系统上从文件评估脚本,等待直到执行完成并显示输出(“Hello World!”)和结果 (42):
s="? 'Hello World';42;" // 仅为说明目的创建脚本文件 // 也可以调用: // 针对“ascli1”、“ascil2”调用 aRT=run-remote (s) 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 对象在两个远程系统上评估脚本,为目标系统指定不同的凭据:
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() }
版权所有 © 2013 CA。
保留所有权利。
|
|