Azure Webhook получить статус виртуальной машины
Я пытаюсь сделать runbook/webhook, которые возвращают статус машины. В конце концов я замечаю, что
Get-AzureRmVM
возвращает только 2 группы ресурсов. куда
Get-AzureRmResource
Возвращает много больше, но не все из них снова! Я уверен в своем имени группы ресурсов, но все равно в нем говорится, что группа ресурсов 'groupName' не найдена. когда я пытаюсь запустить с конкретным именем
Get-AzureRmVM -ResourceGroupName groupName
В то время как мой другой стартовый и стартовый модуль Runbook работает просто отлично, я не понимаю разницу между группами.
PS: я использую Azure Run As Connection
param
(
[Parameter (Mandatory = $false)]
[object] $WebhookData
)
if ($WebhookData) {
$vms = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
Write-Output "Authenticating to Azure with service principal and certificate"
$ConnectionAssetName = "AzureRunAsConnection"
Write-Output "Get connection asset: $ConnectionAssetName"
$Conn = Get-AutomationConnection -Name $ConnectionAssetName
if ($Conn -eq $null)
{
throw "Could not retrieve connection asset: $ConnectionAssetName. Check that this asset exists in the Automation account."
}
Write-Output "Authenticating to Azure with service principal."
Add-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint | Write-Output
# Start each virtual machine
foreach ($vm in $vms)
{
$vmName = $vm.Name
Write-Output "Checking $vmName"
$vmstatus = Get-AzureRmVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroup -Status# | Select-Object -ExpandProperty StatusesText | ConvertFrom-Json
#select code index and convert to $vmpowerstate
$vmPowerState = $vmstatus#[1].Code
#Write-Output "Resource Group: $vmResourceGroupName", ("VM Name: " + $VM.Name), "Status: $VMStatusDetail" `n
Write-Output ("VM Name: " + $vmName), "Status: $vmPowerState" `n
}
}
else {
write-Error "This is webhook only."
}
1 ответ
Потому что ваши группы ресурсов находятся в разных подписках.
Как уже упоминалось @et3rnal,
У меня есть 2 подписки, и Get-AzureRmVM возвращает 2 vms только потому, что остальные классические. Учетная запись автоматизации, в которой я создал этот runbook, является другой, и я вижу это в обзоре? его я использую для запуска / остановки машин в другой подписке!
Обновление:
Если вы хотите получить PowerState
виртуальной машины, вы можете попробовать команду ниже, в вашем случае, просто поместите ее в цикл, $PowerState
это PowerState.
$status = Get-AzureRmVM -Name <VM Name> -ResourceGroupName <Resource Group Name> -Status
$PowerState = ($status.Statuses | Where-Object {$_.Code -like "PowerState/*"}).DisplayStatus
Обновление 2:
1.Для классической ВМ нам нужно использовать лазурь ASM powershell module
команда, вы могли бы попробовать Get-AzureVM
может быть Example 3: Display a table of virtual machine statuses
по той ссылке поможет.
2. Другой вариант - перенести классическую виртуальную машину (ASM) в ARM, а затем использовать команду ARM. Get-AzureRmVM
,
Рекомендации: