无法准确理解Azure CLI在Windows环境中的优点。
它是为想要从Linux环境管理Azure IAAS的用户而设计的吗?
我认为Powershell core将成为非Windows管理员的途径。 PowerShell Core不会在所有平台上良好地移植,以服务于跨平台受众吗?
简而言之,学习Azure CLI是否值得?
无法准确理解Azure CLI在Windows环境中的优点。
它是为想要从Linux环境管理Azure IAAS的用户而设计的吗?
我认为Powershell core将成为非Windows管理员的途径。 PowerShell Core不会在所有平台上良好地移植,以服务于跨平台受众吗?
简而言之,学习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上使用。
它是面向想要从Linux环境管理Azure IAAS的受众吗?
我认为答案是肯定的。对于Linux或Mac开发人员来说,他们更有可能使用Azure CLI。
Azure CLI和PowerShell包都使用Azure的REST API。
正如我们的一位微软联系人所说:使用你喜欢和偏好的任何工具。
Azure CLI的一些优点包括:
目前PowerShell有一个非常大的优势:在Azure上有一个巨大的PowerShell脚本示例库。但是:通常你必须自己去适应你的需求-因此示例可能是一个很好的起点-有时从头开始更容易。
我的建议是:使用Azure CLI->对于脚本编写,请使用公司熟悉的语言。
$t = Get-AzEventGridTopic ... ; $endpoint = $t.Endpoint
。如果使用Azure CLI,则需要解析字符串才能实现相同的效果。 - Monsignor$t = (az {your options} | ConvertFrom-Json)
来实现。这更像是支持 bash VS. pwsh 的一个论点。 - minus one我想分享一下我使用 Azure Cli 和 Az PowerShell 的经验。
截至2019年,两者都是跨平台的,因此应该只是语言/语法偏好问题,但使用 Azure Cli 可以实现所有/大多数命令具有幂等性。
我最终用 Azure Cli 脚本替换了所有 ARM 模板,因为它不啰嗦且易于阅读。
对于 Az Powershell,您仍需要在创建资源之前检查其是否存在,否则会抛出异常,因此脚本可能会变得非常复杂而毫无意义。
我们在 Azure DevOps 中同时使用 Azure Cli 和 Az Powershell。Azure Cli 命令现在可以从 bash(Linux)或 bat(Windows)脚本中执行。所以这并不是最优...(编辑2020现在你也可以使用 Powershell 脚本运行 Azure CLI)
编辑2021
通过新的Azure Bicep,我开始重新使用“ARM 类型”的部署:如果您理解 ARM 模板并保持可读性,Bicep 非常容易使用,即使在复杂的部署中也很清晰。
除了 Az CLI(Powershell core),它可以处理我需要执行的大多数脚本。
PowerShell 相对于 CLI 具有一些显著的优势:
在 PowerShell 中几乎没有我不能编写脚本的内容,而在 CLI 中我可以做一些事情,但不能做其他事情。我的 PowerShell 技能已经保持了10多年的相关性,我一直在进行企业级 SharePoint、Dynamics、现在是 Office 和 Azure 的工作... 所以我有偏见。
bash
不是Azure Functions支持的语言。我还要强调一下,PowerShell是一个非常强大的跨平台脚本语言,具有对象级别的管道处理能力。 - minus one2018年之前,非Windows平台上没有Powershell。自2018年1月开始,Powershell可在MacOS和Linux平台上使用。
安装Powershell的说明适用于MacOS或Linux,可以在此处找到。
PowerShell也是开源的。微软刚刚发布了PowerShell Azure Az模块(2018年12月),它使用了.Net core。因此,它可以在Linux、Mac OS和Windows上运行。如果喜欢,Linux开发人员仍然可以使用Azure CLI。
由于这是社区中经常被问到的问题,最近文档中添加了一篇文章,涵盖了各种Azure命令行选项之间的相似性、差异性和细微差别:选择正确的Azure命令行工具。这篇文章应该能回答你大部分的问题。
在管理Azure方面,你有很多选择。虽然Azure CLI、Azure PowerShell和Azure Cloud Shell具有重叠的功能,但每个工具的操作方式不同,并且有时语言也会与环境混淆。
Azure CLI vs Azure PowerShell: Azure CLI和Azure PowerShell都是命令行工具,可让您创建和管理Azure资源。虽然两者都是跨平台的,可在Windows、macOS和Linux上安装,但Azure CLI在Windows PowerShell、Cmd或Bash和其他Unix shell中运行,而Azure PowerShell需要Windows PowerShell或PowerShell。
不同的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命令行工具并不总是必要的,但拥有这种技能是很有用的。在选择命令行工具时,请记住以下几个关键因素:
不一定要在Linux上使用Azure CLI,你也可以在Windows上使用,而且效果非常好=D
我的个人意见是,这取决于你想做什么。我更喜欢使用Azure CLI命令而不是Azure CMDLETS。但是我仍然将PowerShell作为我的脚本编程语言。
CLI中的某些模块比AZ或AzRM cmdlet更加"直接"。
我曾经使用过 Az Powershell 和 cli,但当文档含糊不清或命令不受支持时,我强烈建议跳过这两个工具,直接使用Azure Rest API。
Azure Rest API通常由其他命令行工具调用,因此它最具备功能完整性和一般性的文档。它也是跨平台的。
最困难的部分是弄清楚身份验证。从powershell开始,我通常使用类似于这样的格式,但如果需要,可以转换为curl+cli或放置在Web应用程序中。这里是一个随机示例:
$azContext = Get-AzContext
$subscriptionId = $azContext.Subscription.Id
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
'Content-Type'='application/json'
'Authorization'='Bearer ' + $token.AccessToken
}
$uri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$rg/providers/Microsoft.Web/sites/$site/config/web?api-version=2022-03-01"
$Body = @{
"properties" = @{netFrameworkVersion = "v6.0"}
}
$Params = @{
Uri = $uri
Headers = $authHeader
Method = "PUT"
Body = $Body | ConvertTo-Json -Depth 10
}
$response = Invoke-RestMethod @Params
$response.properties.netFrameworkVersion