我想使用 Azure.ResourceManager(不是 PowerShell、CLI、REST、不使用任何已弃用的 Fluent)在 C#/dotnet 应用程序中获取已知 Azure VM 实例的 PowerState(开/关/重新启动等)方法)。
我可以使用 REST 成功完成此操作,因此我知道底层 VM InstanceView 数据存在,但对于此应用程序,REST 将无法通过测试。
我正在使用以下代码; vm.Data.Name 按预期返回,但从 InstanceView.Statuses 获得空响应。
除了旧的、已弃用的方法之外,我找不到任何有用的 MSFT 文档。
有谁知道如何通过 Azure.ResourceManager 获取 PowerState,或者为什么我得到 NULL?
谢谢!!
[代码示例于 2023 年 1 月 16 日更新如下,更改了身份验证方法,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();
}
}
}
最佳答案
从我这边复制后,我可以使用 vm.Get().Value.InstanceView().Value.Statuses[1].DisplayStatus
来实现此目的。下面是对我有用的完整代码,其中我列出了资源组中存在的所有虚拟机并获取其状态。
using System;
using System.Threading.Tasks;
using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Compute;
using Azure.ResourceManager.Compute.Models;
using Azure.ResourceManager.Resources;
namespace ConsoleApp1
{
class Program
{
static async Task Main(string[] args)
{
ArmClient armClient = new ArmClient(new InteractiveBrowserCredential(new InteractiveBrowserCredentialOptions() { TenantId = "<YOUR_TENAT_ID>" }));
SubscriptionResource subscriptionResource = await armClient.GetDefaultSubscriptionAsync();
string rgName = "<YOUR_RESOURCE_GROUP>";
ResourceGroupResource resourceGroupResource = await subscriptionResource.GetResourceGroups().GetAsync(rgName);
VirtualMachineCollection vmCollection = resourceGroupResource.GetVirtualMachines();
// Lists all virtual machines
AsyncPageable<VirtualMachineResource> vmList = vmCollection.GetAllAsync();
Console.WriteLine("Listing");
await foreach (VirtualMachineResource vm in vmList)
{
Console.WriteLine(vm.Data.Name);
Console.WriteLine(vm.Get().Value.InstanceView().Value.Statuses[1].DisplayStatus);
}
}
}
}
输出:
关于c# - 使用 Azure.ResourceManager 在 C#/dotnet 中获取 Azure VM PowerState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75116030/