如何检查 PowerShell 中是否存在 azure 资源?

How to check if azure resource exists in PowerShell?

我正在尝试使用 PowerShell 检查资源组中是否已存在 Azure Key Vault。 如果具有相同名称的保管库已经存在,即使处于已删除状态我只想收到一条用户友好的消息,说明 Key Vault 已经存在或捕获异常(如果有)。我不希望终端因错误而崩溃。如果密钥保管库不存在,我想创建一个新的密钥保管库。

我有以下代码:

$KeyVaultName = "Key Vault Name"
$ResourceGroupName = "Resource group name"

$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue

if($null -eq $KeyVault){
    New-AzKeyVault -ResourceGroupName $ResourceGroupName -VaultName $KeyVaultName -Location "Switzerland North"
}
else{
    Write-Host "$KeyVaultName already exists"
}

执行代码后,我在终端上收到此错误消息:

New-AzKeyVault:同名保管库已存在,处于已删除状态。您需要恢复或清除现有的密钥保管库。

我也尝试使用以下代码:

if (!(Test-AzureName -Service $KeyVaultName))
{  
    New-AzKeyVault -ResourceGroupName $ResourceGroupName -VaultName $KeyVaultName -Location "Switzerland North" 
}

执行后出现以下错误:

Test-AzureName : 未指定默认订阅。使用 Select-AzureSubscription -Default 设置默认订阅。

虽然我只使用了一个订阅。

如果我做错了什么,有人可以告诉我吗?你能给我提供一个有效的方法来实现这个吗?

您可以尝试以下操作:

$KeyVaultName = "keyvaultname"
$ResourceGroupName = "resourcegroupname"
$KeyVaultLocation = "keyvaultlocation"
$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue

if($null -eq $KeyVault){
    $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -Location $KeyVaultLocation -InRemovedState -ErrorAction SilentlyContinue
    if ($null -eq $KeyVault) {
      New-AzKeyVault -ResourceGroupName $ResourceGroupName -VaultName $KeyVaultName -Location $KeyVaultLocation
    } else {
      Write-Host "$KeyVaultName exists but is in soft-deleted state"
    }
}
else{
    Write-Host "$KeyVaultName already exists"
}

本质上,我们在这里所做的是首先检查 Key Vault 是否存在以及是否处于活动状态。如果我们没有找到任何 Key Vault,那么我们将检查 Key Vault 是否处于软删除状态。如果未找到任何结果,那么我们将继续创建新的 Key Vault。

但是,请注意,Key Vault 名称是全局唯一的,因此您的 New-AzKeyVault Cmdlet 很可能会失败。