Powershell和Cloudshell上的Get-AzSnapshot问题

时间:2020-04-27 18:58:13

标签: azure powershell az azure-vm

Get-AzSnapshot表现出一些奇怪的行为。

Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName

第一个问题:上面的命令给出了一个错误:

Resource group 'xxx' could not be found. ErrorCode: ResourceGroupNotFound ErrorMessage: Resource group
     | 'xxx' could not be found. ErrorTarget:  StatusCode: 404 ReasonPhrase: Not Found 

,但是在该命令之前和之后有一个列出资源组的命令,它可以正确执行。

显然,问题在于它无法找到快照,而是归咎于RG。

第二期。仅执行Get-AzSnapshot时,不会列出门户网站上列出的快照。这不是正确订阅中的问题,因为其他订阅中有诸如az group list之类的其他命令。订阅的更多内容已强制加载az account set --subscription c56e18b5–xxx

1 个答案:

答案 0 :(得分:0)

第一期

当资源组无效或未找到时,我只能使用Get-AzSnapshot重现您的错误,这将返回ErrorCode: ResourceGroupNotFound。如果您提供了正确的资源组,但是快照名称无效,则将获得ErrorCode: ResourceNotFound。我会仔细检查您尝试访问的资源组是否确实存在。

如果您要确保如果资源组不存在,则不要运行Get-AzSnapshot,如果发生以下情况,我将使用-ErrorVariable添加一个错误变量来存储错误结果: Get-AzResourceGroup。错误结果存储为System.Collections.ArrayList类型,因此我们可以简单地检查找到的错误是否大于零。您可以运行$resourceGroupError.GetType().FullName以获取完整的类型名称。如果找不到资源组,我们也可以使用-ErrorAction SilentlyContinue来抑制Get-AzResourceGroup的错误。

$resourceGroupName = "demo-RG"
$snapshotName = "demo-snapshot"

# First get resource group
Get-AzResourceGroup -Name $resourceGroupName -ErrorVariable resourceGroupError -ErrorAction SilentlyContinue

if ($resourceGroupError.Count -gt 0)
{
    # ResourceGroup doesn't exist
    # Don't get snapshot
    Write-Host "Cannot find $resourceGroupName resource group"
}
else
{
    # ResourceGroup exist
    # Can get snapshot
    Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
}

第二期

如果运行az group listGet-AzResourceGroup,将仅列出

当前活动订阅中的资源组。因此,如果快照在特定的订阅中,并且当前未设置为该订阅,则需要使用az account set --subscription切换到该特定的订阅。对于Azure PowerShell,建议使用此method将上下文切换到活动订阅。