Jak przekonwertować zapytanie WQL SCCM na raport SQL

Aby wybrać różne dane na komputerach, użytkownikach, urządzeniach w bazie danych programu System Center Configuration Manager i budować kolekcje, musisz stale tworzyć różne zapytania. W edytorze zapytań SCCM (edytor zapytań) znajduje się dość wygodny kreator do nawigacji po różnych klasach i atrybutach. Dla wygodniejszej prezentacji niezbędnych informacji użytkownikom wolę korzystać z raportów internetowych SCCM (raportów). Problem polega na tym, że jeśli chcesz wygenerować raport internetowy na podstawie otrzymanego żądania SCCM, napotkasz fakt, że kodu żądania SCCM nie można użyć do zbudowania raportu.

Faktem jest, że zapytania w ConfigMgr są generowane w języku WQL, a w raportach konieczne jest stosowanie zapytań bezpośrednio do bazy danych MSSQL w SQL. Chociaż składnia WQL i SQL jest nieco podobna, nie można bezpośrednio przekonwertować zapytania WQL na SQL. W tym artykule pokażę najłatwiejszy i najszybszy sposób na uzyskanie kodu zapytania SQL z zapytania WQL w SCCM.

Musiałem utworzyć raport internetowy dla użytkowników, który powinien zawierać komputery, które nie wyłączały się w nocy. Mam następujące zapytanie (zapytanie):

wybór wyraźnego 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 z SMS_R_System sprzężenia wewnętrznego SMS_G_System_WORKSTATION_STATUS na SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId sprzężenia wewnętrznego SMS_G_System_OPERATING_SYSTEM na SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId sprzężenia wewnętrznego SMS_G_System_COMPUTER_SYSTEM na SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId gdzie DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime!) = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Jak widać, vs założymy, że komputer użytkownika nie wyłączył się w nocy, jeśli data ostatniego skanowania (LastHardwareScan) nie jest równa dacie rozruchu systemu operacyjnego (LastBootUpTime).

Teraz z tego zapytania musisz wygenerować zapytanie SQL, aby zbudować raport z listą komputerów i użytkowników. Ręczna konwersja tego zapytania do SQL jest dość trudna (możesz oczywiście użyć programu SQL Server Report Builder do zbudowania kodu zapytania, ale istnieje łatwiejszy sposób). Faktem jest, że silnik ConfigMgr podczas wykonywania zapytań WQL tłumaczy je na składnię t-SQL za pomocą dostawcy WMI i wysyła żądanie do bazy danych. Wszystkie te operacje są rejestrowane. smsprov.log.

Spełnij więc swoje żądanie i otwórz plik \ ConfigMgr \ Logs \ smsprov.log. Znajdź swoje zapytanie w dzienniku. Powinien zacząć Wykonaj WQL =. Nieco niżej, zwróć uwagę na linię, która zaczyna się od Wykonaj SQL =. To jest dokładnie skonwertowane zapytanie na język SQL. Skopiuj kod zapytania SQL. Możesz go użyć do zbudowania raportu internetowego SCCM lub w Konstruktorze raportów.

Wyraźny 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 z System_DISC AS SMS_R_System INNER Dołącz WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey sprzężenia wewnętrznego Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey WEWNĘTRZNY Dołącz Computer_System_DATA CO SMS_G_System_COMPUTER_SYSTEM NA SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey WEWNĘTRZNY Dołącz _RES_COLL_CM100213 CO SMS_CM_RES_COLL_CM100213 NA SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey gdzie DATEPART (DAYOFYEAR, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (DAYOFYEAR, ___ System_WORKSTATION_STATUS0.LastHWScan)

Ponieważ początkowe zapytanie WQL było ograniczone do kolekcji SCCM, zapytanie SQL zawiera również ograniczenie identyfikatora kolekcji (w tym przykładzie CM100213).

Podczas generowania raportu SCCM na stronie internetowej może pojawić się błąd:

Wystąpił błąd podczas uruchamiania raportu. Szczegóły są następujące:
Odmówiono uprawnienia SELECT do obiektu „_RES_COLL_CM100213”, bazy danych „SMS_CM1”, schematu „dbo”.
Numer błędu: -2147217911
Źródło: Microsoft OLE DB Provider dla SQL Server
Błąd natywny: 229

Sądząc po błędzie, bieżący użytkownik nie ma roli db_datareader dostępu do tabeli bazy danych. Aby naprawić ten błąd, musisz ręcznie zapewnić dostęp do tabeli lub widoku w bazie danych SCCM. Aby to zrobić, uruchom SQL Server Management Studio, połącz się z bazą danych SCCM, w sekcji Tabele lub Widok, znajdź określoną tabelę (w tym przykładzie _RES_COLL_CM100213) i otwórz jej właściwości.

Na karcie Uprawnienia udziel uprawnienia Wybierz smsschm_user i webreport_approle.

Spróbuj zaktualizować raport internetowy w przeglądarce, jeśli ponownie pojawi się błąd „Odmowa uprawnień SELECT” wskazujący na inne tabele, musisz dać im podobny dostęp.