0

我正在尝试做一个返回机器状态的运行手册/webhook。我终于注意到的是

Get-AzureRmVM

仅返回 2 个资源组。在哪里

Get-AzureRmResource

确实返回更多但不是全部再次返回!我确定我的资源组名称,但它仍然说找不到资源组'groupName'。当我尝试使用特定名称运行时

 Get-AzureRmVM -ResourceGroupName groupName

虽然我的其他启动和停止运行手册工作得很好,但我很困惑,我看不出组之间的区别。

PS:我正在使用 Azure 运行方式连接

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."
}
4

1 回答 1

0

因为您的资源组位于不同的订阅中。

正如@et3rnal 提到的,

我有 2 个订阅,而 Get-AzureRmVM 仅返回 2 个 vm,因为其余的都是经典。我在其中创建此 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.对于经典的VM,我们需要使用azureASM powershell module命令,你可以试试Get-AzureVM,可能Example 3: Display a table of virtual machine statuses那个链接会有所帮助。

2.另一种选择是将经典VM(ASM)迁移到ARM,然后使用ARM命令Get-AzureRmVM

参考:

于 2018-11-09T14:03:59.457 回答