簡體   English   中英

Azure CLI 與 Powershell?

[英]Azure CLI vs Powershell?

不能完全理解 Azure CLI 在 Windows 環境中的優點。

它是否針對想要從 Linux 環境管理 Azure IAAS 的受眾?

我認為Powershell 內核將成為非 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。

正如我們的一位 Microsoft 聯系人所說:使用您喜歡和喜歡的任何內容。

Azure CLI 有一些優點:

  1. 開源 - 有很多優點。 未來可能會發展得更快。 您可以查看代碼中的真正內容,社區可能會或將會更大,等等。
  2. Azure CLI 可與 Groovy、Python、Ruby 或任何其他腳本語言一起使用。 與經驗豐富的 PowerShell 開發人員相比,獲得這種語言的優秀開發人員更容易。 例如:因為 Java,我選擇了 Groovy。 使用這種組合比學習 PowerShell 腳本更容易......

目前,PowerShell有一個非常大的好處:Azure 有一個巨大的 PowerShell 腳本示例存儲庫。 但是:通常你必須自己做才能滿足你的要求 - 因此一個例子可能是一個很好的起點 - 有時從頭開始更容易。

我的建議是:使用 Azure CLI --> 對於腳本,使用貴公司熟悉的語言。

只是想補充一下我在 Azure Cli 和 Az PowerShell 方面的經驗。

根據 2019 年,兩者都是跨平台的,因此它應該只是語言/語法首選項,但使用 Azure Cli all/大多數命令都是idempotent

我最終用 Azure Cli 腳本替換了我所有的 ARM 模板,因為它不那么冗長且易於閱讀。

使用 Az Powershell,您仍然需要在創建資源之前檢查資源是否存在,否則它會拋出異常,因此腳本可能會無緣無故變得非常復雜。

我們將 Azure Cli 和 Az Powershell 與 Azure DevOps 結合使用。 現在可以從 bash (Linux) 或 bat (Windows) 腳本執行 Azure Cli 命令。 所以它不是最佳的......(編輯 2020您現在也可以使用 Powershell 腳本運行 Azure CLI)

  • 我們使用 Azure Cli 部署資源,因為它易於閱讀且命令是冪等的。
  • 對於復雜的腳本,我更喜歡使用 PowerShell,因為它有很多有用的語言功能。

編輯 2021

使用新的Azure Bicep ,我已經開始回到“ARM 類型”部署:如果您了解 ARM 模板並且即使在復雜的部署中也保持可讀性,Bicep 真的很容易使用。

除了 Az CLI(Powershell 核心)之外,它還處理我需要做的大部分腳本。

PowerShell 比 CLI 有一些顯着的優勢:

  • PowerShell 是 Azure Functions 的一種語言 因此,您可以輕松編寫模塊或代碼並將其推送到安全的 Azure 函數。 CLI 不是受支持的語言。
  • Azure 自動化 Runbooks 也是如此,而 CLI 不是受支持的語言。
  • 如果您想編排覆蓋本地和雲的混合工作負載,即將服務部署到 Windows Server,然后在 Azure 中部署端點以便與之交互,PowerShell 可以,但 CLI 不能(如果它確實如此,我會感到驚訝) )。
  • 如果您想投資一種可以調用遺留模塊進行管理的語言,PowerShell 可以,但 CLI 不能。
  • 如果您想用 C# 或任何其他語言創建自己的 DLL 並將其合並到您的腳本中。 我不得不對 DLL 進行逆向工程並將它們包裝在 PowerShell 中以合並到業務流程中。
  • 與 CLI 相比,我在使用 PowerShell 擴展 DevOps 管道方面取得了更大的成功。
  • PowerShell 對 Azure 單元和煙霧測試以及大型 Azure 並行部署(除了笨重的 DevOps 並行任務)等場景具有非常好的多線程工作負載支持。 TBH,我不知道 Azure CLI 中的本機多線程。
  • 我可以開發一個模塊,在上述所有場景中使用它,然后將其提供給最終客戶; TBH,我不相信我可以為 CLI 做到這一點(創建一個模塊,對其進行數字簽名,然后 nuget feed 發行版)。

幾乎沒有我沒有在 PowerShell 中編寫腳本的內容,而使用 CLI 我可以做一些事情,但不能做其他事情。 我的 PowerShell 技能在 10 多年來一直保持相關性,我一直在做企業 SharePoint、Dynamics,現在是 Office 和 Azure……所以我有偏見。

在 2018 年之前,Powershell 在非 Windows 平台上不可用。從 2018 年 1 月開始,Powershell 在 MacOS 和 Linux 平台上可用。

此處提供 MacOS 或 Linux 上的 Powershell 安裝說明

PowerShell 也是開源的。 微軟剛剛發布了 PowerShell Azure Az 模塊(2018 年 12 月),它使用 .Net 核心。 所以它可以在 Linux、Mac OS 和 Windows 上運行。 如果願意,Azure CLI 仍然可供 Linux 開發人員使用。

簡而言之,是否值得學習 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 有一篇關於該主題的文章,內容如下:

Azure CLI 和 Azure PowerShell 之間並不總是存在 Azure 服務的功能奇偶校驗。

在選擇正確的工具時,請考慮您過去的經驗和當前的工作環境。

如果您主要使用 Windows 系統,Azure PowerShell 是自然而然的選擇。 命令遵循動詞-名詞命名方案,數據作為對象返回。 如果您主要使用 Linux 系統,Azure CLI 感覺更自然。

選擇能夠利用您的經驗並縮短學習曲線的工具。

由於這是社區中的常見問題,最近在文檔中添加了一篇涵蓋各種 Azure 命令行選項之間的異同和細微差別的文章: 選擇正確的 Azure 命令行工具 該文檔也應該回答您的大部分問題。

在管理 Azure 時,您有很多選擇。 盡管Azure CLIAzure PowerShellAzure Cloud Shell具有重疊的功能,但各自的運作方式不同,而且語言有時會與環境混淆。

Azure CLI 與 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 命令行工具並不總是必要的,但它是一項有用的技能。 以下是選擇命令行工具時要記住的幾個關鍵因素:

  • 在選擇正確的工具時,請考慮您過去的經驗和當前的工作環境。
  • Azure CLI 語法類似於 Bash 腳本的語法。 如果您主要使用 Linux 系統,Azure CLI 感覺更自然。
  • Azure PowerShell 是一個 PowerShell 模塊。 如果您主要使用 Windows 系統,Azure PowerShell 是自然而然的選擇。 命令遵循動詞-名詞命名方案,數據作為對象返回。
  • 請記住,Azure CLI 和 Azure PowerShell 之間並不總是存在 Azure 服務的功能奇偶校驗。
  • 選擇能夠利用您的經驗並縮短學習曲線的工具。 在有意義的情況下使用不同的工具。

我已經使用了 Az Powershel 和 cli,但是當文檔不明確或不支持命令時,我強烈建議您跳過兩者並上游到Azure Rest ZDB974238714CA8A1434A7CE1D08

Azure Rest API 通常由其他命令行工具調用,因此它最終成為功能最完整且通常有據可查的工具。 它也是跨平台的。

最難的部分是弄清楚身份驗證。 從 powershell 開始,我通常使用類似這樣的格式,但如果需要,轉換為 curl+cli 或放置在 webapp 中。 這是一個隨機的例子:

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM