Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure CLI menggunakan --query parameter untuk menjalankan kueri JMESPath pada hasil perintah. JMESPath adalah bahasa kueri untuk JSON, memberi Anda kemampuan untuk memilih dan memodifikasi data dari output CLI.
Semua perintah di Azure CLI mendukung --query parameter . Artikel ini membahas cara menggunakan fitur JMESPath dan memberikan contoh kueri. Pelajari tentang konsep JMESPath yang berguna untuk kueri di bawah tab konsep. Lihat contoh kueri JMESPath di bawah tab contoh.
Azure CLI menggunakan kueri untuk memilih dan memodifikasi output perintah Azure CLI. Kueri dijalankan di sisi klien pada objek JSON yang dikembalikan oleh perintah Azure CLI sebelum pemformatan tampilan dilakukan.
Karakter pelarian yang dibutuhkan dalam kueri berbeda untuk lingkungan yang berbeda. Disarankan untuk menjalankan kueri di Azure Cloud Shell atau cmd karena shell ini memerlukan lebih sedikit karakter escape. Untuk memastikan contoh kueri benar secara sintaksis, pilih tab untuk shell yang Anda gunakan.
Kamus dan daftar hasil CLI
Hasil perintah CLI pertama kali diperlakukan sebagai JSON untuk kueri, bahkan ketika format output adalah sesuatu selain JSON. Hasil CLI adalah array JSON atau kamus. Array adalah urutan objek yang dapat diindeks, dan kamus adalah objek yang tidak diurutkan yang diakses dengan kunci.
Ini adalah contoh array:
[
1,
2,
3
]
Ini adalah contoh kamus:
{
"isRunning": false,
"time": "12:00",
"number": 1
}
Perintah yang dapat mengembalikan lebih dari satu objek akan mengembalikan array, dan perintah yang selalu mengembalikan hanya satu objek akan mengembalikan dictionary.
Mendapatkan properti dalam kamus
Bekerja dengan hasil kamus, Anda dapat mengakses properti dari tingkat atas hanya dengan kunci. Karakter . (subekspresi) digunakan untuk mengakses properti kamus berlapis. Sebelum memperkenalkan kueri, lihat output yang tidak dimodifikasi dari perintah az vm show :
az vm show --resource-group QueryDemo --name TestVM
Perintah mengeluarkan kamus. Beberapa konten telah dihilangkan.
{
"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
},
....
}
Perintah berikut mendapatkan kunci publik SSH yang diotorisasi untuk menyambungkan ke VM dengan menambahkan kueri:
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"
}
]
String kueri sensitif terhadap huruf besar/kecil. Misalnya, mengubah 'osProfile' menjadi 'OsProfile' di kueri sebelumnya tidak mengembalikan hasil yang benar.
Mendapatkan beberapa nilai
Untuk memperoleh lebih dari satu properti, masukkan ekspresi yang dipisahkan oleh koma ke dalam tanda kurung siku [ ] (sebagai daftar multipilih). Perintah berikut mendapatkan nama VM, pengguna admin, dan kunci SSH sekaligus:
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"
]
Nilai-nilai ini tercantum dalam array hasil dalam urutan yang diberikan dalam kueri. Karena hasilnya adalah array, tidak ada kunci yang terkait dengan hasilnya. Untuk mendapatkan kamus alih-alih array, lihat bagian berikutnya.
Mengganti nama properti dalam kueri
Untuk mendapatkan kamus alih-alih array saat mengkueri beberapa nilai, gunakan { } operator (hash multipilih). Format untuk hash pemilihan jamak adalah {displayName:JMESPathExpression, ...}.
displayName adalah string yang ditampilkan dalam output, dan JMESPathExpression merupakan ekspresi JMESPath untuk dievaluasi. Ubah contoh dari bagian terakhir dengan mengubah daftar multipilih menjadi hash:
Nota
Jika Anda memilih untuk menggunakan spasi dalam nama kolom baru, seperti VM name alih-alih VMName, aturan kutipan berubah di Bash dan PowerShell. Lihat Meneruskan spasi di parameter Azure CLI misalnya.
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"
}
Mengambil properti dari array
Array tidak memiliki propertinya sendiri, tetapi dapat diindeks. Fitur ini ditampilkan dalam contoh terakhir dengan ekspresi publicKeys[0], yang mendapatkan elemen pertama dari publicKeys array.
Tidak ada jaminan bahwa output CLI diurutkan, jadi hindari menggunakan pengindeksan kecuali Anda yakin dengan urutan atau tidak terlalu mempersoalkan elemen mana yang Anda peroleh. Untuk mengakses properti elemen dalam array, Anda melakukan salah satu dari dua operasi: meratakan atau memfilter. Bagian ini mencakup cara meratakan array.
Untuk meratakan sebuah array, gunakan operator JMESPath. Semua ekspresi setelah [] operator diterapkan ke setiap elemen dalam array saat ini. Jika [] muncul di awal kueri, ini menyederhanakan hasil perintah CLI. Hasil dari az vm list dapat diperiksa dengan fitur ini. Kueri berikut mendapatkan nama, OS, dan nama administrator untuk setiap VM dalam grup sumber daya:
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"
}
]
Setiap array dapat diratakan, tidak hanya hasil tingkat atas yang dikembalikan oleh perintah. Di bagian terakhir, ekspresi osProfile.linuxConfiguration.ssh.publicKeys[0].keyData digunakan untuk mendapatkan kunci umum SSH untuk masuk. Untuk mendapatkan setiap kunci publik SSH, ekspresi dapat ditulis sebagai osProfile.linuxConfiguration.ssh.publicKeys[].keyData. Ekspresi kueri ini meratakan osProfile.linuxConfiguration.ssh.publicKeys array, lalu menjalankan keyData ekspresi pada setiap elemen:
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"
]
}
Memfilter array dengan ekspresi boolean
Operasi lain yang digunakan untuk mendapatkan data dari array adalah pemfilteran. Pemfilteran dilakukan dengan [?...] operator JMESPath. Operator ini mengambil predikat sebagai isinya. Predikat adalah pernyataan apa pun (termasuk properti Boolean) yang dapat dievaluasi ke true atau false.
Ekspresi dengan predikat yang dievaluasi menjadi true disertakan dalam output.
Kueri pertama menunjukkan cara mencantumkan nama semua langganan Azure yang tersambung ke akun Anda yang propertinya isDefault benar. Kueri kedua dan ketiga menunjukkan dua cara berbeda untuk mencantumkan semua langganan yang propertinya isDefault salah.
# 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 menawarkan perbandingan standar dan operator logis. Ini termasuk <, <=, >, >=, ==, dan !=. JMESPath juga mendukung logis dan (&&), atau (||), dan bukan (!). Ekspresi dapat dikelompokkan dalam tanda kurung, memungkinkan ekspresi predikat yang lebih kompleks. Untuk detail lengkap tentang predikat dan operasi logis, lihat spesifikasi JMESPath.
Di bagian terakhir, Anda meratakan array untuk mendapatkan daftar lengkap semua VM dalam grup sumber daya. Dengan penggunaan filter, output ini hanya dapat dibatasi untuk VM Linux:
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
Anda juga dapat memfilter nilai numerik seperti ukuran disk OS. Contoh berikut menunjukkan cara memfilter daftar VM untuk menampilkan VM dengan ukuran disk yang lebih besar dari atau sama dengan 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
Untuk array besar, mungkin lebih cepat untuk menerapkan filter sebelum memilih data.
Penting
Dalam JMESPath, string selalu dikelilingi oleh tanda kutip tunggal (') atau karakter escape (`).
Jika Anda menggunakan tanda kutip ganda sebagai bagian dari string dalam predikat filter, Anda akan mendapatkan output kosong.
Fungsi JMESPath
JMESPath juga memiliki fungsi bawaan yang memungkinkan kueri yang lebih kompleks dan untuk memodifikasi output kueri. Bagian ini berfokus pada penggunaan fungsi JMESPath untuk membuat kueri sementara bagian Memanipulasi output dengan fungsi menunjukkan cara menggunakan fungsi untuk memodifikasi output.
Ekspresi dievaluasi sebelum memanggil fungsi, sehingga argumen itu sendiri dapat menjadi ekspresi JMESPath. Contoh berikut menunjukkan konsep ini dengan menggunakan contains(string, substring), yang memeriksa untuk melihat apakah string berisi substring. Perintah ini menemukan semua VM menggunakan penyimpanan SSD untuk disk OS mereka:
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"
}
]
Ekspresi pipa
Mirip dengan cara | digunakan dalam baris perintah, | dapat digunakan dalam kueri JMESPath untuk menerapkan ekspresi ke hasil kueri perantara. Kita juga dapat menggunakan | untuk memecah kueri kompleks menjadi subekspresi yang lebih sederhana. Untuk mempersingkat kueri dari bagian sebelumnya, gunakan | untuk menerapkan filter setelah meratakan dan memilih data.
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"
}
]
Lihat spesifikasi JMESPath - Fungsi Bawaan untuk daftar lengkap fungsi.
Memanipulasi output dengan fungsi
Fungsi JMESPath juga memiliki tujuan lain, yaitu mengoperasikan hasil kueri. Fungsi apa pun yang mengembalikan nilai nonboolean mengubah hasil ekspresi. Misalnya, Anda dapat mengurutkan data menurut nilai properti dengan sort_by(array, &sort_expression). JMESPath menggunakan operator khusus, &, untuk ekspresi yang harus dievaluasi nanti sebagai bagian dari fungsi. Contoh berikutnya menunjukkan cara mengurutkan daftar VM menurut ukuran disk OS:
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
Lihat spesifikasi JMESPath - Fungsi Bawaan untuk daftar lengkap fungsi.
Memformat hasil kueri
Azure CLI menggunakan JSON sebagai format output defaultnya, namun format output yang berbeda mungkin lebih sesuai dengan kueri tergantung pada tujuan dan hasilnya. Kueri selalu dijalankan pada output JSON terlebih dahulu lalu diformat.
Bagian ini akan membahas tsv dan table memformat dan beberapa kasus penggunaan untuk setiap format. Untuk informasi selengkapnya tentang format output, lihat Format output untuk perintah Azure CLI.
Format output TSV
tsv Format output mengembalikan nilai yang dipisahkan tab dan baris baru tanpa pemformatan tambahan, kunci, atau simbol lainnya. Format ini berguna ketika output disimpan dalam parameter dan digunakan dalam perintah lain.
Satu kasus penggunaan untuk tsv pemformatan adalah kueri yang mengambil nilai dari perintah CLI, seperti ID sumber daya Azure atau nama sumber daya, dan menyimpan nilai dalam variabel lingkungan lokal. Secara default, hasilnya dikembalikan dalam format JSON, yang mungkin menjadi masalah saat berhadapan dengan string JSON yang diapit " karakter. Tanda kutip mungkin tidak ditafsirkan oleh shell jika hasil keluaran perintah langsung diberikan ke variabel lingkungan. Masalah ini terlihat dalam contoh berikut yang menetapkan hasil kueri ke variabel lingkungan:
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername")
echo $USER
"azureuser"
Gunakan pemformatan tsv, seperti yang ditunjukkan dalam kueri berikut, untuk mencegah nilai pengembalian tertutup oleh informasi jenis.
USER=$(az vm show --resource-group QueryDemo --name TestVM --query "osProfile.adminUsername" --output tsv)
echo $USER
azureuser
Format tabel keluaran
Format table mencetak output sebagai tabel dalam format ASCII, sehingga mudah untuk dibaca dan dipindai. Tidak semua bidang disertakan dalam tabel sehingga format ini paling baik digunakan sebagai gambaran umum data yang dapat dicari manusia. Bidang yang tidak disertakan dalam tabel masih bisa difilter sebagai bagian dari kueri.
Nota
Kunci tertentu difilter dan tidak dicetak dalam tampilan tabel. Kunci ini adalah id, type, dan etag. Untuk melihat nilai-nilai ini, Anda dapat mengubah nama kunci dalam multiselect hash.
az vm show --resource-group QueryDemo --name TestVM --query "{objectID:id}" --output table
Kita dapat menggunakan kueri sebelumnya untuk menunjukkan konsep ini. Kueri asli mengembalikan objek JSON yang berisi nama, OS, dan nama administrator untuk setiap VM dalam grup sumber daya:
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"
}
]
Ketika dikombinasikan dengan format output --output table, nama kolom cocok dengan nilai hash multipilih displayKey sehingga lebih mudah untuk melihat sekilas informasi:
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
Langkah selanjutnya
Untuk mempelajari selengkapnya tentang kueri JMESPath, lihat Tutorial JMESPath.
Untuk mempelajari selengkapnya tentang konsep Azure CLI lain yang disebutkan dalam artikel ini lihat: