Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure CLI a --query
paraméterrel hajt végre egy JMESPath-lekérdezést a parancsok eredményein. A JMESPath a JSON lekérdezési nyelve, amely lehetővé teszi az adatok cli-kimenetből való kiválasztását és módosítását.
Az Azure CLI minden parancsa támogatja a paramétert --query
. Ez a cikk a JMESPath funkcióinak használatát ismerteti, és példákat ad a lekérdezésekre. Ismerje meg a JMESPath fogalmait, amelyek a fogalmak lapon való lekérdezéshez hasznosak. A példák lap JMESPath-lekérdezéseinek példáit tekinti meg.
Az Azure CLI lekérdezésekkel választja ki és módosítja az Azure CLI-parancsok kimenetét. A lekérdezések ügyféloldali végrehajtása az Azure CLI-parancs visszaadott JSON-objektumán történik a megjelenítési formázás előtt.
A lekérdezésekben szükséges feloldó karakterek különböző környezetekben különböznek. Javasoljuk, hogy lekérdezéseket futtasson az Azure Cloud Shellben vagy cmd-ben, mert ezek a shell-ek kevesebb escape karaktert igényelnek. Annak biztosítása érdekében, hogy a lekérdezési példák szintaktikailag helyesek legyenek, válassza ki a használt shell fület.
Szótár és lista a parancssori felület eredményeiről
A parancssori felület parancseredményei először JSON-ként lesznek kezelve a lekérdezésekhez, még akkor is, ha a kimeneti formátum nem JSON. A parancssori felület eredményei egy JSON-tömb vagy szótár. A tömbök indexelhető objektumok sorozatai, a szótárak pedig kulcsokkal elérhető rendezetlen objektumok.
Ez egy példa egy tömbre:
[
1,
2,
3
]
Ez egy példa egy szótárra:
{
"isRunning": false,
"time": "12:00",
"number": 1
}
Azok a parancsok, amelyek több objektumot is visszaadhatnak, tömböt adnak vissza, és azok a parancsok, amelyek mindig csak egyetlen objektumot adnak vissza, egy szótárt adnak vissza.
Tulajdonságok lekérése szótárban
A szótár eredményeivel a legfelső szinten lévő tulajdonságokat csak a kulccsal érheti el. A .
(subexpression) karakter a beágyazott szótárak tulajdonságainak eléréséhez használható. A lekérdezések bevezetése előtt tekintse meg az az vm show parancs nem módosított kimenetét:
az vm show --resource-group QueryDemo --name TestVM
A parancs egy szótárt ad ki. Néhány tartalom kimaradt.
{
"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
},
....
}
Az alábbi parancs lekéri a virtuális géphez való csatlakozáshoz engedélyezett nyilvános SSH-kulcsokat egy lekérdezés hozzáadásával:
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"
}
]
A lekérdezési sztringek megkülönböztetik a kis- és nagybetűket. Ha például az előző lekérdezésben az "osProfile" értéket "OsProfile" értékre módosítja, az nem a megfelelő eredményeket adja vissza.
Több érték lekérése
Ha egynél több tulajdonságot szeretne lekérni, a kifejezéseket vesszővel elválasztva helyezze szögletes zárójelekbe [ ]
( több kijelölési listába). A következő parancs egyszerre lekéri a virtuális gép nevét, rendszergazdai felhasználóját és SSH-kulcsát:
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"
]
Ezek az értékek az eredménytömbben a lekérdezésben megadott sorrendben jelennek meg. Mivel az eredmény tömb, az eredményekhez nincsenek kulcsok társítva. Ha tömb helyett szótárt szeretne lekérni, tekintse meg a következő szakaszt.
Tulajdonságok átnevezése lekérdezésben
Ha tömb helyett szótárt szeretne lekérni több érték lekérdezésekor, használja a { }
(többszörös kijelölésű kivonat) operátort.
A többszörös kijelöléshez használt hash formátuma: {displayName:JMESPathExpression, ...}
.
displayName
a kimenetben megjelenő sztring, és JMESPathExpression
a kiértékelendő JMESPath-kifejezés. Módosítsa a példát az utolsó szakaszból úgy, hogy a többszörös kijelölési listát kivonatra módosítja:
Megjegyzés:
Ha úgy dönt, hogy egy új oszlopnévben használ szóközt, például VM name
ahelyett VMName
, az idéző szabályok a Bashben és a PowerShellben is megváltoznak. Példákért lásd Szóközök átvitele az Azure CLI-paraméterekben című témakört.
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"
}
Tulajdonságok lekérése tömbben
A tömbök nem rendelkeznek saját tulajdonságokkal, de indexelhetők. Ez a jellemző az utolsó példában a publicKeys[0]
kifejezésben jelenik meg, amely a publicKeys
tömb első elemét kérdezi le. Nincs garancia arra, hogy a parancssori felület kimenete rendezve van, ezért kerülje az indexelés használatát, hacsak nem biztos a sorrendben, vagy nem érdekli, hogy melyik elemet kapja. A tömb elemeinek tulajdonságainak eléréséhez két művelet egyikét kell elvégeznie: az összesimítást vagy a szűrést. Ez a szakasz egy tömb lapítását ismerteti.
A tömbök lapítása a []
JMESPath operátorral történik. Az operátort []
követő összes kifejezés az aktuális tömb egyes elemeire lesz alkalmazva.
Ha a []
a lekérdezés elején jelenik meg, a parancssori felület parancs eredményét egyszerűsíti. Ezzel a funkcióval vizsgálhatók az az vm list
eredmények.
Az alábbi lekérdezés lekéri az erőforráscsoport egyes virtuális gépeinek nevét, operációs rendszerét és rendszergazdai nevét:
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"
}
]
Bármely tömb simítható, nem csak a parancs által visszaadott legfelső szintű eredmény. Az utolsó szakaszban a kifejezés osProfile.linuxConfiguration.ssh.publicKeys[0].keyData
az SSH nyilvános kulcsának lekérésére szolgál a bejelentkezéshez.
Az összes nyilvános SSH-kulcs lekéréséhez a kifejezés a következőképpen írhatóosProfile.linuxConfiguration.ssh.publicKeys[].keyData
: .
Ez a lekérdezési kifejezés simítja a osProfile.linuxConfiguration.ssh.publicKeys
tömböt, majd futtatja a kifejezést az keyData
egyes elemeken:
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"
]
}
Tömbök szűrése logikai kifejezésekkel
A tömb adatainak lekérésére használt másik művelet a szűrés. A szűrés a [?...]
JMESPath operátorral történik.
Ez az operátor egy predikátumot használ tartalomként. A predikátum bármely olyan állítás (beleértve a logikai tulajdonságokat is), amely lehet kiértékelhető vagy true
vagy false
értékre. Azokat a kifejezéseket, amelyekben a predikátum true
-re értékelődik ki, a kimenet tartalmazza.
Az első lekérdezés bemutatja, hogyan listázhatja a fiókhoz csatlakoztatott összes Azure-előfizetés nevét, amelynek isDefault
a tulajdonsága igaz. A második és a harmadik lekérdezés két különböző módon jeleníti meg az összes olyan előfizetést, amelynek isDefault
a tulajdonsága hamis.
# 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"
A JMESPath standard összehasonlítási és logikai operátorokat kínál. Ezek közé tartoznak a következők: <
, <=
, >
, >=
==
és !=
. A JMESPath emellett támogatja a logikai és (&&
), vagy (||
) és nem (!
). A kifejezések zárójelen belül csoportosíthatók, így összetettebb predikátumkifejezések is használhatók. A predikátumokkal és a logikai műveletekkel kapcsolatos részletes információkért tekintse meg a JMESPath specifikációját.
Az utolsó szakaszban kibontott egy tömböt, hogy megkapja az erőforráscsoport összes virtuális gépének teljes listáját. Szűrők használatával ez a kimenet csak Linux rendszerű virtuális gépekre korlátozható:
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
Numerikus értékeket is szűrhet, például az operációsrendszer-lemez méretét. Az alábbi példa bemutatja, hogyan szűrheti a virtuális gépek listáját az 50 GB-nál nagyobb vagy annál nagyobb lemezméretű gépek megjelenítésére.
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
Nagy tömbök esetén gyorsabb lehet a szűrő alkalmazása az adatok kiválasztása előtt.
Fontos
A JMESPath-ban a sztringeket mindig egysoros idézőjelek ('
) vagy escape karakterek (`
) veszik körül. Ha kettős idézőjeleket használ a karakterlánc részeként egy szűrő predikátumában, üres eredményt fog kapni.
JMESPath-függvények
A JMESPath beépített függvényekkel is rendelkezik, amelyek összetettebb lekérdezéseket és a lekérdezési kimenet módosítását teszik lehetővé. Ez a szakasz a JMESPath-függvények lekérdezések létrehozására való használatával foglalkozik, míg a Függvények kimenetének módosítása szakasz bemutatja, hogyan lehet függvényeket használni a kimenet módosítására.
A függvény meghívása előtt kiértékeljük a kifejezéseket, így maguk az argumentumok lehetnek JMESPath-kifejezések. Az alábbi példák ezt a fogalmat szemléltetik a következő paranccsal contains(string, substring)
, amely ellenőrzi, hogy egy sztring tartalmaz-e részsztringet. Ez a parancs megkeresi az operációsrendszer-lemezhez SSD-tárolót használó összes virtuális gépet:
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"
}
]
Csőkifejezések
Hasonlóan ahhoz, ahogy a parancssorban |
használható, a JMESPath-lekérdezések esetében |
is használható kifejezések alkalmazására a közbenső lekérdezési eredményekre. Az összetett lekérdezéseket egyszerűbb részexpressziókra is feloszthatjuk |
. Az előző szakasz lekérdezésének lerövidítéséhez alkalmazza |
a szűrőt az adatok kibontása és kiválasztása után.
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"
}
]
Tekintse meg a JMESPath specifikációját – Beépített függvények a függvények teljes listájához.
Kimenet manipulálása függvényekkel
A JMESPath-függvények más célra is szolgálnak, vagyis egy lekérdezés eredményein kell dolgozniuk. Bármely függvény, amely nemboolean értéket ad vissza, megváltoztatja egy kifejezés eredményét. Az adatokat például egy tulajdonságérték szerint rendezheti a következővel sort_by(array, &sort_expression)
: . A JMESPath egy speciális operátort használ a &
függvény részeként később kiértékelendő kifejezésekhez. A következő példa bemutatja, hogyan rendezhet virtuálisgép-listát operációsrendszer-lemezméret szerint:
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
Tekintse meg a JMESPath specifikációját – Beépített függvények a függvények teljes listájához.
Lekérdezési eredmények formázása
Az Azure CLI a JSON-t használja alapértelmezett kimeneti formátumként, azonban a különböző kimeneti formátumok jobban megfelelnek a lekérdezésnek a céltól és az eredményektől függően. A lekérdezések mindig először a JSON
kimeneten futnak, majd formázódnak.
Ez a szakasz tárgyalja a tsv
formázást és a table
az egyes formátumok használati eseteit. A kimeneti formátumokkal kapcsolatos további információkért tekintse meg az Azure CLI-parancsok kimeneti formátumait.
TSV kimeneti formátum
A tsv
kimeneti formátum tabulátorral és új vonallal elválasztott értékeket ad vissza további formázás, kulcsok és egyéb szimbólumok nélkül. Ez a formátum akkor hasznos, ha a kimenet egy paraméterben van tárolva, és egy másik parancsban használatos.
A formázás egyik tsv
használati esete az a lekérdezés, amely lekéri az értéket egy CLI-parancsból, például egy Azure-erőforrásazonosítóból vagy erőforrásnévből, és az értéket egy helyi környezeti változóban tárolja. Alapértelmezés szerint az eredmények JSON formátumban jelennek meg, ami problémát okozhat a karakterekbe "
zárt JSON-sztringek kezelésekor. Előfordulhat, hogy a rendszerhéj nem értelmezi az idézőjeleket, ha a parancs kimenete közvetlenül a környezeti változóhoz van rendelve. Ez a probléma az alábbi példában látható, amely egy környezeti változóhoz rendel egy lekérdezési eredményt:
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername")
echo $USER
"azureuser"
A tsv
formázást használja, ahogyan az alábbi lekérdezés mutatja, hogy megakadályozza a visszatérési értékek típusinformációkkal való körülzárását:
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername" --output tsv)
echo $USER
azureuser
Táblázat kimeneti formátum
A table
formátum ASCII-táblázatként nyomtatja ki a kimenetet, így könnyen olvasható és beolvasható. Nem minden mező szerepel a táblában, így ez a formátum az adatok ember által kereshető áttekintéseként használható legjobban. A táblában nem szereplő mezők továbbra is szűrhetők egy lekérdezés részeként.
Megjegyzés:
Bizonyos kulcsok ki vannak szűrve, és nem nyomtathatók ki a táblázatnézetben. Ezek a kulcsok id
, type
és etag
. Ezeknek az értékeknek a megtekintéséhez módosíthatja a kulcs nevét egy több kijelöléses kivonatban.
az vm show --resource-group QueryDemo --name TestVM --query "{objectID:id}" --output table
Ezt a fogalmat egy korábbi lekérdezéssel szemléltethetjük. Az eredeti lekérdezés egy JSON-objektumot adott vissza, amely tartalmazza az erőforráscsoport egyes virtuális gépeinek nevét, operációs rendszerét és rendszergazdai nevét:
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"
}
]
Amikor a kimeneti formátummal kombinálják, az --output table
oszlopnevek egyeznek a displayKey
többválasztós kivonat értékével, így az információk könnyebben áttekinthetők.
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
Következő lépések
A JMESPath-lekérdezésekről további információt a JMESPath-oktatóanyagban talál.
A cikkben említett egyéb Azure CLI-fogalmakkal kapcsolatos további információkért lásd: