上一主题: run-local 命令-在本地系统上执行脚本 (Funclet)下一主题: run-SSHCommand 命令-通过 SSH 运行远程命令 (Funclet)


run-remote 命令-在远程系统上执行脚本 (Funclet)

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 对象并将其分配给数组。

script

(可选)指定包含要执行的 JavaScript 代码的字符串。 此 funclet 从字符串或文件执行脚本。 因此,scriptfile 参数是互不相容的。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。

默认:""

-file file

(可选)指定要执行的脚本文件的绝对路径或相对路径。 此 funclet 从字符串或文件执行脚本。 因此,scriptfile 参数是互不相容的。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。

默认:""

-wait

(可选)默认情况下,run-remote 在开始远程执行之后返回,且远程处理采用异步方式执行。 当指定 -wait 选项后,run-remote 会等待直到所有远程任务成功完成或因错误而中止。

-with args,...

(可选)指定要传递到脚本的实际参数的逗号分隔列表。 脚本代码可以使用标准的 JavaScript 参数数组访问这些参数。

-user username

(可选)指定用于登录到远程节点的用户名。 要使用密码或公钥身份验证,需要输入用户名。 如果没有指定用户名,则使用在 AutoShell 登录过程中输入的用户名。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。 指定的用户名仅用于由 remoteTargets 列表中的主机名标识的远程系统。 使用 RemoteTarget 对象指定主机时,每个主机都可以通过 RemoteTarget 对象设置自己的用户名。

默认值:$$User

-pass password

(可选)指定用于登录到远程节点的密码。 如果没有指定密码,则使用在 AutoShell 登录过程中输入的密码。 要在发出该命令之后输入隐藏的密码,请指定使用可选提示作为参数的 PW_GET()。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。 指定的密码仅用于由 remoteTargets 列表中的主机名标识的远程系统。 使用 RemoteTarget 对象指定主机时,每个主机都可以通过 RemoteTarget 对象设置自己的用户名。

默认值:$$Pass

-key key

(可选)指定包含 RSA 私钥的文件的绝对路径或相对路径,用于登录到远程节点。 如果指定了私钥和密码,AutoShell 将首先尝试公钥登录,如果失败,则尝试密码登录。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。 仅在使用公钥身份验证联机创建 SSH 会话时需要此参数。

默认:""

短语

(可选)为私钥指定密码。 如果未加密密钥,则不需要该密码。 要在发出该命令之后输入隐藏的密码,请指定使用可选提示作为参数的 PW_GET()。 未加引号的参数令牌会自动字符串化。 通过用括号括起表达式代码来阻止自动为表达式加引号。

默认:""

-port portnumber

(可选)指定连接到目标系统的端口。 指定的端口仅用于由 remoteTargets 列表中的主机名标识的远程系统。 使用 RemoteTarget 对象指定主机时,每个主机都可以通过 RemoteTarget 对象设置自己的端口。

默认值:SSH 标准端口 22。

on remoteTargets

指定要运行指定脚本的远程系统的逗号分隔列表。 可以通过两种方式标识目标节点:按主机名/地址或按 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()
}

另请参阅:

get-remoteResult 命令-从远程目标获取结果 (Funclet)

RemoteTarget 类

run-local 命令-在本地系统上执行脚本 (Funclet)