如何通过Azure RM PowerShell或API获取Azure虚拟机的创建者信息
获取Azure虚拟机创建者信息的正确方法
你提到的Get-AzureRmVM cmdlet和Compute资源API确实不会直接返回VM的创建者信息——这类元数据并不存储在VM的核心资源属性里。要获取创建者信息,你需要查询Azure活动日志(Activity Log):VM创建事件会被完整记录在这里,其中包含发起操作的用户ID、邮箱或服务主体信息。
使用Azure RM PowerShell获取
你可以用Get-AzureRmLog cmdlet筛选目标VM的创建事件,具体命令如下:
# 替换为你的实际参数 $subscriptionId = "your-subscription-id" $resourceGroupName = "your-resource-group" $vmName = "your-vm-name" # 切换到目标订阅 Select-AzureRmSubscription -SubscriptionId $subscriptionId # 查询VM创建事件(取最早的一条写入事件即为创建操作) Get-AzureRmLog -ResourceGroupName $resourceGroupName ` -ResourceName $vmName ` -ResourceType "Microsoft.Compute/virtualMachines" ` -OperationName "Microsoft.Compute/virtualMachines/write" ` | Sort-Object EventTimestamp | Select-Object -First 1 ` | Format-List EventTimestamp, OperationName, Caller, CorrelationId
执行后,Caller字段就是VM的创建者信息(可能是用户邮箱、Azure AD用户ID或服务主体ID)。
如果你已经迁移到Az模块(微软推荐的最新模块),可以用Get-AzLog,语法几乎一致:
Get-AzLog -ResourceGroupName $resourceGroupName ` -ResourceName $vmName ` -ResourceType "Microsoft.Compute/virtualMachines" ` -OperationName "Microsoft.Compute/virtualMachines/write" ` | Sort-Object EventTimestamp | Select-Object -First 1 ` | Format-List EventTimestamp, OperationName, Caller, CorrelationId
使用Azure REST API获取
调用活动日志的API来筛选目标事件,请求URL如下(替换占位符):
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '2023-01-01T00:00:00Z' and eventTimestamp le '2023-12-31T23:59:59Z' and resourceGroupName eq '{resourceGroupName}' and resourceName eq '{vmName}' and resourceType eq 'Microsoft.Compute/virtualMachines' and operationName eq 'Microsoft.Compute/virtualMachines/write'
在返回的JSON响应中,properties.caller字段即为创建者信息。
注意事项
- 活动日志的保留期为90天,如果VM创建时间超过90天,可能无法查询到对应的创建事件。
- 你需要拥有Monitoring Reader、Reader或更高权限的角色,才能读取活动日志内容。
内容的提问来源于stack exchange,提问作者T.Radius
相关产品推荐
相关产品推荐

