Как да конвертирате WQL SCCM заявка в SQL отчет

За да изберете различни данни на компютри, потребители, устройства в базата данни на System Center Configuration Manager и да изградите колекции, постоянно трябва да създавате различни заявки. В редактора на заявки SCCM (редактор на заявки) има доста удобен съветник за навигация в различни класове и атрибути. За по-удобно представяне на необходимата информация на потребителите, предпочитам да използвам уеб отчети (отчети) на SCCM. Проблемът е, че ако искате да генерирате уеб отчет въз основа на получената заявка SCCM, ще срещнете факта, че кодът на SCCM заявка не може да се използва за изграждане на отчета.

Факт е, че заявките в ConfigMgr се генерират на езика WQL, а в отчетите е необходимо да се използват директно заявки към MSSQL базата данни в SQL. Въпреки че синтаксисът на WQL и SQL е донякъде сходен, не можете директно да конвертирате WQL заявка в SQL. В тази статия ще покажа най-лесния и бърз начин за получаване на код за SQL заявка от WQL заявка в SCCM.

Трябваше да създам уеб отчет за потребителите, който трябва да съдържа компютри, които не се изключват през нощта. Получих следното запитване (заявка):

изберете различен 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 от SMS_R_System вътрешната присъединят SMS_G_System_WORKSTATION_STATUS на SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId вътрешната присъединят SMS_G_System_OPERATING_SYSTEM на SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId вътрешната присъединят SMS_G_System_COMPUTER_SYSTEM на SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId където DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Както можете да видите, срещу ще приемем, че компютърът на потребителя не се е изключил през нощта, ако датата на последното сканиране (LastHardwareScan) не е равна на датата на зареждане на операционната система (LastBootUpTime).

Сега от тази заявка трябва да генерирате SQL заявка за изграждане на отчет със списък на компютри и потребители. Преобразуването на тази заявка в SQL е доста трудно (разбира се, можете да използвате SQL Server Report Builder, за да изградите кода на заявката, но има по-лесен начин). Факт е, че двигателят ConfigMgr, когато изпълнява WQL заявки, ги превежда в t-SQL синтаксис с помощта на доставчика на WMI и изпраща заявката до базата данни. Всички тези операции са регистрирани. smsprov.log.

И така, изпълнете заявката си и отворете файла \ ConfigMgr \ Logs \ smsprov.log. Намерете вашето запитване в дневника. Трябва да започне с Изпълнете WQL =. Малко по-ниско обърнете внимание на линията, която започва с Изпълнете SQL =. Това е точно преобразуваната заявка в SQL език. Копирайте кода на SQL заявка. Можете да го използвате за създаване на уеб отчет на SCCM или в Създател на отчети.

Отделни 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 от System_DISC AS SMS_R_System ВЪТРЕШЕН УЧАСТВА WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey ВЪТРЕШЕН УЧАСТВА Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey ВЪТРЕШЕН УЧАСТВА Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM ON SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey ВЪТРЕШЕН УЧАСТВА _RES_COLL_CM100213 AS SMS_CM_RES_COLL_CM100213 ON SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey където DATEPART (dayofyear, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (dayofyear, ___ System_WORKSTATION_STATUS0.LastHWScan)

защото първоначалната заявка за WQL беше ограничена до колекцията SCCM, SQL заявката също съдържа ограничение за идентификацията на колекцията (в този пример CM100213).

Когато генерирате отчет за SCCM, на уеб страницата може да се появи грешка:

При стартирането на отчета възникна грешка. Подробностите са следните:
Разрешението SELECT бе отказано в обекта '_RES_COLL_CM100213', база данни 'SMS_CM1', схема 'dbo'.
Номер на грешка: -2147217911
Източник: Microsoft OLE DB доставчик за SQL Server
Родна грешка: 229

Съдейки по грешката, на текущия потребител не е предоставена ролята db_datareader за достъп до таблицата на базата данни. За да коригирате тази грешка, трябва ръчно да осигурите достъп до таблицата или изгледа в базата данни на SCCM. За да направите това, стартирайте SQL Server Management Studio, свържете се с базата данни на SCCM, в секцията Таблици или Преглед, намерете определената таблица (в този пример _RES_COLL_CM100213) и отворете нейните свойства.

В раздела Разрешения предоставете Избор на разрешения за smsschm_user и webreport_approle.

Опитайте да актуализирате уеб отчета в браузъра, ако грешката „SELECT разрешението е отказано“ се появява отново, показваща други таблици, трябва да дадете достъп до тях по същия начин.