Bagaimana mengkonversi kueri WQL SCCM ke laporan SQL

Untuk memilih berbagai data di komputer, pengguna, perangkat di database System Center Configuration Manager, dan membuat koleksi, Anda harus terus-menerus membuat kueri yang berbeda. Di editor kueri SCCM (editor kueri) ada panduan yang cukup nyaman untuk menavigasi berbagai kelas dan atribut. Untuk presentasi informasi yang diperlukan bagi pengguna yang lebih nyaman, saya lebih suka menggunakan laporan web SCCM (laporan). Masalahnya adalah bahwa jika Anda ingin membuat laporan web berdasarkan permintaan SCCM yang diterima, Anda akan menghadapi kenyataan bahwa kode permintaan SCCM tidak dapat digunakan untuk membuat laporan.

Faktanya adalah bahwa permintaan dalam ConfigMgr dihasilkan dalam bahasa WQL, dan dalam laporan perlu menggunakan permintaan langsung ke database MSSQL di SQL. Meskipun sintaks WQL dan SQL agak mirip, Anda tidak bisa secara langsung mengkonversi kueri WQL ke SQL. Pada artikel ini saya akan menunjukkan cara termudah dan tercepat untuk mendapatkan kode kueri SQL dari kueri WQL di SCCM.

Saya perlu membuat laporan web untuk pengguna, yang seharusnya berisi komputer yang tidak mati di malam hari. Saya mendapat pertanyaan berikut (permintaan):

pilih SMS_R_System.NetbiosName yang berbeda, SMS_R_System.LastLogonUserName, SMS_R_System.IPAddresses, SMS_R_System.ADSiteName, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime, SMS_G_System_COMPUTER_SYSTEM.Model dari SMS_R_System bergabung dalam SMS_G_System_WORKSTATION_STATUS pada SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId bergabung dalam SMS_G_System_OPERATING_SYSTEM di SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId bergabung dalam SMS_G_System_COMPUTER_SYSTEM pada SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId mana DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Seperti yang Anda lihat, vs kami akan menganggap bahwa komputer pengguna tidak mati di malam hari jika tanggal pemindaian terakhir (LastHardwareScan) tidak sama dengan tanggal boot OS (LastBootUpTime).

Sekarang dari kueri ini, Anda perlu membuat kueri SQL untuk membuat laporan dengan daftar komputer dan pengguna. Mengonversi kueri ini ke SQL secara manual cukup sulit (Anda tentu saja dapat menggunakan SQL Server Report Builder untuk membuat kode kueri, tetapi ada cara yang lebih mudah). Faktanya adalah bahwa mesin ConfigMgr, ketika mengeksekusi query WQL, menerjemahkannya ke dalam sintaksis t-SQL menggunakan penyedia WMI dan mengirimkan permintaan ke database. Semua operasi ini dicatat. smsprov.log.

Jadi, penuhi permintaan Anda dan buka file \ ConfigMgr \ Logs \ smsprov.log. Temukan kueri Anda di log. Itu harus dimulai dengan Jalankan WQL =. Sedikit lebih rendah, perhatikan garis yang dimulai dengan Jalankan SQL =. Ini persis kueri yang dikonversi ke dalam bahasa SQL. Salin kode kueri SQL. Anda dapat menggunakannya untuk membuat laporan web SCCM atau dalam Pembuat Laporan.

Berbeda SMS_R_System.Netbios_Name0, SMS_R_System.User_Name0, SMS_R_System.AD_Site_Name0, ___ System_WORKSTATION_STATUS0.LastHWScan, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0, SMS_G_System_COMPUTER_SYSTEM.Model0 dari System_DISC AS SMS_R_System INNER JOIN WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey INNER JOIN Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey INNER JOIN Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM ON SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey INNER JOIN _RES_COLL_CM100213 AS SMS_CM_RES_COLL_CM100213 ON SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey mana DATEPART (dayofyear, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (dayofyear, ___ System_WORKSTATION_STATUS0.LastHWScan)

Karena kueri WQL awal terbatas pada koleksi SCCM, kueri SQL juga berisi batasan pada ID koleksi (dalam contoh ini CM100213).

Saat membuat laporan SCCM, kesalahan mungkin muncul di halaman web:

Terjadi kesalahan saat laporan dijalankan. Rinciannya adalah sebagai berikut:
Izin SELECT ditolak pada objek '_RES_COLL_CM100213', basis data 'SMS_CM1', skema 'dbo'.
Nomor Kesalahan: -2147217911
Sumber: Penyedia DB OLE Microsoft untuk SQL Server
Kesalahan Asli: 229

Dilihat oleh kesalahan, pengguna saat ini tidak diberikan peran db_datareader untuk mengakses tabel database. Untuk memperbaiki kesalahan ini, Anda harus secara manual memberikan akses ke tabel atau melihat di database SCCM. Untuk melakukan ini, mulai SQL Server Management Studio, sambungkan ke database SCCM, di bagian Tables atau View, cari tabel yang ditentukan (dalam contoh ini _RES_COLL_CM100213) dan buka propertinya..

Pada tab Izin, berikan izin Pilih untuk smsschm_user dan webreport_approle.

Coba perbarui laporan web di browser, jika kesalahan "Izin SELECT ditolak" muncul lagi menunjukkan tabel lain, Anda perlu memberi mereka akses yang sama.