Write-Host Write-Host "[情報]Azure VM の状態" -ForeGroundColor Cyan Write-Host # アクセストークンの取得 $clientid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" $clientsecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" $subscriptionid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" $tenantid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" $resource = "https://management.azure.com/" $tokenendpoint = "https://login.microsoftonline.com/$tenantid/oauth2/token" $body = @{ grant_type = "client_credentials" resource = $resource client_id = $clientid client_secret = $clientsecret } $tokenresponse = Invoke-RestMethod -Method Post -Uri $tokenendpoint -Body $body -ContentType "application/x-www-form-urlencoded" $accesstoken = $tokenresponse.access_token # Azure VMの一覧 # Azure REST API: Virtual Machines - List # https://learn.microsoft.com/en-us/rest/api/compute/virtual-machines/list # GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2025-04-01 $headers = @{ 'Authorization' = "Bearer $accesstoken" 'Content-Type' = 'application/json' } $requesturi = "https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Compute/virtualMachines?api-version=2024-07-01" $ret = (Invoke-RestMethod -Uri $requesturi -Headers $headers -Method Get) $vms = $ret.value | ForEach-Object { [pscustomobject]@{ Name = $_.name id = $_.id } } # VMの状態の取得 # Azure REST API: Virtual Machines - Instance View # https://learn.microsoft.com/en-us/rest/api/compute/virtual-machines/instance-view # GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView?api-version=2025-04-01 $results = foreach ($vm in $vms) { $requesturi = "https://management.azure.com$($vm.id)/instanceView?api-version=2025-04-01" $ret = Invoke-RestMethod -Uri $requesturi -Headers $headers -Method Get $ps = $ret.statuses | Where-Object { $_.code -like 'PowerState/*' } | Select-Object -First 1 [pscustomobject]@{ Name = $vm.Name PowerState = $ps.code DisplayStatus= $ps.displayStatus } } $results