将 Azure Powershell 命令转换为 Azure CLI
Posted
技术标签:
【中文标题】将 Azure Powershell 命令转换为 Azure CLI【英文标题】:Converting Azure Powershell commands to Azure CLI 【发布时间】:2020-12-28 03:43:02 【问题描述】:我有一个 Powershell 脚本,它使用 Azure Powershell 更新虚拟机规模集(在 Azure Service Fabric 下),以添加/删除关联的 Service Fabric 虚拟机使用的证书。此脚本按预期工作,我有以下命令(我已删除一些其他逻辑以专注于该问题):
# This gets the Virtual Machine Scale Set object
$virtualMachineScaleSet = Get-Azvmss -ResourceGroupName $myResourceGroupName -VMScaleSetName $myVMScaleSetName
# Example of removing items from certificate items from the VMSS object.
$virtualMachineScaleSet.VirtualMachineProfile.osProfile.Secrets[$mySecretIndex].VaultCertificates.RemoveAt($myCertificateIndexThatIWantToRemove)
# Example of creating new certificate config
$newCertificateUrl = (Get-AzKeyVaultCertificate -VaultName $myKeyvaultName -Name $myCertificateName).SecretId
$newCertificateConfig = New-AzvmssVaultCertificateConfig -CertificateUrl $newCertificateUrl -CertificateStore "My"
# Example of adding new certificate to the VMSS object
$virtualMachineScaleSet.VirtualMachineProfile.OsProfile.Secrets[$mySecretIndex].VaultCertificates.Add($newCertificateConfig)
# Committing the update to VMSS
Update-Azvmss -ResourceGroupName $myResourceGroupName -VirtualMachineScaleSet $virtualMachineScaleSet -VMScaleSetName $myVMScaleSetName
上面的脚本工作正常。但是,我现在正尝试将上述每个命令转换为 Azure CLI。脚本调用的方式意味着我不能在同一个脚本中混合和匹配 Azure Powershell 和 Azure CLI 命令。到目前为止我的命令导致问题:
# This gets me the Virtual Machine Scale Set object
$virtualMachineScaleSet = az vmss show --name $myVMScaleSetName --resource-group $myResourceGroupName | ConvertFrom-Json
# Trying to RemoveAt gives the error: MethodInvocationException: Exception calling "RemoveAt" with "1" argument(s): "Collection was of a fixed size."
$virtualMachineScaleSet.VirtualMachineProfile.osProfile.Secrets[$mySecretIndex].VaultCertificates.RemoveAt($myCertificateIndexThatIWantToRemove)
# Not sure the CLI equivalent commands of this
$newCertificateUrl = (Get-AzKeyVaultCertificate -VaultName $myKeyvaultName -Name $myCertificateName).SecretId
$newCertificateConfig = New-AzvmssVaultCertificateConfig -CertificateUrl $newCertificateUrl -CertificateStore "My"
# Trying to Add gives the error: MethodInvocationException: Exception calling "RemoveAt" with "1" argument(s): "Collection was of a fixed size."
$virtualMachineScaleSet.VirtualMachineProfile.OsProfile.Secrets[$mySecretIndex].VaultCertificates.Add($newCertificateConfig)
所以我的问题是。
-
Azure Powershell 脚本的 CLI 等效命令是什么?
为什么 Azure CLI 脚本中的 VMSS 对象看起来不一样? (至少我无法更改 VaultCertificates 数组)
提前谢谢你
【问题讨论】:
当我使用 Az Powershell 运行$virtualMachineScaleSet.VirtualMachineProfile.osProfile.Secrets[0].VaultCertificates.RemoveAt(0)
时,它显示相同的错误 Exception calling "RemoveAt" with "1" argument(s): "Collection was of a fixed size."
您能否再次确认此 cmd 与 Az Powershell 一起正常工作?
您好,您解决了这个问题吗?如果是,您可以发布答案吗?
这个问题还有更多更新吗?它能解决你的问题吗?
什么原因没有回复?!如果可行,则接受它,如果不可行,请给出问题,这是一个简单的响应。
【参考方案1】:
您使用的所有 PowerShell 都可以转换为两个等效的 CLI 命令。
一个用于删除:
az vmss update --resource-group $myResourceGroupName --name $myVMScaleSetName --remove virtualMachineProfile.osProfile.secrets index
一个用于添加:
az vmss update --resource-group $myResourceGroupName --name $myVMScaleSetName --add virtualMachineProfile.osProfile.secrets '"sourceVault": "id": "resourceId","vaultCertificates": ["certificateStore": null,"certificateUrl": "certificateUrl"]'
【讨论】:
以上是关于将 Azure Powershell 命令转换为 Azure CLI的主要内容,如果未能解决你的问题,请参考以下文章
如何将图像转换为 Base64 字符串,并转换回图像,保存到 azure blob
如何将一组 powershell 命令转换为可以在需要时运行的脚本?
如何使用Powershell脚本获取Azure VM来宾指标(性能计数器)
使用 powershell 将两个 azure blob 合并为单个 blob