所以我一直在用资源管理api对只读api访问azure。现在我专注于虚拟机。我一直在使用TokenCredentials的这个预发布包:
https://www.nuget.org/packages/Microsoft.Azure.Management.Compute/13.0.1-prerelease
我得到了一大堆关于我的虚拟机的丰富信息,但是我错过了一个非常好的批评数据,那就是vm是打开还是关闭。当我预计它们被填充时,我发现了一些元数据属性,比如InstanceView和Plan为null。这可能是因为我推出了我的vms,它可能是一个未完成或有缺陷的新包装,我无法分辨。我在想InstanceViews的雕像会告诉我vm的状态。
所以我想我必须到别处去看看。我确实找到了这个旧的stackoverflow问题,这可能是我正在寻找的:
azure management libraries virtual machine state
但是我不确定这个GetAzureDeyployment是什么dll,或者它甚至是TokenCredential兼容的。有谁知道什么?
答案 0 :(得分:1)
您可以使用以下c#代码获取VM的电源状态。
using System;
using System.Security;
using Microsoft.Azure.Management.Compute;
using Microsoft.Azure.Management.Compute.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest;
namespace GetVmARM
{
class Program
{
private static String tenantID = "<your tenant id>";
private static String loginEndpoint = "https://login.windows.net/";
private static Uri redirectURI = new Uri("urn:ietf:wg:oauth:2.0:oob");
private static String clientID = "1950a258-227b-4e31-a9cf-717495945fc2";
private static String subscriptionID = "<your subscription id>";
private static String resource = "https://management.core.windows.net/";
static void Main(string[] args)
{
var token = GetTokenCloudCredentials();
var credential = new TokenCredentials(token);
var computeManagementClient = new ComputeManagementClient(credential);
computeManagementClient.SubscriptionId = subscriptionID;
InstanceViewTypes expand = new InstanceViewTypes();
var vm = computeManagementClient.VirtualMachines.Get("<the resource group name>", "<the VM>", expand);
System.Console.WriteLine(vm.InstanceView.Statuses[1].Code);
System.Console.WriteLine("Press ENTER to continue");
System.Console.ReadLine();
}
public static String GetTokenCloudCredentials(string username = null, SecureString password = null)
{
String authString = loginEndpoint + tenantID;
AuthenticationContext authenticationContext = new AuthenticationContext(authString, false);
var promptBehaviour = PromptBehavior.Auto;
var userIdentifierType = UserIdentifierType.RequiredDisplayableId;
var userIdentifier = new UserIdentifier("<your azure account>", userIdentifierType);
var authenticationResult = authenticationContext.AcquireToken(resource, clientID, redirectURI, promptBehaviour, userIdentifier);
return authenticationResult.AccessToken;
}
}
}
正如您在这段代码中所看到的,我使用的是文档中没有的InstanceViewTypes。这是13.0.1预发布版本中的新功能。但是,如果您将此添加到您的computeManagementClient.VirtualMachines.Get方法,您将能够获得VM的额外信息。
此外,我使用的是vm.InstanceView.Statuses [1],因为vm.InstanceView.Statuses [0]是ProvisioningState。并且,我不确定订单是否总是这样,所以您可能需要遍历整个状态列表。