0

使用 PowerShell 命令“Search-AzGraph”时,我遇到了一个奇怪的行为(错误?)。

当我使用“Azure Resource Graph Explorer”时,我没有遇到这个问题。

resourcecontainers
 | where type =~ 'microsoft.resources/subscriptions/resourcegroups'
 | join kind=leftouter (resources | project ResourceId=id, ResourceName=name, ResourceType=type, resourceGroup) on resourceGroup

(您可以直接复制粘贴此 KQL 查询到您的 Azure Resource Graph Explorer,它会显示所有 Azure 资源及其 Azure 各自的 subscriptionId

使用“Azure Resource Graph Explorer”,在“project”关键字显示我要查找的列之后,我设置“ResourceId”来显示资源的 Id。它工作正常。我可以看到列名更改的结果。

但是在使用“Search-AzGraph”时,“ResourceId”值包含来自“resourcecontainers”而不是“resources”的值 id。如果我删除“ResourceId=”,我会得到与“Azure Resource Graph Explorer”相同的(正确)结果,但要访问它,我需要使用属性“id1”。这没什么大不了的,但我希望能够使用我自己的命名列。

有没有人有过这种经验,或者我错过了一些东西来获得两种情况下的结果?谢谢

4

1 回答 1

1

我终于找到了解决方法:

resourcecontainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| join kind=leftouter (resources | project ResourceId=id, ResourceName=name, ResourceType=type, resourceGroup) on resourceGroup
| project ResourceGroupId=id, ResourceId, ResourceGroupName=name, ResourceName, tags

我在“加入”之后添加了一个“项目”,以明确为“资源容器”中的“id”列命名,因此结果不会混淆“资源容器”和“资源”之间的结果(值)。

这是我的 PowerShell 代码的完整示例,以防有人感兴趣:

$resources = Search-AzGraph -Subscription $subscriptionId -Query "resourcecontainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| join kind=leftouter (resources | project ResourceId=id, ResourceName=name, ResourceType=type, resourceGroup) on resourceGroup
| project ResourceGroupId=id, ResourceId, ResourceGroupName=name, ResourceName, ResourceType, tags"

foreach ($resource in $resources) {
  Write-Host "Resource Group Id: " $resource.ResourceGroupId
  Write-Host "  Resource Group Name: " $resource.ResourceGroupName
  Write-Host "  Resource Id: " $resource.ResourceId
  Write-Host "  Resource Name: " $resource.ResourceName
  Write-Host "  Resource Type: " $resource.ResourceType
}
于 2020-07-11T02:12:33.683 回答