Erweiterte Beispiele für Resource Graph-AbfragenAdvanced Resource Graph query samples

Der erste Schritt zum Verstehen von Abfragen mit Azure Resource Graph sind Grundkenntnisse der Abfragesprache.The first step to understanding queries with Azure Resource Graph is a basic understanding of the Query Language. Wenn Sie nicht bereits mit Azure Data Explorer vertraut sind, sollten Sie sich über die Grundlagen informieren, um zu verstehen, wie Sie Anforderungen für die gesuchten Ressourcen zusammenstellen müssen.If you aren't already familiar with Azure Data Explorer, it's recommended to review the basics to understand how to compose requests for the resources you're looking for.

Wir behandeln die folgenden erweiterten Abfragen:We'll walk through the following advanced queries:

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

SprachunterstützungLanguage support

Azure CLI (über eine Erweiterung) und Azure PowerShell (über ein Modul) unterstützen Azure Resource Graph.Azure CLI (through an extension) and Azure PowerShell (through a module) support Azure Resource Graph. Überprüfen Sie vor dem Ausführen der folgenden Abfragen, ob Ihre Umgebung bereit ist.Before running any of the following queries, check that your environment is ready. Unter Azure CLI und Azure PowerShell werden die Schritte zum Installieren und Überprüfen der Shellumgebung Ihrer Wahl beschrieben.See Azure CLI and Azure PowerShell for steps to install and validate your shell environment of choice.

Anzeigen von Ressourcentypen und API-VersionenShow resource types and API versions

Resource Graph verwendet hauptsächlich die neueste Version (keine Vorschauversion) der API eines Ressourcenanbieters, um mittels GET Ressourceneigenschaften während einer Aktualisierung abzurufen.Resource Graph primarily uses the most recent non-preview version of a Resource Provider's API to GET resource properties during an update. In einigen Fällen wurde die verwendete API-Version überschrieben, um in den Ergebnissen neuere oder gängigere Eigenschaften bereitzustellen.In some cases, the API version used has been overridden to provide more current or widely used properties in the results. In der folgenden Abfrage wird die API-Version veranschaulicht, die zum Sammeln von Eigenschaften für die einzelnen Ressourcentypen verwendet wird:The following query details the API version used for gathering properties on each resource type:

Resources
| distinct type, apiVersion
| where isnotnull(apiVersion)
| order by type asc
az graph query -q "Resources | distinct type, apiVersion | where isnotnull(apiVersion) | order by type asc"

Abrufen der Kapazität und Größe von VM-SkalierungsgruppenGet virtual machine scale set capacity and size

Diese Abfrage sucht nach Ressourcen für VM-Skalierungsgruppen und ruft verschiedene Details (einschließlich der Größe des virtuellen Computers und der Kapazität der Skalierungsgruppe) ab.This query looks for virtual machine scale set resources and gets various details including the virtual machine size and the capacity of the scale set. Mit dieser Abfrage wandelt die toint()-Funktion die Kapazität in eine Zahl um, damit sie sortiert werden kann.The query uses the toint() function to cast the capacity to a number so that it can be sorted. Schließlich werden die Spalten in benutzerdefinierte benannte Eigenschaften umbenannt.Finally, the columns are renamed into custom named properties.

Resources
| where type=~ 'microsoft.compute/virtualmachinescalesets'
| where name contains 'contoso'
| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name
| order by Capacity desc
az graph query -q "Resources | where type=~ 'microsoft.compute/virtualmachinescalesets' | where name contains 'contoso' | project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name | order by Capacity desc"

Entfernen von Spalten aus den ErgebnissenRemove columns from results

Die folgende Abfrage verwendet summarize, um Ressourcen nach Abonnement zu zählen, join, um sie mit Abonnementdetails aus der Tabelle ResourceContainers zu vereinen, und anschließend project-away, um einige der Spalten zu entfernen.The following query uses summarize to count resources by subscription, join to combine it with subscription details from ResourceContainers table, then project-away to remove some of the columns.

