Проблемы Get-AzSnapshot для powershell и cloudhell - PullRequest
2 голосов
/ 27 апреля 2020

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 голосов
/ 28 апреля 2020

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

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

...