【问题标题】:How to get ResourceId of VM script is running on in Azure with PowerShell?如何使用 PowerShell 获取正在 Azure 中运行的 VM 脚本的 ResourceId?
【发布时间】:2020-04-29 22:40:17
【问题描述】:

我正在编写一个脚本来在 Azure 中设置警报,我想通过 Azure 中的自定义脚本扩展来运行它,但运行 Add-AzureRmMetricAlertRule 所需的参数之一仍然是 TargetResourceId,它是应配置警报的 VM。

所以现在我想知道 - 如何使用 PowerShell 获取当前 VM 的 ResourceId?

我尝试的一切都假设我有一个 ResourceName 或者我遍历订阅中的 VM 列表,而我感兴趣的是运行脚本的特定实例。

【问题讨论】:

标签: powershell azure


【解决方案1】:

Azure 有一个类似于 AWS/GCE 提​​供的instance metadata service。您应该能够执行以下操作:

卷曲:

curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2019-11-01"

PowerShell:

(Invoke-RestMethod "http://169.254.169.254/metadata/instance?api-version=2019-11-01" -Headers @{Metadata = $true})

从服务器获取实例元数据。

请注意,在上面的 PowerShell 示例中,Invoke-RestMethod 会自动将 JSON 响应转换为 PowerShell 对象类型。

这里请求/讨论了此功能:https://feedback.azure.com/forums/216843-virtual-machines/suggestions/6204911-provide-virtual-machine-instance-metadata-support

【讨论】:

    【解决方案2】:

    如果我的理解是正确的,你可以使用下面的命令来获取VM的资源ID。

    (get-azurermvm -ResourceGroupName shuihv -Name shui).id
    

    此外,如果您知道 VM 的资源组名称和 VM 名称,您也可以构建 id。格式应如下所示:

    /subscriptions/<subscription id>/resourceGroups/<group name>/providers/Microsoft.Compute/virtualMachines/<vm name>
    

    更新:

    如前所述,您可以使用Azure metadata 来获取虚拟机的名称。根据 VM 的名称,您可以使用 Azure PowerShell 获取 VM 的资源组名称。

     $vm=get-azurermvm |Where-Object {$_.Name -eq "shui"}
    
    $vm.ResourceGroupName
    

    然后你可以构造资源ID。

    【讨论】:

    • 谢谢,正如问题中所述 - 我同意当您知道 VM 的 ResourceName 时 - 获取 ResourceId 很容易。但是如果 ResourceName 未知怎么办?
    • @LechMigdal 正如 Mark Wragg 所说,您可以使用 curl -H Metadata:True "http://169.254.169.254/metadata/instance?api-version=2017-04-02&amp;format=json" | jq . 获取 VM 的名称和其他信息,但目前您无法使用它获取 VM 的资源组名称。如果可能,您可以使用循环根据 VM 的名称获取 VM 的资源组名称。 `
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多