Resources
| summarize resourceCount=count() by subscriptionId
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
az graph query -q "Resources | summarize resourceCount=count() by subscriptionId | join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId| project-away subscriptionId, subscriptionId1"

Auflisten aller TagnamenList all tag names

Diese Abfrage beginnt mit dem Tag und erstellt ein JSON-Objekt, das alle eindeutigen Tagnamen und ihre entsprechenden Typen auflistet.This query starts with the tag and builds a JSON object listing all unique tag names and their corresponding types.

Resources
| project tags
| summarize buildschema(tags)
az graph query -q "Resources | project tags | summarize buildschema(tags)"

Einem regulären Ausdruck entsprechende VMsVirtual machines matched by regex

Diese Abfrage sucht nach virtuellen Computern, die einem regulären Ausdruck (als RegEx bekannt) entsprechen.This query looks for virtual machines that match a regular expression (known as regex). Mit matches regex @ wird der reguläre Ausdruck für den Abgleich definiert: ^Contoso(.*)[0-9]+$.The matches regex @ allows us to define the regex to match, which is ^Contoso(.*)[0-9]+$. Diese RegEx-Definition wird wie folgt erläutert:That regex definition is explained as:

  • ^ – Die Übereinstimmung muss am Anfang der Zeichenfolge beginnen.^ - Match must start at the beginning of the string.
  • Contoso – Zeichenfolge mit Beachtung von Groß-/KleinschreibungContoso - The case-sensitive string.
  • (.*) – Eine Übereinstimmung mit einem Teilausdruck:(.*) - A subexpression match:
    • . – stimmt mit einem beliebigen einzelnen Zeichen (außer eines Zeilenumbruchs) überein.. - Matches any single character (except a new line).
    • * – stimmt mit dem vorhergehenden Element null Mal oder mehrfach überein.* - Matches previous element zero or more times.
  • [0-9] – Übereinstimmung von Zeichengruppe für die Ziffern 0 bis 9.[0-9] - Character group match for numbers 0 through 9.
  • + – stimmt mit dem vorhergehenden Element ein Mal oder mehrfach überein.+ - Matches previous element one or more times.
  • $ – Übereinstimmung des vorhergehenden Elements muss am Ende der Zeichenfolge auftreten.$ - Match of the previous element must occur at the end of the string.

Nach dem Namensabgleich stellt die Abfrage den Namen dar und sortiert aufsteigend nach Name.After matching by name, the query projects the name and orders by name ascending.

Resources
| where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$'
| project name
| order by name asc
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$' | project name | order by name asc"

Auflisten von Cosmos DB mit bestimmten SchreibstandortenList Cosmos DB with specific write locations

Die folgende Abfrage schränkt die Cosmos DB-Ressourcen ein, verwendet mv-expand, um den Eigenschaftenbehälter für properties.writeLocations zu erweitern, anschließend bestimmte Felder zu projizieren und die Ergebnisse weiter auf properties.writeLocations.locationName-Werte einzuschränken, die „USA, Osten“ oder „USA, Westen“ entsprechen.The following query limits to Cosmos DB resources, uses mv-expand to expand the property bag for properties.writeLocations, then project specific fields and limit the results further to properties.writeLocations.locationName values matching either 'East US' or 'West US'.

Resources
| where type =~ 'microsoft.documentdb/databaseaccounts'
| project id, name, writeLocations = (properties.writeLocations)
| mv-expand writeLocations
| project id, name, writeLocation = tostring(writeLocations.locationName)
| where writeLocation in ('East US', 'West US')
| summarize by id, name
az graph query -q "Resources | where type =~ 'microsoft.documentdb/databaseaccounts' | project id, name, writeLocations = (properties.writeLocations) | mv-expand writeLocations | project id, name, writeLocation = tostring(writeLocations.locationName) | where writeLocation in ('East US', 'West US') | summarize by id, name"

