研究命令行工具的语法和输出

上一篇文章提供了选择要使用 Crescendo 进行放大的命令行工具的条件。 在本文中,我们将介绍收集有关该工具的信息的方法,以帮助你使用 Crescendo 设计 cmdlet。

对于本文中的示例,我们使用 Azure Connected Machine Agent 工具 (azcmagent) 。 我们之所以选择此工具,是因为:

  • 它易于安装和删除
  • 基本使用情况不需要有效的 Azure 订阅
  • 它提供有用的控制台内帮助和联机文档
  • 它生成易于消耗的输出

提示

如果没有此工具,则无需安装该工具,除非要试用示例。

有关详细信息,请参阅本文 的安装 azcmagent 工具 部分。

从命令行帮助和文档开始

许多命令行工具包括用于显示帮助内容的开关或参数。 大多数新式命令行工具为该工具提供的各种用例方案提供多个级别的帮助。 例如,在不带任何参数的情况下运行 azcmagent 会显示顶级帮助,其中包含子命令的列表。

...
Usage:
  azcmagent [command]

Available Commands:
  check       Runs connectivity checks
  config      Change configuration settings for this machine
  connect     Connects this machine to Azure
  disconnect  Disconnects this machine from Azure
  help        Help about any command
  license     Display the End-user license agreement file
  logs        Creates a .zip file containing relevant logs. This is primarily useful for troubleshooting.
  show        Gets machine metadata and Agent status. This is primarily useful for troubleshooting.
  version     Display the Hybrid Management Agent version
...

每个子命令都可以有自己的子命令和参数。 例如, config 子命令有五个子命令。

PS> azcmagent config --help
Change configuration settings for this machine

Usage:
  azcmagent config [command]

Available Commands:
  clear       Clear a configuration property's value
  get         Get a configuration property's value
  info        Describes the config properties users can set
  list        List all configuration properties and values
  set         Set a value for a configuration property

Flags:
  -h, --help      help for config
      --version   version for config

Global Flags:
      --config string   config file (default is $HOME/.azcmagent.yaml)
  -j, --json            Output in JSON format
      --log-stderr      Redirect error and verbose messages to stderr
  -v, --verbose         Increase logging verbosity to show all logs

Use "azcmagent config [command] --help" for more information about a command.

使用命令行帮助发现可能的用例。 可以将每个 help 命令的输出重定向到一个文件,供以后在创建 Crescendo cmdlet 时参考。

提示

如果帮助内容结构一致,则可以通过分析此帮助输出来创建生成 cmdlet 的代码。 Crescendo 附带了一些实验性帮助分析器,用于说明如何完成此操作。 Experimental请参阅 Microsoft.PowerShell.Crescendo 模块的根文件夹中的文件夹。

记下命令行工具提供的输出格式。 许多命令行工具都可以以 CSV 或 JSON 等格式输出信息。 这些结构化格式可轻松转换为 PowerShell 对象。

捕获用于分析的示例输出

确定使用 Crescendo 放大工具的哪些命令后,请从这些命令收集示例输出。 将每个命令的输出重定向到一个文件。 使用此示例数据可帮助设计 Crescendo cmdlet 的输出处理程序 (分析程序) 。

检查示例输出时,请考虑返回的数据类型。 构造对象时,应将命令行工具输出的字符串转换为 .NET 类型。 例如,时间戳信息可以转换为 .NET [DateTime] 类型。 此外,请查看用于分隔数据字段的标记的输出格式。 这些标记可用于在构造对象以进行输出时分析信息。

该工具 azcmagent 可以选择以 JSON 格式输出信息。 这使得到 PowerShell 对象的转换变得非常简单。 例如:

PS> $agentStatus = azcmagent show --json | ConvertFrom-Json
PS> $agentStatus.services

displayName       serviceName      status
-----------       -----------      ------
GC Service        gcarcservice     running
Extension Service extensionservice running
Agent Service     himds            running

有关分析输出的更复杂的示例,请参阅 PowerShell 社区博客中的这 篇博客文章

注意

azcmagent必须使用管理权限运行该工具。 这也意味着创建的模块必须使用管理权限运行。

安装 azcmagent 工具

可从以下位置下载适用于 Windows 和 Linux 的 Azure Connected Machine 代理包。

有关 Azure Connected Machine 代理的详细信息,请参阅 管理和维护 Connected Machine 代理

后续步骤