云助手是专为云服务器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-ddd和echo "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会轮询合并stdout和stderr,合并顺序为先合并stdout,再合并stderr,然后输出结果。在ECS实例本地执行命令,按照命令执行过程输出结果。因此,当命令执行过程中有stderr时,云助手执行命令和ECS实例本地执行命令的错误提示顺序可能会不一致。