Schlüsseltresore mit AbonnementnameKey vaults with subscription name

Die folgende Abfrage zeigt eine komplexe Verwendung von join mit kind als leftouter.The following query shows a complex use of join with kind as leftouter. Die Abfrage schränkt die verknüpfte Tabelle auf Abonnementressourcen ein, und mit project wird nur das ursprüngliche Feld subscriptionId einbezogen, und das Feld name wird in SubName umbenannt.The query limits the joined table to subscriptions resources and with project to include only the original field subscriptionId and the name field renamed to SubName. Beim Umbenennen des Felds wird das Hinzufügen von join als name1 vermieden, da das Feld bereits unter resources vorhanden ist.The field rename avoids join adding it as name1 since the field already exists in resources. Die ursprüngliche Tabelle wird mit where gefiltert, und das folgende project-Element enthält Spalten aus beiden Tabellen.The original table is filtered with where and the following project includes columns from both tables. Das Abfrageergebnis enthält alle Schlüsseltresore mit Typ, Name des Schlüsseltresors und Name des Abonnements, in dem er sich befindet.The query result is all key vaults displaying type, the name of the key vault, and the name of the subscription it's in.

Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| where type == 'microsoft.keyvault/vaults'
| project type, name, SubName
az graph query -q "Resources | join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type == 'microsoft.keyvault/vaults' | project type, name, SubName"

Auflisten von SQL-Datenbanken und deren Pools für elastische DatenbankenList SQL Databases and their elastic pools

Die folgende Abfrage verwendet leftouter join, um SQL-Datenbank-Ressourcen und ggf. die zugehörigen Pools für elastische Datenbanken zusammenzuführen.The following query uses leftouter join to bring together SQL Database resources and their related elastic pools, if they've any.

Resources
| where type =~ 'microsoft.sql/servers/databases'
| project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId))
| join kind=leftouter (
    Resources
    | where type =~ 'microsoft.sql/servers/elasticpools'
    | project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state)
on elasticPoolId
| project-away elasticPoolId1
az graph query -q "Resources | where type =~ 'microsoft.sql/servers/databases' | project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId)) | join kind=leftouter ( Resources | where type =~ 'microsoft.sql/servers/elasticpools' | project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state) on elasticPoolId | project-away elasticPoolId1"

Auflisten virtueller Computer mit deren Netzwerkschnittstelle und der öffentlichen IP-AdresseList virtual machines with their network interface and public IP

Diese Abfrage verwendet zwei leftouter join-Befehle, um mit dem Resource Manager-Bereitstellungsmodell erstellte virtuelle Maschinen, ihre zugehörigen Netzwerkschnittstellen und alle öffentlichen IP-Adressen zusammenzuführen, die sich auf diese Netzwerkschnittstellen beziehen.This query uses two leftouter join commands to bring together virtual machines created with the Resource Manager deployment model, their related network interfaces, and any public IP address related to those network interfaces.

Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend nics=array_length(properties.networkProfile.networkInterfaces) 
| mv-expand nic=properties.networkProfile.networkInterfaces 
| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic) 
| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id) 
| join kind=leftouter (
    Resources
    | where type =~ 'microsoft.network/networkinterfaces'
    | extend ipConfigsCount=array_length(properties.ipConfigurations) 
    | mv-expand ipconfig=properties.ipConfigurations 
    | where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'
    | project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id))
on nicId
| project-away nicId1
| summarize by vmId, vmName, vmSize, nicId, publicIpId
| join kind=leftouter (
    Resources
    | where type =~ 'microsoft.network/publicipaddresses'
    | project publicIpId = id, publicIpAddress = properties.ipAddress)
