如何检查 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 很可能会失败。
我正在尝试使用 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 很可能会失败。