gpt4 book ai didi

c# - 使用 Azure.ResourceManager 在 C#/dotnet 中获取 Azure VM PowerState

转载 作者:行者123 更新时间:2023-12-02 06:35:42 27 4
gpt4 key购买 nike

我想使用 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);
}
}
}
}

输出:

enter image description here

关于c# - 使用 Azure.ResourceManager 在 C#/dotnet 中获取 Azure VM PowerState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75116030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com