我正在尝试做一个返回计算机状态的Runbook / Webhook。我最后注意到的是
Get-AzureRmVM
仅返回2个资源组。哪里
Get-AzureRmResource
返回更多,但不是全部返回! 我对我的资源组名称有把握,但是仍然说找不到资源组“ groupName”。当我尝试使用特定名称运行
Get-AzureRmVM -ResourceGroupName groupName
虽然我的其他启动和停止运行手册都可以正常工作,但是我很困惑,我看不到两组之间的区别。
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."
}
答案 0 :(得分:0)
因为您的资源组位于不同的订阅中。
如@ et3rnal所述,
我有2个订阅,并且Get-AzureRmVM仅返回2个虚拟机,因为其余的都是经典的。我在这个运行手册中创建的自动化帐户是另一个帐户,我可以在概述中看到它吗?与其他订阅中用于启动/停止机器的机器相同!
更新:
如果要获取虚拟机的PowerState
,可以尝试以下命令,在您的情况下,只需将其放入循环中即可,$PowerState
是PowerState。
$status = Get-AzureRmVM -Name <VM Name> -ResourceGroupName <Resource Group Name> -Status
$PowerState = ($status.Statuses | Where-Object {$_.Code -like "PowerState/*"}).DisplayStatus
Update2 :
1。对于经典VM,我们需要使用azure ASM powershell module
命令,您可以尝试Get-AzureVM
,也许在该链接中的Example 3: Display a table of virtual machine statuses
会有所帮助。
2。另一种选择是将经典VM(ASM)迁移到ARM,然后使用ARM命令Get-AzureRmVM
。
参考文献: