Azure CLI 与 Powershell?

Azure CLI vs Powershell?

无法准确理解 Azure CLI 在 Windows 环境中的优点。

它是否面向想要在 Linux 环境中管理 Azure IAAS 的受众?

我认为 Powershell core 将成为非 Windows 管理员的方式。 PowerShell Core 不会很好地移植到所有平台上,以服务跨平台用户吗?

In a nutshell, is it worth learning Azure CLI?

Azure CLI 是一种适用于所有平台的类似于 PowerShell 的工具。无论您使用什么平台,您都可以使用相同的命令:Windows、Linux 或 Mac.

现在,有两个版本的 Azure CLI。 Azure CLI 1.0 使用 Node.js 编写以实现跨平台功能,而新的 Azure CLI 2.0 使用 Python 编写以提供更好的跨平台功能。两者都是开源的,可在 Github 上获得。 但是,目前只有某些 PowerShell cmdlet 支持在 Linux.

上使用

Is it targetted for the audience who want to manage Azure IAAS from Linux environment?

我想答案是肯定的。对于 Linux 或 Mac 开发人员,我认为他们更有可能使用 Azure CLI。

Azure CLI 和 PowerShell 包都使用 Azure 的 REST API。

正如我们的一位 Microsoft 联系人所说:使用您喜欢和喜欢的任何东西。

Azure CLI 有一些优点:

  1. 开源 - 有很多优点。未来可能会发展得更快。您可以查看代码中的真实内容、社区可能或将会更大等等。
  2. Azure CLI 可以与 Groovy、Python、Ruby 或任何其他脚本语言一起使用。与经验丰富的 PowerShell 开发人员相比,为这种语言找到优秀的开发人员更容易。例如:我选择了 Groovy 因为 Java。使用此组合比学习 PowerShell 脚本更容易....

目前 1 PowerShell 非常积极:Azure 有一个巨大的 PowerShell 脚本示例存储库。但是:通常你必须自己做才能满足你的要求 - 因此一个例子可能是一个很好的起点 - 有时从头开始更容易。

我的建议是: 使用 Azure CLI --> 对于脚本,请使用贵公司熟悉的语言。

Powershell 在 2018 年之前的 non-Windows 平台中不可用。从 2018 年 1 月开始,Powershell 在 MacOS 和 Linux 平台中可用。

MacOS 或 Linux 上的 Powershell 安装说明可用 here

PowerShell 也是开源的。 微软刚刚发布了使用 .Net 核心的 PowerShell Azure Az 模块(2018 年 12 月)。所以它在 Linux、Mac OS 和 Windows 上运行。 如果愿意,Azure CLI 仍然可供 Linux 开发人员使用。

只是想补充一下我在 Azure Cli 和 Az PowerShell 方面的经验。

根据 2019 年,两者都是跨平台的,因此它应该只是一个 language/syntax 偏好,但使用 Azure Cli all/most 命令是 幂等的

我最终用 Azure Cli 脚本替换了我所有的 ARM 模板,因为它不那么冗长且易于阅读。

使用 Az Powershell,您仍然需要在创建资源之前检查资源是否存在,否则它会引发异常,因此脚本会无缘无故地变得非常复杂。

我们将 Azure Cli 和 Az Powershell 与 Azure DevOps 结合使用。现在可以从 bash (Linux) 或 bat (Windows) 脚本执行 Azure Cli 命令。所以它不是最佳的...(编辑 2020 您现在也可以 运行 Azure CLI 使用 Powershell 脚本)

  • 我们使用 Azure Cli 部署资源,因为它易于阅读且命令是幂等的。
  • 对于复杂的脚本,我更喜欢使用 PowerShell,因为它有很多有用的语言功能。

编辑 2021

有了新的 Azure Bicep,我开始回到“ARM 类型”部署:如果您了解 ARM 模板并且即使在复杂的部署中也能保持可读性,Bicep 真的很容易使用。

除了 Az CLI(Powershell 核心)之外,它还处理我需要执行的大部分脚本。

PowerShell 与 CLI 相比有一些显着优势:

  • PowerShell is a language of Azure Functions。因此,您可以轻松编写模块或代码并将其推送到安全的 Azure 函数。 CLI 不是受支持的语言。
  • Azure Automation Runbooks 也是如此,而 CLI 不是受支持的语言。
  • 如果您想编排涵盖本地和云端的混合工作负载,即将服务部署到 Windows 服务器,然后在 Azure 中部署端点以供其交互,PowerShell 可以,但 CLI 可以' t(如果有的话我会感到惊讶)。
  • 如果您想投资一种可以调用遗留模块进行管理的语言,PowerShell 可以,但 CLI 不能。
  • 如果您想用 C# 或任何其他语言创建自己的 DLL 并将其合并到您的脚本中。我不得不对 DLL 进行逆向工程并将它们包装在 PowerShell 中以合并到业务流程中。
  • 与 CLI 相比,我在使用 PowerShell 扩展 DevOps 管道方面取得的成功要多得多。
  • PowerShell 对 Azure 单元和冒烟测试以及大型 Azure 并行部署(超越笨拙的 DevOps 并行任务)等场景提供了非常好的多线程工作负载支持。 TBH,我不知道 Azure CLI 中的本机多线程。
  • 我可以开发一个模块,在上述所有场景中使用它,然后将它提供给最终客户; TBH,我不相信我可以为 CLI 做到这一点(创建一个模块,对其进行数字签名,然后 nuget feed 发行版)。

