Azure CLI 和 PowerShell 之间的区别

Dev*_*ang 6 powershell azure azure-powershell azure-cli

我是作为 Windows 用户问这个问题的,但我要求你不要只限制 Windows 的答案。

我尝试在Power-Shell 中执行Azure CLI命令,它们执行成功,但反之则不然。在那种情况下,为什么我们有 2 个单独的命令集?为什么不只在 Power-Shell 上工作?我只尝试了一些基本命令,除了过滤器命令仅适用于 CLI 且仅适用于 Power-Shell外,它们都可以正常工作。| find| Select

我知道 Azure CLI 用于跨平台支持。但是对于 Windows 用户有什么区别吗?在 Power-Shell 上运行 CLI 命令有什么后果吗?

提前致谢。

Roa*_*ner 7

这是使用两者的意见。我绝不是说一个比另一个好。他们都有各自的优点和缺点。


Azure CLI是用于管理 Azure 资源的跨平台命令行工具,它可以在 Windows、Mac 和 Linux 中运行。这也意味着它可以在 Windows PowerShell 上运行。它比 Azure PowerShell 更灵活,因为它是一个二进制文件,可以在任何操作系统默认 shell 中运行。

在 Power-Shell 上运行 CLI 命令有什么后果吗?

更新可能有点痛苦。如果要在 Windows 上更新它,则必须按照在 Windows 上安装 Azure CLI 中的说明重新安装 MSI 。在其他平台上更新更容易,这让我只想在 Windows PowerShell 上使用 Azure PowerShell。解决方法是在 Windows 上使用 WSL,然后您可以在 Windows 机器内的 Linux 上运行 Azure CLI。您可以在Windows Subsystem for Linux Installation Guide for Windows 10 中安装 WSL 。我发现azure-cli在 Linux 上更新包apt-get比在 Windows上更容易。您可以查看使用 apt 安装 Azure CLI,了解如何在 Linux 上安装 Azure CLI 包。

另一个区别是您必须使用 Azure CLI 链接多个命令,例如az group listGet-AzResourceGroup来自 Azure PowerShell 的命令。您也无法Get-Help像使用 Azure PowerShell 那样使用 Azure CLI 命令运行,这对我来说是一个巨大的游戏规则改变者,因为我发现 PowerShell 帮助系统非常有帮助,可以显示有关 PowerShell Cmdlet 的深入信息。Azure CLI 帮助信息可通过 找到az --help,但不如 全面Get-Help

使用 Windows PowerShell 时,选项卡完成功能在 Azure CLI 中也不起作用。这也让打字变得有点痛苦,这是我在 Windows 中使用 WSL 的另一个原因。您可以在 Windows 命令行GitHub 问题中的此自动完成支持中查看其他替代方案。


另一方面,Azure PowerShell是一组 PowerShell Cmdlet,用于从命令行管理 Azure 资源,并且适用于 Windows PowerShell 和 PowerShell Core。这也意味着,如果另一个操作系统(例如 Mac 或 Linux)正在运行 PowerShell Core,那么它也可以运行 Azure PowerShell。

我只尝试了一些基本命令,除了过滤命令之外,它们都可以正常工作 | find 仅适用于 CLI 和 | Select 仅适用于 Power-Shell。

Select-Object或者简写Select是 PowerShell Cmdlet,因此它仅适用于 PowerShell 对象。find可以搜索字符串或文本文件。此外,如果要从 Azure CLI 搜索数据,则应使用--query参数而不是find,因为find仅限于在文本中搜索字符串。Azure CLI 使用JMESPath查询语言在你收到的 JSON 输出中搜索数据。如果您对这种查询语言感到满意,那么使用 Azure CLI 搜索数据应该不是什么大问题。此外,您还可以在 PowerShell 脚本中使用 Azure CLI 命令,但反之则不然。


概括

如果您处理多个平台或希望与使用不同平台的其他人一起编写脚本,使用 Azure CLI 是一个不错的选择。但是,如果您主要处理 Windows 系统并与其他也这样做的人一起工作,那么使用 Azure PowerShell 是一个好主意。如果您像我一样必须使用不同的平台,那么安装这两个平台是个好主意。如果您仍然只想在不同的操作系统平台上使用 Azure PowerShell,那么您需要 PowerShell Core。

对于简单的任务,比如在云 shell 中快速查找资源或编写快速脚本,Azure CLI 很好用,而且比 Azure PowerShell 更简洁。如果您已经经常使用 bash,这会感觉更自然,并且将 Azure CLI 命令添加到现有脚本将是一项简单的任务。正如其他人所说,没有什么能阻止您将 Azure CLI 命令添加到 powershell 脚本中,这允许您将 JSON 输出反序列ConvertFrom-Json化为PSCustomObject.

对于更复杂的任务,Azure PowerShell 更可取,因为使用 .NET 对象/OOP 主体比解析从 Azure CLI 给出的 JSON 文本容易得多。这就是我尽可能尝试使用 Azure PowerShell 的原因之一。

Azure CLI 确实受益于幂等性,因此对资源运行相同的命令不需要像在 Azure PowerShell 中那样进行任何空检查。如果这成为一个问题,则可以在 Azure PowerShell 中运行 ARM 模板,这些模板是幂等的。


更新

正如@AimusSage在评论中帮助指出的那样,PowerShell 7.0最近已发布,取代了名称PowerShell CorePowerShell 6.x。您可以在宣布 PowerShell 7.0 中阅读更多内容。

另一个想法

如果你想从 Azure PowerShell 维护 OOP 主体,但使用 Linux 系统管理员更容易使用的东西,那么你可以考虑使用适用于 PythonAzure SDK。过去,当我想在 Linux 主机中运行脚本但不想使用 Azure CLI 或安装 PowerShell 时,我曾使用过它。