Windows实例使用云助手与登录ECS实例本地执行命令的差异

更新时间:
复制 MD 格式

云助手是专为云服务器ECS打造的原生自动化运维工具,可以免密码、免登录、无需使用跳板机执行命令。本文介绍Windows实例使用云助手与登录ECS实例本地执行命令的差异。

云助手概述

云助手Agent作为一个服务运行在ECS实例中,直接与阿里云相关服务端通信,获取并执行命令后上报结果,云助手Agent与用户使用SSH等方式远程连接到ECS实例上执行命令的通信链路不同,因此使用云助手与登录ECS实例执行命令的结果可能存在差异。关于云助手的更多信息,请参见云助手概述

支持的功能差异

  • 是否支持调用带有图形界面的程序

    ECS实例的操作系统内部可以通过PowerShell或者Bat脚本直接调用带有图形界面的程序,而云助手不支持调用带有图形界面的程序。

  • 是否支持使用net use命令挂载NAS

    ECS实例上可以本地执行net use命令,而使用云助手执行net use命令挂载NAS时会报错。例如,使用云助手执行net use z: \\***.cn-zhang***.nas.aliyuncs.com\myshare命令时,云助手的命令输出框中提示如下错误信息。

    错误信息为发生系统错误 58。指定的服务器无法运行请求的操作。

命令执行错误提示的输出顺序差异

差异现象

使用云助手执行命令和在ECS实例本地执行命令,如果命令执行错误,则错误提示的输出顺序可能会不一致。例如,执行同一命令的错误示例如下所示:

  • 云助手执行命令:使用云助手执行PowerShell命令 get-dddecho "hello" 时,命令输出区域先显示正常输出 hello,随后显示红色错误信息,提示 get-ddd 无法识别为 cmdlet、函数、脚本文件或可运行程序(错误类型为 CommandNotFoundException)。即正常输出排在错误提示之前。

  • ECS实例本地执行命令

    get-ddd
    echo "hello"
    PS C:\Users\Administrator\Desktop> C:\Users\Administrator\Desktop\aa.ps1
    get-ddd : 无法将"get-ddd"项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
    所在位置 C:\Users\Administrator\Desktop\aa.ps1:1 字符: 1
    + get-ddd
    + ~~~~~~~
        + CategoryInfo          : ObjectNotFound: (get-ddd:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException
    hello
    PS C:\Users\Administrator\Desktop>

原因

使用云助手执行命令,云助手Agent会轮询合并stdoutstderr,合并顺序为先合并stdout,再合并stderr,然后输出结果。在ECS实例本地执行命令,按照命令执行过程输出结果。因此,当命令执行过程中有stderr时,云助手执行命令和ECS实例本地执行命令的错误提示顺序可能会不一致。