Powershell

使用 PowerShell 從 VM 內部獲取目前 Azure VM 的詳細資訊

  • December 27, 2020

假設我在 Azure 中預配了一台執行 Windows Server 2016 標準 Azure 映像的虛擬機。

無需在 VM 上安裝任何東西,如何使用 PowerShell 從 VM 內部檢索目前 VM 的詳細資訊?

我想檢索的一些屬性是:

  • 虛擬機名稱
  • 虛擬機 IP 地址
  • 訂閱號
  • 虛擬機位置

我相信這是可能的,因為 Azure 中的 Windows 桌面映像會自動顯示上述大部分資訊。那麼如何通過 PowerShell 以程式方式獲取這些資訊呢?

(像往常一樣,微軟文件辜負了他們毫無價值的聲譽)

任何幫助將不勝感激。

我建議您使用Azure Instance Metadata Service

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri http://169.254.169.254/metadata/instance?api-version=2020-09-01 | ConvertTo-Json

{
   "compute": {
       "azEnvironment": "AZUREPUBLICCLOUD",
       "isHostCompatibilityLayerVm": "true",
       "licenseType":  "Windows_Client",
       "location": "westus",
       "name": "examplevmname",
       "offer": "Windows",
       "osProfile": {
           "adminUsername": "admin",
           "computerName": "examplevmname",
           "disablePasswordAuthentication": "true"
       },
       "osType": "linux",
       "placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
       "plan": {
           "name": "planName",
           "product": "planProduct",
           "publisher": "planPublisher"
       },
       "platformFaultDomain": "36",
       "platformUpdateDomain": "42",
       "publicKeys": [{
               "keyData": "ssh-rsa 0",
               "path": "/home/user/.ssh/authorized_keys0"
           },
           {
               "keyData": "ssh-rsa 1",
               "path": "/home/user/.ssh/authorized_keys1"
           }
       ],
       "publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
       "resourceGroupName": "macikgo-test-may-23",
       "resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
       "securityProfile": {
           "secureBootEnabled": "true",
           "virtualTpmEnabled": "false"
       },
       "sku": "Windows-Server-2012-R2-Datacenter",
       "storageProfile": {
           "dataDisks": [{
               "caching": "None",
               "createOption": "Empty",
               "diskSizeGB": "1024",
               "image": {
                   "uri": ""
               },
               "lun": "0",
               "managedDisk": {
                   "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
                   "storageAccountType": "Standard_LRS"
               },
               "name": "exampledatadiskname",
               "vhd": {
                   "uri": ""
               },
               "writeAcceleratorEnabled": "false"
           }],
           "imageReference": {
               "id": "",
               "offer": "UbuntuServer",
               "publisher": "Canonical",
               "sku": "16.04.0-LTS",
               "version": "latest"
           },
           "osDisk": {
               "caching": "ReadWrite",
               "createOption": "FromImage",
               "diskSizeGB": "30",
               "diffDiskSettings": {
                   "option": "Local"
               },
               "encryptionSettings": {
                   "enabled": "false"
               },
               "image": {
                   "uri": ""
               },
               "managedDisk": {
                   "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
                   "storageAccountType": "Standard_LRS"
               },
               "name": "exampleosdiskname",
               "osType": "Linux",
               "vhd": {
                   "uri": ""
               },
               "writeAcceleratorEnabled": "false"
           }
       },
       "subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
       "tags": "baz:bash;foo:bar",
       "version": "15.05.22",
       "vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
       "vmScaleSetName": "crpteste9vflji9",
       "vmSize": "Standard_A3",
       "zone": ""
   },
   "network": {
       "interface": [{
           "ipv4": {
              "ipAddress": [{
                   "privateIpAddress": "10.144.133.132",
                   "publicIpAddress": ""
               }],
               "subnet": [{
                   "address": "10.144.133.128",
                   "prefix": "26"
               }]
           },
           "ipv6": {
               "ipAddress": [
                ]
           },
           "macAddress": "0011AAFFBB22"
       }]
   }
}

資源圖

Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | limit 1" | ConvertTo-Json -Depth 100

[
 {
   "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/ContosoVM1",
   "kind": "",
   "location": "westus2",
   "managedBy": "",
   "name": "ContosoVM1",
   "plan": {},
   "properties": {
     "hardwareProfile": {
       "vmSize": "Standard_B2s"
     },
     "networkProfile": {
       "networkInterfaces": [
         {
           "id": "/subscriptions/<subscriptionId>/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/contosovm1535",
           "resourceGroup": "MyResourceGroup"
         }
       ]
     },
     "osProfile": {
       "adminUsername": "localAdmin",
       "computerName": "ContosoVM1",
       "secrets": [],
       "windowsConfiguration": {
         "enableAutomaticUpdates": true,
         "provisionVMAgent": true
       }
     },
     "provisioningState": "Succeeded",
     "storageProfile": {
       "dataDisks": [],
       "imageReference": {
         "offer": "WindowsServer",
         "publisher": "MicrosoftWindowsServer",
         "sku": "2016-Datacenter",
         "version": "latest"
       },
       "osDisk": {
         "caching": "ReadWrite",
         "createOption": "FromImage",
         "diskSizeGB": 127,
         "managedDisk": {
           "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
           "resourceGroup": "MyResourceGroup",
           "storageAccountType": "Premium_LRS"
         },
         "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
         "osType": "Windows"
       }
     },
     "vmId": "bbb9b451-6dc7-4117-bec5-c971eb1118c6"
   },
   "resourceGroup": "MyResourceGroup",
   "sku": {},
   "subscriptionId": "<subscriptionId>",
   "tags": {},
   "type": "microsoft.compute/virtualmachines"
 }
]

使用 Run Command 在您的 Windows VM 中執行 PowerShell 腳本,此處有更多詳細資訊

az vm run-command invoke  --command-id RunPowerShellScript --name win-vm -g my-resource-group \
   --scripts @script.ps1 --parameters "arg1=somefoo" "arg2=somebar"

引用自:https://serverfault.com/questions/1047653