Hogyan lehet átalakítani a WQL SCCM lekérdezést SQL jelentéské

A számítógépekről, a felhasználókról és az eszközökről a System Center Configuration Manager adatbázisban található különféle adatok kiválasztásához és gyűjtemények készítéséhez folyamatosan különféle lekérdezéseket kell létrehoznia. Az SCCM lekérdezés-szerkesztőben (lekérdezés-szerkesztő) meglehetősen kényelmes varázsló található a különféle osztályok és attribútumok közötti navigáláshoz. A szükséges információk kényelmesebb bemutatása érdekében a felhasználók számára inkább az SCCM webes jelentéseket (jelentéseket) használom. A probléma az, hogy ha a beérkezett SCCM kérés alapján webes jelentést akar létrehozni, akkor azt a tényt tapasztalja, hogy az SCCM kérési kódot nem lehet felhasználni a jelentés készítésére.

A helyzet az, hogy a ConfigMgr-ben a lekérdezéseket a WQL nyelven generálják, és a jelentésekben közvetlenül az MSSQL adatbázishoz szükséges lekérdezéseket kell használni az SQL-ben. Noha a WQL és az SQL szintaxisa kissé hasonló, a WQL lekérdezést közvetlenül nem lehet konvertálni SQL-re. Ebben a cikkben bemutatom az SQL lekérdezési kód lekérdezésének legegyszerűbb és leggyorsabb módját egy WQL lekérdezésből az SCCM-ben.

El kellett készítenem egy internetes jelentést a felhasználók számára, amely tartalmaznia kellene azokat a számítógépeket, amelyek éjjel nem kapcsoltak ki. Megkaptam a következő lekérdezést (lekérdezést):

válasszuk külön SMS_R_System.NetbiosName, 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 származó SMS_R_System inner join SMS_G_System_WORKSTATION_STATUS a SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_COMPUTER_SYSTEM a SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId ahol DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Mint láthatja, akkor azt feltételezzük, hogy a felhasználó számítógépe nem kapcsolta ki éjjel, ha az utolsó vizsgálat (LastHardwareScan) dátuma nem egyezik az operációs rendszer indítási dátumával (LastBootUpTime)..

Ebből a lekérdezésből el kell generálnia egy SQL lekérdezést, hogy jelentést készítsen a számítógépek és a felhasználók listájával. A lekérdezés kézi konvertálása SQL-ként meglehetősen nehéz (természetesen az SQL Server Report Builder segítségével is felépítheti a lekérdezési kódot, de van egy könnyebb módszer). A helyzet az, hogy a ConfigMgr motor a WQL lekérdezések végrehajtásakor a WMI szolgáltató segítségével lefordítja azokat t-SQL szintaxisba, és elküldi a kérést az adatbázishoz. Ezeket a műveleteket naplózza. smsprov.log.

Tehát teljesítse a kérését, és nyissa meg a \ ConfigMgr \ Logs \ smsprov.log fájlt. Keresse meg a lekérdezést a naplóban. Kezdnie kell Végezzen WQL = parancsot. Kicsit alacsonyabban, figyeljen arra a sorra, amely kezdődik Végezzen SQL = parancsot. Pontosan ez a lekérdezés konvertálva van az SQL nyelvre. Másolja az SQL lekérdezési kódot. Használhatja SCCM webes jelentés készítéséhez vagy a Report Builder alkalmazásban.

Eltérő 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 származó 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 belső összekapcsolás Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM BE SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey belső összekapcsolás _RES_COLL_CM100213 AS SMS_CM_RES_COLL_CM100213 BE SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey ahol DATEPART (DAYOFYEAR, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (DAYOFYEAR, ___ System_WORKSTATION_STATUS0.LastHWScan)

mert a kezdeti WQL lekérdezés az SCCM gyűjteményre korlátozódott, az SQL lekérdezés korlátozást tartalmaz a gyűjtemény azonosítójára is (ebben a példában CM100213).

SCCM jelentés generálásakor hiba jelentkezhet a weblapon:

Hiba történt a jelentés futtatásakor. A részletek a következők:
A SELECT engedélyt megtagadták az '_RES_COLL_CM100213' objektumon, az 'SMS_CM1' adatbázison, 'dbo' sémán.
Hibakód: -2147217911
Forrás: Microsoft OLE DB szolgáltató az SQL Server számára
Natív hiba: 229

A hiba alapján eldöntve, hogy az aktuális felhasználó nem rendelkezik a db_datareader szerepkörrel az adatbázis-tábla eléréséhez. A hiba kijavításához manuálisan kell megadnia a hozzáférést a SCCM-adatbázis táblázatához vagy nézetéhez. Ehhez indítsa el az SQL Server Management Studio alkalmazást, csatlakozzon az SCCM adatbázishoz, a Táblázatok vagy a Nézet szakaszban, keresse meg a megadott táblázatot (ebben a példában _RES_COLL_CM100213), és nyissa meg annak tulajdonságait.

Az Engedélyek lapon engedélyezze a Kiválasztási engedélyeket smsschm_user és webreport_approle.

Próbálja meg frissíteni a webes jelentést a böngészőben, ha a „A SELECT engedély megtagadva” hiba ismét megjelenik, jelezve más táblákat, ugyanúgy hozzáférést kell biztosítani hozzájuk.