如何在PowerShell中捕获cli.azure.cli.core.azclierror:ResourceNotFou



当我试图从密钥库中提取不存在的密钥时,我得到:

msrest.exceptions:(KeyNotFound(带有(name/id(keyname的键在这个钥匙库中找不到。如果您最近删除了此密钥可以使用正确的恢复命令进行恢复。寻求帮助解决此问题,请参阅https://go.microsoft.com/fwlink/?linkid=2125182cli.azure.cli.core.azclierror:ResourceNotFoundError:(KeyNotFound(A在此密钥保管库中找不到具有(name/id(keyname的密钥。如果您最近删除了此密钥,您可以使用正确的恢复命令。有关解决此问题的帮助,请参阅https://go.microsoft.com/fwlink/?linkid=2125182

我预计会有这个错误,但只有这个错误,所以我不想创建try-catch来捕获所有内容。然而,我在文档中找不到ResourceNotFound的完整标识符,我的意思是使用名称空间。在哪里我可以找到能够捕捉这个异常:

try {} catch [ResourceNotFoundError]{}

Az不是PowerShell命令,所以我不确定try/catch是否有效。

您可以做的是捕获变量中的输出,然后在继续之前检查错误。

也许类似于:

$GetKeyResult = az keyvault key show --name NoSuchKey --vault-name MyVault 2>&1
if ($GetKeyResult -like '*ResourceNotFoundError: (KeyNotFound)*') {
"Key wasn't found"
# Do stuff
}

2>&1部分用于将错误重定向到标准输出。

另一种选择是跳过az命令,使用类似Get-AzKeyVaultKey的PowerShell CmdLet,不幸的是,这在无效的Keyname上根本不会出错,所以你仍然需要检查它:

$GetKeyResult = Get-AzKeyVaultKey -VaultName MyVault -Name NoSuchKey
if ($null -eq $GetKeyResult) {
"Key wasn't found"
# Do stuff
}

在我的案例中,当数据库不存在时,我在运行az-sql-db-show时不断收到错误。脚本的语法似乎因本地Windows PC和管道而异。也许我的版本不匹配。无论如何,这么简单的事情不应该花这么长时间,也不应该这么难弄清楚。根据以下参考资料,这在网上没有很好的记录。

看起来这个技巧是在本地添加";2>nul";并且在Azure CLI管道上"|ConvertFrom Json";。注意:使用2>local上的nul实际上在.sh脚本所在的同一目录中创建了一个名为nul的文件。

本地机器代码:

dbStatus=$(az sql db show -g myRGname -s myServerName -n myDBName --query "status" 2>nul)
if [[ $dbStatus == '"Online"' ]]; then
echo "It is online"
fi

Azure管道代码:

$dbStatus1=$(az sql db show -g myRGname -s myServerName -n myDBName --query "status" | ConvertFrom-Json)
if($LastExitCode = "0")
{
$dbStatus2=$(az sql db show -g myRGname -s myServerName -n myDBName --query "status")
if ($dbStatus2 = "Online")
{
echo "It is online"
}
}

参考文献:

  1. https://devopsjournal.io/blog/2019/07/12/Azure-CLI-PowerShell
  2. 什么是>nul 2>amp;批处理语句中的1个平均值
  3. https://towardsdev.com/how-to-suppress-warnings-and-errors-messages-in-azure-cli-34cece53591c

相关内容

  • 没有找到相关文章

最新更新