Получите PowerState виртуальной машины Azure в C#/dotnet с помощью Azure.ResourceManager.

Я хочу получить PowerState (включение/выключение/перезапуск и т. д.) известного экземпляра виртуальной машины Azure в приложении C#/dotnet с помощью Azure.ResourceManager (не PowerShell, не CLI, не REST, не используя какой-либо устаревший подход Fluent).

Я могу успешно сделать это с помощью REST, поэтому я знаю, что базовые данные VM InstanceView существуют, но для этого приложения REST не пройдет проверку.

Я использую следующий код; vm.Data.Name возвращается, как и ожидалось, но я получаю нулевые ответы от InstanceView.Statuses.

Мне не удалось найти никакой полезной документации MSFT, кроме старых, устаревших подходов.

Кто-нибудь знает, как получить PowerState через Azure.ResourceManager или почему я возвращаю NULL?

Спасибо!!

[пример кода обновлен ниже 16.01.23, изменен подход к аутентификации, InstanceView по-прежнему возвращает NULL]

      using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Compute;
using Azure.ResourceManager.Compute.Models;
using Azure.ResourceManager.Resources;

namespace Test
{
    public class Program
    {
        public static async Task ListAllVms()
        {
            ArmClient armClient = new ArmClient(new DefaultAzureCredential());
            SubscriptionResource subscription = await armClient.GetDefaultSubscriptionAsync();
            string rgName = "redacted";
            ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync(rgName);
            VirtualMachineCollection vmCollection = resourceGroup.GetVirtualMachines();
            AsyncPageable<VirtualMachineResource> response = vmCollection.GetAllAsync();
            
            await foreach (VirtualMachineResource vm in response)
            {
                Console.WriteLine(vm.Data.Name);
                foreach (InstanceViewStatus istat in vm.Data.InstanceView.Statuses)
                {
                    Console.WriteLine("\n  code: " + istat.Code);
                    Console.WriteLine("  level: " + istat.Level);
                    Console.WriteLine("  displayStatus: " + istat.DisplayStatus);
                }
            }
        }

        public static async Task Main(string[] args)
        {
            await ListAllVms();
        }
    }
}

1 ответ

Принятый выше ответ был почти готов, но мне пришлось изменить код на:

vm.Get(InstanceViewType.InstanceView).Value.Data.InstanceView.Statuses[1].DisplayStatus

Надеюсь, это кому-то поможет.

Другие вопросы по тегам