Получите 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
Надеюсь, это кому-то поможет.