on publicIpId
| project-away publicIpId1
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | extend nics=array_length(properties.networkProfile.networkInterfaces) | mv-expand nic=properties.networkProfile.networkInterfaces | where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic) | project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id) | join kind=leftouter ( Resources | where type =~ 'microsoft.network/networkinterfaces' | extend ipConfigsCount=array_length(properties.ipConfigurations) | mv-expand ipconfig=properties.ipConfigurations | where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true' | project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id)) on nicId | project-away nicId1 | summarize by vmId, vmName, vmSize, nicId, publicIpId | join kind=leftouter ( Resources | where type =~ 'microsoft.network/publicipaddresses' | project publicIpId = id, publicIpAddress = properties.ipAddress) on publicIpId | project-away publicIpId1"

Auflisten aller Erweiterungen, die auf einem virtuellen Computer installiert sindList all extensions installed on a virtual machine

Zuerst wird bei dieser Abfrage extend für den VM-Ressourcentyp verwendet, um die ID in Großbuchstaben (toupper()) und dann den Namen und Typ des Betriebssystems sowie die VM-Größe abzurufen.First, this query uses extend on the virtual machines resource type to get the ID in uppercase (toupper()) the ID, get the operating system name and type, and get the virtual machine size. Das Abrufen der Ressourcen-ID in Großbuchstaben ist eine gute Möglichkeit, um das Einbinden in eine andere Eigenschaft vorzubereiten.Getting the resource ID in upper case is a good way to prepare to join to another property. Anschließend wird für die Abfrage join mit kind als leftouter-Element verwendet, um VM-Erweiterungen abzurufen. Hierfür wird ein Abgleich mit dem substring-Element der Erweiterungs-ID in Großbuchstaben durchgeführt.Then, the query uses join with kind as leftouter to get virtual machine extensions by matching an upper cased substring of the extension ID. Da der Teil der ID vor „/extensions/<ExtensionName>“ das gleiche Format wie die VM-ID hat, verwenden wie diese Eigenschaft für den join-Vorgang.The portion of the ID before "/extensions/<ExtensionName>" is the same format as the virtual machines ID, so we use this property for the join. summarize wird dann mit make_list im Namen der VM-Erweiterung verwendet, um die Namen der einzelnen Erweiterungen zu kombinieren. Hierbei sind id, OSName, OSType und VMSize für jede Arrayeigenschaft jeweils identisch.summarize is then used with make_list on the name of the virtual machine extension to combine the name of each extension where id, OSName, OSType, and VMSize are the same into a single array property. Abschließend führen wir order by für das OSName-Element in Kleinbuchstaben mit asc durch.Lastly, we order by the lower cased OSName with asc. Standardmäßig wird für order by „descending“ (absteigend) und nicht „ascending“ (aufsteigend) verwendet.By default, order by is descending.

Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
    JoinID = toupper(id),
    OSName = tostring(properties.osProfile.computerName),
    OSType = tostring(properties.storageProfile.osDisk.osType),
    VMSize = tostring(properties.hardwareProfile.vmSize)
| join kind=leftouter(
    Resources
    | where type == 'microsoft.compute/virtualmachines/extensions'
    | extend 
        VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
        ExtensionName = name
) on $left.JoinID == $right.VMId
| summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize
| order by tolower(OSName) asc
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | extend JoinID = toupper(id), OSName = tostring(properties.osProfile.computerName), OSType = tostring(properties.storageProfile.osDisk.osType), VMSize = tostring(properties.hardwareProfile.vmSize) | join kind=leftouter( Resources | where type == 'microsoft.compute/virtualmachines/extensions' | extend VMId = toupper(substring(id, 0, indexof(id, '/extensions'))), ExtensionName = name ) on $left.JoinID == $right.VMId | summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize | order by tolower(OSName) asc"

Suchen von Speicherkonten mit einem bestimmten Tag in der RessourcengruppeFind storage accounts with a specific tag on the resource group

In der folgenden Abfrage wird inner join zum Verbinden von Speicherkonten mit Ressourcengruppen verwendet, die über einen Tagnamen und einen Tagwert verfügen, bei denen die Groß-/Kleinschreibung berücksichtigt wird.The following query uses an inner join to connect storage accounts with resource groups that have a specified case-sensitive tag name and tag value.

Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
    ResourceContainers
    | where type =~ 'microsoft.resources/subscriptions/resourcegroups'
    | where tags['Key1'] =~ 'Value1'
    | project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | where tags['Key1'] =~ 'Value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"

Wenn nach einem Tagnamen und einem Tagwert gesucht werden muss, bei denen die Groß-/Kleinschreibung berücksichtigt wird, verwenden Sie mv-expand mit dem Parameter bagexpansion.If it's necessary to look for a case insensitive tag name and tag value, use mv-expand with the bagexpansion parameter. Bei dieser Abfrage wird ein höheres Kontingent als in der vorherigen Abfrage verwendet. Verwenden Sie mv-expand also nur, wenn dies unbedingt erforderlich ist.This query uses more quota than the previous query, so use mv-expand only if necessary.

Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
    ResourceContainers
    | where type =~ 'microsoft.resources/subscriptions/resourcegroups'
    | mv-expand bagexpansion=array tags
    | where isnotempty(tags)
    | where tags[0] =~ 'key1' and tags[1] =~ 'value1'
    | project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | mv-expand bagexpansion=array tags | where isnotempty(tags) | where tags[0] =~ 'key1' and tags[1] =~ 'value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"

Vereinen von Ergebnissen aus zwei Abfragen in einem einzigen ErgebnisCombine results from two queries into a single result

Die folgende Abfrage verwendet union, um Ergebnisse aus der Tabelle ResourceContainers abzurufen und sie den Ergebnissen aus der Tabelle Resources hinzuzufügen.The following query uses union to get results from the ResourceContainers table and add them to results from the Resources table.

ResourceContainers
| where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type  | limit 5
| union  (Resources | project name, type | limit 5)
az graph query -q "ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type  | limit 5 | union  (Resources | project name, type | limit 5)"

Zusammenfassen virtueller Computer anhand der erweiterten Eigenschaft für EnergiezuständeSummarize virtual machine by the power states extended property

Diese Abfrage verwendet die erweiterten Eigenschaften auf virtuellen Computern, um sie nach Energiezuständen zusammenzufassen.This query uses the extended properties on virtual machines to summarize by power states.

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"

Anzahl der nicht konformen GastkonfigurationszuweisungenCount of non-compliant Guest Configuration assignments

Zeigt die Anzahl der nicht kompatiblen Computer pro Gastkonfigurationszuweisungs-Grund.Displays a count of non-compliant machines per Guest Configuration assignment reason. Die Ergebnisse werden aus Leistungsgründen auf die ersten 100 beschränkt.Limits results to first 100 for performance.

GuestConfigurationResources
| extend vmid = split(properties.targetResourceId,'/')
| where properties.complianceStatus == 'NonCompliant'
| mvexpand properties.latestAssignmentReport.resources
| mvexpand properties_latestAssignmentReport_resources.reasons
| project machine = tostring(vmid[(-1)]),
    type = tostring(vmid[(-3)]),
    name,
    status = tostring(properties.complianceStatus),
    resource = tostring(properties_latestAssignmentReport_resources.resourceId),
    phrase = tostring(properties_latestAssignmentReport_resources_reasons.phrase)
| summarize count() by resource, name
| order by count_
| limit 100
az graph query -q "GuestConfigurationResources | extend vmid = split(properties.targetResourceId,'/') | where properties.complianceStatus == 'NonCompliant' | mvexpand properties.latestAssignmentReport.resources | mvexpand properties_latestAssignmentReport_resources.reasons | project machine = tostring(vmid[(-1)]), type = tostring(vmid[(-3)]), name, status = tostring(properties.complianceStatus), resource = tostring(properties_latestAssignmentReport_resources.resourceId), phrase = tostring(properties_latestAssignmentReport_resources_reasons.phrase) | summarize count() by resource, name | order by count_ | limit 100"

Abfragen von Details aus dem Bericht zur GastkonfigurationszuweisungQuery details of Guest Configuration assignment reports

Zeigt den Bericht aus den Details für den Gastkonfigurationszuweisungs-Grund an.Display report from Guest Configuration assignment reason details. Im folgenden Beispiel gibt die Abfrage nur Ergebnisse zurück, bei denen der Name der Gastzuweisung installed_application_linux lautet und die Ausgabe die Zeichenfolge Python enthält, um alle Linux-Computer aufzulisten, auf denen ein Paket mit dem Namen Python installiert ist.In the following example, the query returns only results where the Guest Assignment name is installed_application_linux and the output contains the string Python to list all Linux machines where a package is installed that includes the name Python. Entfernen Sie die zweite where-Klausel, um die Konformität aller Computer für eine bestimmte Zuweisung abzufragen.To query compliance of all machines for a specific assignment, remove the second where clause.

GuestConfigurationResources
| extend vmid = split(properties.targetResourceId,'/')
| mvexpand properties.latestAssignmentReport.resources
| mvexpand properties_latestAssignmentReport_resources.reasons
| where name in ('installed_application_linux')
| where properties_latestAssignmentReport_resources_reasons.phrase contains 'Python'
| project machine = tostring(vmid[(-1)]),
    type = tostring(vmid[(-3)]),
    name,
    status = tostring(properties.complianceStatus),
    resource = tostring(properties_latestAssignmentReport_resources.resourceId),
    phrase = tostring(properties_latestAssignmentReport_resources_reasons.phrase)
az graph query -q "GuestConfigurationResources | extend vmid = split(properties.targetResourceId,'/') | mvexpand properties.latestAssignmentReport.resources | mvexpand properties_latestAssignmentReport_resources.reasons | where name in ('installed_application_linux') | where properties_latestAssignmentReport_resources_reasons.phrase contains 'Python' | project machine = tostring(vmid[(-1)]), type = tostring(vmid[(-3)]), name, status = tostring(properties.complianceStatus), resource = tostring(properties_latestAssignmentReport_resources.resourceId), phrase = tostring (properties_latestAssignmentReport_resources_reasons.phrase)"

Ermitteln aller Gründe dafür, warum ein Computer nicht konform für Gastkonfigurationszuweisungen istFind all reasons a machine is non-compliant for Guest Configuration assignments

Zeigt alle Gastkonfigurationszuweisungs-Gründe für einen bestimmten Computer an.Display all Guest Configuration assignment reasons for a specific machine. Entfernen Sie die erste where-Klausel, um auch Überwachungen mit konformen Computern einzubeziehen.Remove the first where clause to also include audits where the machine is compliant.

GuestConfigurationResources
| where properties.complianceStatus == 'NonCompliant'
| extend vmid = split(properties.targetResourceId,'/')
| mvexpand properties.latestAssignmentReport.resources
| mvexpand properties_latestAssignmentReport_resources.reasons
| extend machine = tostring(vmid[(-1)])
| where machine == 'MACHINENAME'
| project phrase = tostring(properties_latestAssignmentReport_resources_reasons.phrase),
    resource = tostring(properties_latestAssignmentReport_resources.resourceId),
    name,
    machine,
    resourceGroup,
    subscriptionId
az graph query -q "GuestConfigurationResources | where properties.complianceStatus == 'NonCompliant' | extend vmid = split(properties.targetResourceId,'/') | mvexpand properties.latestAssignmentReport.resources | mvexpand properties_latestAssignmentReport_resources.reasons | extend machine = tostring(vmid[(-1)]) | where machine == 'MACHINENAME' | project phrase = tostring(properties_latestAssignmentReport_resources_reasons.phrase), resource = tostring(properties_latestAssignmentReport_resources.resourceId), name, machine, resourceGroup, subscriptionId"