You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure资源Graph查询无法获取创建人信息,求修正方案

问题描述

我有一段Azure Graph查询,能正确筛选出无备份的指定类型Azure资源,但createdBy字段为空,无法获取创建资源的用户信息,希望有人帮忙修改查询以返回该字段。

初始查询代码

$startTime = [datetime]::UtcNow.AddHours(-$ThresholdHours).ToString('o')

$searchAzGraphSplat = @{
        Query = "
        resources
        | where type in (
            'microsoft.compute/virtualmachines',
            'microsoft.storage/storageaccounts/fileServices/shares',
            'microsoft.compute/disks',
            'microsoft.sql/servers/databases'
        )
        | extend backupPolicy = properties.backupPolicyId,
                  createdBy = coalesce(tostring(properties.createdBy.userPrincipalName), tostring(identity.principalId))
        | extend timeCreated = todatetime(properties.timeCreated)
        | where timeCreated > todatetime('$startTime')
        | where isnull(backupPolicy) or backupPolicy == ''
        | project name, type, location, resourceGroup, subscriptionId, timeCreated, createdBy
        "
    }


$result = @()
do {
    $response = Search-AzGraph @searchAzGraphSplat
    $searchAzGraphSplat['SkipToken'] = $response.SkipToken
    if ($response.Data) {
        $result += $response.Data
    }
} while ($response.SkipToken)

编辑更新:新版本代码

Try {


    $startTime = [datetime]::UtcNow.AddHours(-$ThresholdHours).ToString('o')


    $query = @'
resources
| where type in (
    'microsoft.compute/virtualmachines',
    'microsoft.storage/storageaccounts/fileServices/shares',
    'microsoft.compute/disks',
    'microsoft.sql/servers/databases'
)
| extend timeCreated = todatetime(coalesce(
    properties.timeCreated,
    properties.creationDate))
| where timeCreated > todatetime('{0}')
    and isempty(properties.backupPolicyId)
| join kind = leftouter (
    resourcechanges
    | where properties.changeType == 'Create'
    | extend createdTime = todatetime(properties.changeAttributes.timestamp)
    | where createdTime > todatetime('{0}')
    | project
        resourceId = tostring(properties.targetResourceId),
        createdBy = tostring(properties.changeAttributes.changedBy),
        createdByType = tostring(properties.changeAttributes.changedByType)
) on $left.id == $right.resourceId
| project
    name, type, location, resourceGroup,
    subscriptionId, timeCreated, createdBy, createdByType
'@ -f $startTime

$searchAzGraphSplat = @{ Query = $query }
$result = do {
    $response = Search-AzGraph @searchAzGraphSplat
    $searchAzGraphSplat['SkipToken'] = $response.SkipToken
    if ($response.Data) { $response.Data }
}
while ($response.SkipToken)
}

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:57:43