Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure CLI utilise le --query
paramètre pour exécuter une requête JMESPath sur les résultats des commandes. JMESPath est un langage de requête pour JSON, qui vous permet de sélectionner et de modifier des données depuis une sortie CLI.
Toutes les commandes dans Azure CLI prennent en charge le --query
paramètre. Cet article explique comment utiliser les fonctionnalités de JMESPath et fournit des exemples de requêtes. Découvrez les concepts JMESPath utiles pour l’interrogation sous l’onglet Concepts. Consultez des exemples de requêtes JMESPath sous l’onglet Exemples.
Azure CLI utilise des requêtes pour sélectionner et modifier la sortie des commandes Azure CLI. Les requêtes sont exécutées côté client sur l’objet JSON retourné par la commande Azure CLI avant toute mise en forme d’affichage.
Les caractères d’échappement nécessaires dans les requêtes diffèrent pour différents environnements. Il est recommandé d’exécuter des requêtes dans Azure Cloud Shell ou cmd, car ces interpréteurs de commandes nécessitent moins de caractères d’échappement. Pour vous assurer que les exemples de requête sont syntaxiquement corrects, sélectionnez l’onglet de l’interpréteur de commandes que vous utilisez.
Résultats CLI pour le dictionnaire et la liste
Les résultats des commandes CLI sont d’abord traités comme JSON pour les requêtes, même lorsque le format de sortie est autre que JSON. Les résultats de l’interface CLI sont soit un tableau JSON, soit un dictionnaire. Les tableaux sont des séquences d’objets qui peuvent être indexés, et les dictionnaires sont des objets non ordonnés accessibles avec des clés.
Voici un exemple de tableau :
[
1,
2,
3
]
Voici un exemple de dictionnaire :
{
"isRunning": false,
"time": "12:00",
"number": 1
}
Les commandes qui peuvent retourner plusieurs objets retournent un tableau et les commandes qui retournent toujoursun seul objet retournent un dictionnaire.
Obtenir des propriétés dans un dictionnaire
En utilisant les résultats du dictionnaire, vous pouvez accéder aux propriétés du niveau supérieur avec uniquement la clé. Le .
caractère (sous-expression) est utilisé pour accéder aux propriétés des dictionnaires imbriqués. Avant d’introduire des requêtes, examinez la sortie non modifiée de la commande az vm show :
az vm show --resource-group QueryDemo --name TestVM
La commande génère un dictionnaire. Certains contenus ont été omis.
{
"additionalCapabilities": null,
"availabilitySet": null,
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "https://xxxxxx.blob.core.windows.net/"
}
},
...
"osProfile": {
"adminPassword": null,
"adminUsername": "azureuser",
"allowExtensionOperations": true,
"computerName": "TestVM",
"customData": null,
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"provisionVmAgent": true,
"ssh": {
"publicKeys": [
{
"keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso",
"path": "/home/azureuser/.ssh/authorized_keys"
}
]
}
},
"secrets": [],
"windowsConfiguration": null
},
....
}
La commande suivante obtient les clés publiques SSH autorisées à se connecter à la machine virtuelle en ajoutant une requête :
az vm show --resource-group QueryDemo --name TestVM --query "osProfile.linuxConfiguration.ssh.publicKeys"
[
{
"keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso",
"path": "/home/azureuser/.ssh/authorized_keys"
}
]
Les chaînes de requête respectent la casse. Par exemple, la modification de « osProfile » en « OsProfile » dans la requête précédente ne retourne pas les résultats corrects.
Obtenir plusieurs valeurs
Pour obtenir plusieurs propriétés, placez les expressions séparées par des virgules entre crochets [ ]
(une liste à sélection multiple). La commande suivante obtient le nom de la machine virtuelle, l’utilisateur administrateur et la clé SSH en même temps :
az vm show --resource-group QueryDemo --name TestVM --query "[name, osProfile.adminUsername, osProfile.linuxConfiguration.ssh.publicKeys[0].keyData]"
[
"TestVM",
"azureuser",
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso"
]
Ces valeurs sont répertoriées dans le tableau de résultats dans l’ordre dans lequel elles ont été données dans la requête. Étant donné que le résultat est un tableau, il n’existe aucune clé associée aux résultats. Pour obtenir un dictionnaire au lieu d’un tableau, consultez la section suivante.
Renommer des propriétés dans une requête
Pour obtenir un dictionnaire au lieu d’un tableau lors de l’interrogation de plusieurs valeurs, utilisez l’opérateur { }
(hachage multiselect).
Le format d’un hachage à sélection multiple est {displayName:JMESPathExpression, ...}
.
displayName
est la chaîne affichée dans la sortie et JMESPathExpression
est l’expression JMESPath à évaluer. Modifiez l’exemple de la dernière section en transformant la liste à sélection multiple en hachage.
Remarque
Si vous choisissez d’utiliser un espace dans un nouveau nom de colonne, comme VM name
au lieu de VMName
, les règles de citation changent à la fois dans Bash et PowerShell. Pour obtenir des exemples, consultez Passer des espaces dans les paramètres Azure CLI .
az vm show --resource-group QueryDemo --name TestVM --query "{VMName:name, admin:osProfile.adminUsername, sshKey:osProfile.linuxConfiguration.ssh.publicKeys[0].keyData}"
{
"VMName": "TestVM",
"admin": "azureuser",
"ssh-key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso"
}
Obtenir des propriétés dans un tableau
Un tableau n’a pas de propriétés propres, mais il peut être indexé. Cette fonctionnalité est illustrée dans le dernier exemple avec l’expression publicKeys[0]
, qui obtient le premier élément du publicKeys
tableau. Il n’existe aucune garantie que la sortie de l’interface CLI est ordonnée. Évitez donc d’utiliser l’indexation, sauf si vous êtes sûr de l’ordre ou que vous ne vous souciez pas de l’élément que vous obtenez. Pour accéder aux propriétés des éléments d’un tableau, vous effectuez l’une des deux opérations suivantes : aplatir ou filtrer. Cette section explique comment aplatir un tableau.
L’aplatissement d’un tableau est effectué avec l’opérateur []
JMESPath. Toutes les expressions après l’opérateur []
sont appliquées à chaque élément du tableau actuel.
Si []
apparaît au début d'une requête, il aplatit le résultat de commande CLI. Les résultats de az vm list
peuvent être inspectés avec cette fonctionnalité.
La requête suivante obtient le nom, le système d’exploitation et le nom d’administrateur pour chaque machine virtuelle dans un groupe de ressources :
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, admin:osProfile.adminUsername}"
[
{
"Name": "Test-2",
"OS": "Linux",
"admin": "sttramer"
},
{
"Name": "TestVM",
"OS": "Linux",
"admin": "azureuser"
},
{
"Name": "WinTest",
"OS": "Windows",
"admin": "winadmin"
}
]
N’importe quel tableau peut être aplatit, pas seulement le résultat de niveau supérieur retourné par la commande. Dans la dernière section, l’expression osProfile.linuxConfiguration.ssh.publicKeys[0].keyData
a été utilisée pour obtenir la clé publique SSH pour la connexion. Pour obtenir chaque clé publique SSH, l’expression peut plutôt être écrite en tant que osProfile.linuxConfiguration.ssh.publicKeys[].keyData
.
Cette expression de requête aplatit le osProfile.linuxConfiguration.ssh.publicKeys
tableau, puis exécute l’expression keyData
sur chaque élément :
az vm show --resource-group QueryDemo --name TestVM --query "{VMName:name, admin:osProfile.adminUsername, sshKeys:osProfile.linuxConfiguration.ssh.publicKeys[].keyData }"
{
"VMName": "TestVM",
"admin": "azureuser",
"sshKeys": [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMobZNJTqgjWn/IB5xlilvE4Y+BMYpqkDnGRUcA0g9BYPgrGSQquCES37v2e3JmpfDPHFsaR+CPKlVr2GoVJMMHeRcMJhj50ZWq0hAnkJBhlZVWy8S7dwdGAqPyPmWM2iJDCVMVrLITAJCno47O4Ees7RCH6ku7kU86b1NOanvrNwqTHr14wtnLhgZ0gQ5GV1oLWvMEVg1YFMIgPRkTsSQKWCG5lLqQ45aU/4NMJoUxGyJTL9i8YxMavaB1Z2npfTQDQo9+womZ7SXzHaIWC858gWNl9e5UFyHDnTEDc14hKkf1CqnGJVcCJkmSfmrrHk/CkmF0ZT3whTHO1DhJTtV stramer@contoso\n"
]
}
Filtrer des tableaux avec des expressions booléennes
L’autre opération utilisée pour obtenir des données à partir d’un tableau est filtrage. Le filtrage est effectué avec l’opérateur [?...]
JMESPath.
Cet opérateur prend un prédicat comme contenu. Un prédicat est n’importe quelle instruction (y compris les propriétés booléennes) qui peut être évaluée à true
ou false
. Les expressions dans lesquelles le prédicat est évalué à true
sont incluses dans la sortie.
La première requête montre comment répertorier les noms de tous les abonnements Azure connectés à votre compte dont isDefault
la propriété est vraie. Les deuxième et troisième requêtes montrent deux façons différentes de répertorier tous les abonnements dont isDefault
la propriété est false.
# Boolean values are assumed to be true, so you can directly evaluate the isDefault property to return the default subscription.
az account list --query "[?isDefault].name"
# To check if a Boolean property is false, you can use the comparison operator == or the logical operator !.
az account list --query '[?!isDefault].name'
az account list --query "[?isDefault == \`false\`].name"
JMESPath offre les opérateurs logiques et de comparaison standard. Ceux-ci incluent <
, , <=
>
, >=
, ==
et !=
. JMESPath prend également en charge les fonctions logiques et (&&
ou (||
) et non (!
). Les expressions peuvent être regroupées entre parenthèses, ce qui permet d’obtenir des expressions de prédicat plus complexes. Pour plus d’informations sur les prédicats et les opérations logiques, consultez la spécification JMESPath.
Dans la dernière section, vous avez aplatit un tableau pour obtenir la liste complète de toutes les machines virtuelles d’un groupe de ressources. Avec l’utilisation de filtres, cette sortie peut être limitée aux machines virtuelles Linux uniquement :
az vm list --resource-group QueryDemo --query "[?storageProfile.osDisk.osType=='Linux'].{Name:name, admin:osProfile.adminUsername}" --output table
Name Admin
------ ---------
Test-2 sttramer
TestVM azureuser
Vous pouvez également filtrer des valeurs numériques telles que la taille du disque du système d’exploitation. L’exemple suivant montre comment filtrer la liste des machines virtuelles pour les afficher avec une taille de disque supérieure ou égale à 50 Go.
az vm list --resource-group QueryDemo --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb }" --output table
Name Admin DiskSize
------- -------- --------
WinTest winadmin 127
Pour les grands tableaux, il peut être plus rapide d’appliquer le filtre avant de sélectionner des données.
Important
Dans JMESPath, les chaînes sont toujours entourées de guillemets simples ('
) ou de caractères d’échappement (`
). Si vous utilisez des guillemets doubles dans une chaîne dans un prédicat de filtre, vous obtiendrez une sortie vide.
Fonctions JMESPath
JMESPath dispose également de fonctions intégrées qui permettent des requêtes plus complexes et de modifier la sortie de requête. Cette section se concentre sur l’utilisation des fonctions JMESPath pour créer des requêtes pendant que la section Manipulation de la sortie avec fonctions montre comment utiliser des fonctions pour modifier la sortie.
Les expressions sont évaluées avant d’appeler la fonction, de sorte que les arguments eux-mêmes peuvent être des expressions JMESPath. Les exemples suivants illustrent ce concept à l’aide contains(string, substring)
de , qui vérifie si une chaîne contient une sous-chaîne. Cette commande recherche toutes les machines virtuelles utilisant le stockage SSD pour leur disque de système d’exploitation :
az vm list --resource-group QueryDemo --query "[?contains(storageProfile.osDisk.managedDisk.storageAccountType,'SSD')].{Name:name, Storage:storageProfile.osDisk.managedDisk.storageAccountType}"
[
{
"Name": "TestVM",
"Storage": "StandardSSD_LRS"
},
{
"Name": "WinTest",
"Storage": "StandardSSD_LRS"
}
]
Expressions de tube
Semblable à l'utilisation de |
dans la ligne de commande, |
peut être utilisé dans les requêtes JMESPath pour appliquer des expressions aux résultats intermédiaires des requêtes. Nous pouvons également utiliser |
pour décomposer des requêtes complexes en sous-expressions plus simples. Pour raccourcir la requête de la section précédente, utilisez |
pour appliquer le filtre après la mise à plat et la sélection des données.
az vm list --resource-group QueryDemo --query "[].{Name:name, Storage:storageProfile.osDisk.managedDisk.storageAccountType} | [? contains(Storage,'SSD')]"
[
{
"Name": "TestVM",
"Storage": "StandardSSD_LRS"
},
{
"Name": "WinTest",
"Storage": "StandardSSD_LRS"
}
]
Consultez la spécification JMESPath - Fonctions intégrées pour obtenir la liste complète des fonctions.
Manipulation de la sortie avec des fonctions
Les fonctions JMESPath ont également un autre objectif, qui consiste à fonctionner sur les résultats d’une requête. Toute fonction qui retourne une valeur nonboolean modifie le résultat d’une expression. Par exemple, vous pouvez trier les données par une valeur de propriété avec sort_by(array, &sort_expression)
. JMESPath utilise un opérateur spécial, &
pour les expressions qui doivent être évaluées ultérieurement dans le cadre d’une fonction. L’exemple suivant montre comment trier une liste de machines virtuelles par taille de disque du système d’exploitation :
az vm list --resource-group QueryDemo --query "sort_by([].{Name:name, Size:storageProfile.osDisk.diskSizeGb}, &Size)" --output table
Name Size
------- ------
Test-2 30
TestVM 32
WinTest 127
Consultez la spécification JMESPath - Fonctions intégrées pour obtenir la liste complète des fonctions.
Mise en forme des résultats de la requête
Azure CLI utilise JSON comme format de sortie par défaut, mais différents formats de sortie peuvent mieux correspondre à une requête en fonction de son objectif et de ses résultats. Les requêtes sont toujours exécutées sur la JSON
sortie, puis mises en forme.
Cette section examinera le format tsv
et le format table
ainsi que quelques cas d'utilisation pour chaque format. Pour plus d’informations sur les formats de sortie, consultez Formats de sortie pour les commandes Azure CLI.
Format de sortie TSV
Le format de sortie tsv
retourne des valeurs séparées par des tabulations et des sauts de ligne sans mise en forme, clés ou autres symboles supplémentaires. Ce format est utile lorsque la sortie est stockée dans un paramètre et utilisée dans une autre commande.
Un cas d’usage pour tsv
la mise en forme est les requêtes qui récupèrent une valeur à partir d’une commande CLI, telle qu’un ID de ressource Azure ou un nom de ressource, et stockent la valeur dans une variable d’environnement locale. Par défaut, les résultats sont retournés au format JSON, ce qui peut être un problème lors du traitement des chaînes JSON placées entre "
des caractères. Les guillemets peuvent ne pas être interprétés par l’interpréteur de commandes si la sortie de commande est directement affectée à la variable d’environnement. Ce problème est visible dans l’exemple suivant qui affecte un résultat de requête à une variable d’environnement :
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername")
echo $USER
"azureuser"
Utilisez le formatage tsv
, comme illustré dans la requête suivante, pour empêcher d'encapsuler les valeurs de retour avec des informations de type :
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername" --output tsv)
echo $USER
azureuser
Format de sortie du tableau
Le format table
imprime la sortie sous forme de tableau ASCII, ce qui la rend facile à lire et à analyser. Tous les champs ne sont pas inclus dans le tableau afin que ce format soit mieux utilisé comme vue d’ensemble des données pouvant faire l’objet d’une recherche humaine. Les champs qui ne sont pas inclus dans la table peuvent toujours être filtrés dans le cadre d’une requête.
Remarque
Certaines clés sont filtrées et non imprimées dans l’affichage tableau. Ces clés sont id
, type
et etag
. Pour afficher ces valeurs, vous pouvez modifier le nom de clé dans un hachage à sélection multiple.
az vm show --resource-group QueryDemo --name TestVM --query "{objectID:id}" --output table
Nous pouvons utiliser une requête précédente pour illustrer ce concept. La requête d’origine a retourné un objet JSON contenant le nom, le système d’exploitation et le nom d’administrateur pour chaque machine virtuelle du groupe de ressources :
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, admin:osProfile.adminUsername}"
[
{
"Name": "Test-2",
"OS": "Linux",
"admin": "sttramer"
},
{
"Name": "TestVM",
"OS": "Linux",
"admin": "azureuser"
},
{
"Name": "WinTest",
"OS": "Windows",
"admin": "winadmin"
}
]
Lorsqu’ils sont combinés au --output table
format de sortie, les noms de colonnes correspondent à la displayKey
valeur du hachage de sélection multiple, ce qui facilite la consultation des informations.
az vm list --resource-group QueryDemo --query "[].{Name:name, OS:storageProfile.osDisk.osType, Admin:osProfile.adminUsername}" --output table
Name OS Admin
------- ------- ---------
Test-2 Linux sttramer
TestVM Linux azureuser
WinTest Windows winadmin
Étapes suivantes
Pour en savoir plus sur les requêtes JMESPath, consultez le didacticiel JMESPath.
Pour en savoir plus sur les autres concepts d’Azure CLI mentionnés dans cet article, consultez :