Проблемы с Get-AzSnapshot в powershell и cloudshell

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


person Blue Clouds    schedule 27.04.2020    source источник


Ответы (1)


Первый выпуск

Я могу воспроизвести вашу ошибку только с помощью 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 list или Get-AzResourceGroup. Поэтому, если ваш моментальный снимок находится в определенной подписке, и вы в настоящее время не настроены на эту подписку, вам нужно переключиться на эту конкретную подписку с помощью az account set --subscription. Для Azure PowerShell я предлагаю переключить контексты на вашу активную подписку с помощью этого метод.

person RoadRunner    schedule 28.04.2020