几乎没有什么是我没有在 PowerShell 中编写的脚本,而使用 CLI 我可以做一些事情,但不能做其他事情。我的 PowerShell 技能在我从事企业 SharePoint、Dynamics、现在的 Office 和 Azure 的 10 多年里一直保持相关...所以我有偏见。

In a nutshell, is it worth learning Azure CLI?

我在进行 MS Azure 培训(AZ-900 基础知识和 AZ-303 Azure 架构师)时注意到,练习是在 Azure CLI 中完成的。当然,它们都是“复制并粘贴此代码”,但似乎 MS 更喜欢 CLI 而不是 PowerShell,至少出于培训目的。

更新:我最近在使用代理后的 Azure CLI 时遇到了很多麻烦。 PowerShell 没有任何问题。作为习惯使用 PowerShell 的人,CLI 有点笨拙。也就是说,Terraform 需要 Azure CLI,因此这可能是考虑它的充分理由。

您不必在 Linux 上使用 Azure CLI,您也可以在 Windows 上使用它并且效果很好 =D

我个人认为这取决于你想做什么。我更喜欢使用 Azure CLI 命令而不是 Azure CMDLETS。但我仍在使用 PowerShell 作为我的脚本编程语言。

CLI 上的某些模块比 AZ 或 AzRM cmdlet 更“直接”。

两者都更可取,因为我们可以使用它们中的任何一个来编写脚本。对于 Powershell 或 Azure CLI,您需要下载软件才能编写脚本,但 Powershell 更受青睐,因为它是 Microsoft 的内置工具。但我也注意到,如果我们将它与命令提示符进行比较,通过 Powershell 发出命令会更加复杂。

MS 就此主题发表了一篇 article,摘录如下:

Feature parity for Azure services doesn't always exist between Azure CLI and Azure PowerShell.

When picking the right tool, consider your past experience and current work environment.

If you work primarily with Windows systems, Azure PowerShell is a natural fit. Commands follow a verb-noun naming scheme and data is returned as objects. If you work primarily with Linux systems, Azure CLI feels more natural.

Choose the tool that uses your experience and shortens your learning curve.

由于这是社区中的一个常见问题,最近在文档中添加了一篇介绍各种 Azure 命令行选项之间的异同和细微差别的文章:Choose the right Azure command-line tool。该文档也应该可以回答您的大部分问题。

在管理 Azure 时,您有多种选择。尽管 Azure CLI, Azure PowerShell, and Azure Cloud Shell 具有重叠的功能,但每个的操作方式不同,而且语言有时会与环境混淆。

Azure CLI 与 Azure PowerShell: Azure CLI 和 Azure PowerShell 是命令行工具,可让您创建和管理 Azure 资源。虽然 两者 都是跨平台的并且可以安装在 Windows、macOS 和 Linux 上,但 Azure CLI 在 Windows PowerShell、Cmd 或 Bash 和其他 Unix shells,而 Azure PowerShell 需要 Windows 功率Shell 或功率Shell.

不同的Shell环境: Windows PowerShell、PowerShell、Cmd 和 Bash 是 shell 环境。您的 shell 环境不仅决定了您可以使用哪些工具,还改变了您的命令行体验。

Shell Environment | Azure CLI | Azure PowerShell |
------------------|-----------|------------------|
Cmd               | Yes       |                  |
Bash              | Yes       |                  |
Windows PowerShell| Yes       | Yes              |
PowerShell        | Yes       | Yes              |

不一定总是需要使用 Azure 命令行工具,但拥有它是一项有用的技能。以下是选择命令行工具时要记住的几个关键因素:

  • 选择合适的工具时,请考虑您过去的经验和当前的工作环境。
  • Azure CLI 语法类似于 Bash 脚本。如果您主要使用 Linux 系统,Azure CLI 感觉更自然。
  • Azure PowerShell 是一个 PowerShell 模块。如果您主要使用 Windows 系统,那么 Azure PowerShell 是再合适不过的选择。命令遵循动词-名词命名方案,数据作为对象返回。
  • 请记住,Azure CLI 和 Azure PowerShell 之间并不总是存在 Azure 服务的功能奇偶校验。
  • 选择可利用您的经验并缩短学习曲线的工具。必要时使用不同的工具。