Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure CLI používá --query
parametr ke spuštění dotazu JMESPath na výsledky příkazů. JMESPath je dotazovací jazyk pro JSON, který umožňuje vybrat a upravit data z výstupu rozhraní příkazového řádku.
Všechny příkazy v Azure CLI podporují --query
parametr. Tento článek popisuje, jak používat funkce JMESPath a uvádí příklady dotazů. Seznamte se s koncepty JMESPath, které jsou užitečné pro dotazování na kartě Koncepty. Podívejte se na příklady dotazů JMESPath na kartě Příklady.
Azure CLI používá dotazy k výběru a úpravě výstupu příkazů Azure CLI. Dotazy se spouští na straně klienta na vráceném objektu JSON příkazu Azure CLI před jakýmkoliv formátováním zobrazení.
Escape znaky potřebné v dotazech se liší pro různá prostředí. Doporučuje se spouštět dotazy v Azure Cloud Shellu nebo cmd, protože tyto prostředí vyžadují méně řídicích znaků. Pokud chcete zajistit, aby příklady dotazů byly syntakticky správné, vyberte kartu pro prostředí, které používáte.
Výsledky rozhraní příkazového řádku slovníku a seznamu
Výsledky příkazů rozhraní příkazového řádku se nejprve považují za JSON pro dotazy, i když je výstupní formát něco jiného než JSON. Výsledky CLI jsou buď pole JSON, nebo slovník. Pole jsou posloupnosti objektů, které lze indexovat, a slovníky jsou neuspořádané objekty, ke kterým se přistupuje pomocí klíčů.
Toto je příklad pole:
[
1,
2,
3
]
Toto je příklad slovníku:
{
"isRunning": false,
"time": "12:00",
"number": 1
}
Příkazy, které by mohly vrátit více než jeden objekt, vrátí pole a příkazy, které vždy vrátí pouze jeden objekt vrátí slovník.
Získejte vlastnosti ve slovníku
Při práci s výsledky slovníku můžete přistupovat k vlastnostem z nejvyšší úrovně pouze pomocí klíče. Znak .
(dílčí výraz) slouží k přístupu k vlastnostem vnořených slovníků. Než začnete zavádět dotazy, podívejte se na nemodifikovaný výstup příkazu az vm show :
az vm show --resource-group QueryDemo --name TestVM
Příkaz vypíše slovník. Nějaký obsah byl vynechán.
{
"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
},
....
}
Následující příkaz získá veřejné klíče SSH autorizované pro připojení k virtuálnímu počítači přidáním dotazu:
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"
}
]
Řetězce dotazů rozlišují malá a velká písmena. Například změna souboru osProfile na OsProfile v předchozím dotazu nevrací správné výsledky.
Získání více hodnot
Pokud chcete získat více než jednu vlastnost, umístěte výrazy oddělené čárkami do hranatých závorek [ ]
( seznam s vícenásobným výběrem). Následující příkaz načte název virtuálního počítače, uživatele správce a klíč SSH najednou:
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"
]
Tyto hodnoty jsou uvedeny ve výsledném poli v pořadí, v jakém byly uvedeny v dotazu. Vzhledem k tomu, že výsledkem je pole, nejsou k výsledkům přidruženy žádné klíče. Pokud chcete místo pole získat slovník, přečtěte si další část.
Přejmenování vlastností v dotazu
Pokud chcete při dotazování na více hodnot získat slovník místo pole, použijte { }
operátor (multiselect hash).
Formát pro vícenásobný výběr hašovacího kódu je {displayName:JMESPathExpression, ...}
.
displayName
je řetězec zobrazený ve výstupu a JMESPathExpression
je výraz JMESPath, který se má vyhodnotit. Upravte příklad z posledního oddílu tak, že změníte seznam s vícenásobným výběrem na hodnotu hash:
Poznámka:
Pokud se rozhodnete použít mezeru v názvu nového sloupce, například VM name
místo VMName
toho, změní se pravidla uvozování v prostředí Bash i PowerShell. Příklady najdete v tématu Předávání mezer v parametrech 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"
}
Získejte vlastnosti v poli
Pole nemá žádné vlastní vlastnosti, ale lze ho indexovat. Tato funkce je zobrazena v posledním příkladu s výrazem publicKeys[0]
, který získá první prvek publicKeys
pole. Neexistuje žádná záruka, že je výstup rozhraní příkazového řádku seřazený, takže nepoužívejte indexování, pokud si nejste jisti pořadím nebo nezajímáte, který prvek získáte. Pokud chcete získat přístup k vlastnostem prvků v poli, proveďte jednu ze dvou operací: zploštění nebo filtrování. Tato část popisuje, jak zploštit pole.
Zploštění pole se provádí pomocí operátoru []
JMESPath. Všechny výrazy po operátoru []
se použijí na každý prvek v aktuálním poli.
Pokud se []
objeví na začátku dotazu, zploští výsledek příkazu rozhraní příkazového řádku.
az vm list
Výsledky této funkce je možné zkontrolovat.
Následující dotaz získá název, operační systém a název správce pro každý virtuální počítač ve skupině prostředků:
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"
}
]
Jakékoli pole lze zploštět, ne jenom výsledek nejvyšší úrovně vrácený příkazem. V poslední části se výraz osProfile.linuxConfiguration.ssh.publicKeys[0].keyData
použil k získání veřejného klíče SSH pro přihlášení. Pokud chcete získat každý veřejný klíč SSH, můžete místo toho zapsat výraz jako osProfile.linuxConfiguration.ssh.publicKeys[].keyData
.
Tento výraz dotazu zploští pole osProfile.linuxConfiguration.ssh.publicKeys
a poté spustí výraz keyData
na každém prvku:
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"
]
}
Filtrování polí pomocí logických výrazů
Druhá operace používaná k získání dat z pole je filtrování. Filtrování se provádí pomocí operátoru [?...]
JMESPath.
Tento operátor přebírá predikát jako svůj obsah. Predikát je libovolný výrok (včetně logických vlastností), který lze vyhodnotit na true
nebo false
. Výrazy, ve kterých se predikát vyhodnotí jako true
, jsou zahrnuty ve výstupu.
První dotaz ukazuje, jak zobrazit seznam názvů všech předplatných Azure připojených k vašemu účtu, jehož isDefault
vlastnost je pravdivá. Druhý a třetí dotaz ukazuje dva různé způsoby výpisu všech předplatných, jejichž isDefault
vlastnost je 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 nabízí standardní porovnávací a logické operátory. Patří mezi ně <
, , <=
>
, >=
, ==
a !=
. JMESPath také podporuje logické a (&&
) nebo (||
) a ne (!
). Výrazy lze seskupit do závorek, což umožňuje složitější predikátové výrazy. Úplné podrobnosti o predikátech a logických operacích najdete ve specifikaci JMESPath.
V poslední části jste zploštili pole, abyste získali úplný seznam všech virtuálních počítačů ve skupině zdrojů. Při použití filtrů je možné tento výstup omezit jenom na virtuální počítače s Linuxem:
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
Můžete také filtrovat číselné hodnoty, například velikost disku s operačním systémem. Následující příklad ukazuje, jak filtrovat seznam virtuálních počítačů tak, aby zobrazovaly virtuální počítače s velikostí disku větší nebo rovnou 50 GB.
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
U velkých polí může být rychlejší použít filtr před výběrem dat.
Důležité
V JMESPath jsou řetězce vždy obklopeny jednoduchými uvozovkami ('
) nebo řídicími znaky (`
). Pokud jako součást řetězce v predikáte filtru použijete dvojité uvozovky, zobrazí se prázdný výstup.
Funkce JMESPath
JMESPath má také integrované funkce, které umožňují složitější dotazy a úpravu výstupu dotazu. Tato část se zaměřuje na použití funkcí JMESPath k vytváření dotazů, zatímco v části Úprava výstupu pomocí funkcí je ukázáno, jak pomocí funkcí upravit výstup.
Výrazy se vyhodnocují před voláním funkce, takže samotné argumenty mohou být výrazy JMESPath. Následující příklady ukazují tento koncept pomocí contains(string, substring)
, který kontroluje, zda řetězec obsahuje podřetězce. Tento příkaz najde všechny virtuální počítače používající úložiště SSD pro disk s operačním systémem:
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"
}
]
Výrazy s rourou
|
Podobně jako se používá na příkazovém řádku, lze |
použít v dotazech JMESPath k aplikaci výrazů na průběžné výsledky dotazu. Můžeme také použít |
k rozdělení složitých dotazů do jednodušších dílčích výrazů. Pokud chcete dotaz zkrátit z předchozí části, použijte |
filtr po zploštění a výběru dat.
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"
}
]
Úplný seznam funkcí najdete ve specifikaci JMESPath – integrované funkce .
Manipulace s výstupem pomocí funkcí
Funkce JMESPath mají také další účel, který slouží k práci s výsledky dotazu. Libovolná funkce, která vrací nebooleanovou hodnotu, změní výsledek výrazu. Data můžete například seřadit podle hodnoty vlastnosti pomocí sort_by(array, &sort_expression)
. JMESPath používá speciální operátor , &
pro výrazy, které by se měly vyhodnotit později jako součást funkce. Další příklad ukazuje, jak seřadit seznam virtuálních počítačů podle velikosti disku s operačním systémem:
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
Úplný seznam funkcí najdete ve specifikaci JMESPath – integrované funkce .
Formátování výsledků dotazu
Azure CLI jako výchozí výstupní formát používá JSON, ale různé formáty výstupu můžou lépe vyhovovat dotazu v závislosti na účelu a výsledcích. Dotazy se vždy spustí na výstupu JSON
a pak se naformátují.
Tato sekce probere formáty tsv
a table
a některé případy použití pro každý formát. Další informace o výstupních formátech najdete v tématu Formáty výstupu pro příkazy Azure CLI.
Formát výstupu TSV
Výstupní tsv
formát vrátí hodnoty oddělené tabulátory a novými řádky bez dalšího formátování, klíčů nebo jiných symbolů. Tento formát je užitečný, když je výstup uložený v parametru a používá se v jiném příkazu.
Jedním z případů použití pro tsv
formátování je dotazy, které načítají hodnotu z příkazu rozhraní příkazového řádku, jako je ID prostředku Azure nebo název prostředku, a ukládají hodnotu do místní proměnné prostředí. Ve výchozím nastavení se výsledky vrátí ve formátu JSON, což může být problém při práci s řetězci JSON uzavřenými ve "
znacích. Uvozovky nemusí být interpretovány prostředím, pokud je výstup příkazu přímo přiřazen k proměnné prostředí. Tento problém lze spatřit v následujícím příkladu, který přiřadí výsledek dotazu proměnné prostředí:
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername")
echo $USER
"azureuser"
K formátování použijte tsv
, jak je znázorněno v následujícím dotazu, abyste zabránili uzavření návratových hodnot s informacemi o typu.
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername" --output tsv)
echo $USER
azureuser
Formát výstupu tabulky
Formát table
vytiskne výstup jako tabulku ASCII, což usnadňuje čtení a skenování. V tabulce nejsou zahrnutá všechna pole, takže tento formát se nejlépe používá jako přehled dat, který lze prohledávat člověkem. Pole, která nejsou zahrnutá v tabulce, je stále možné filtrovat jako součást dotazu.
Poznámka:
Některé klíče se vyfiltrují a nevytisknou v zobrazení tabulky. Tyto klíče jsou id
, type
a etag
. Pokud chcete tyto hodnoty zobrazit, můžete změnit název klíče v multiselect hash.
az vm show --resource-group QueryDemo --name TestVM --query "{objectID:id}" --output table
K předvedení tohoto konceptu můžeme použít předchozí dotaz. Původní dotaz vrátil objekt JSON obsahující název, operační systém a název správce pro každý virtuální počítač ve skupině prostředků:
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"
}
]
V kombinaci s výstupním --output table
formátem se názvy sloupců shodují s displayKey
hodnotou multiselect hash, což usnadňuje rychlé procházení informací.
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
Další kroky
Další informace o dotazech JMESPath najdete v kurzu JMESPath.
Další informace o dalších konceptech Azure CLI uvedených v tomto článku najdete tady: