Ako previesť dotaz WQL SCCM na správu SQL

Ak chcete vybrať rôzne údaje o počítačoch, užívateľoch, zariadeniach v databáze System Center Configuration Manager a vytvárať kolekcie, musíte neustále vytvárať rôzne dotazy. V editore dotazov SCCM (editor dopytov) je celkom pohodlný sprievodca pre navigáciu rôznych tried a atribútov. Pre pohodlnejšiu prezentáciu potrebných informácií používateľom, radšej používam webové správy SCCM (správy). Problém je, že ak chcete vygenerovať webovú správu na základe prijatej žiadosti SCCM, narazíte na skutočnosť, že kód žiadosti SCCM nemožno použiť na zostavenie správy..

Faktom je, že dotazy v ConfigMgr sa generujú v jazyku WQL a v správach je potrebné priamo používať dotazy do databázy MSSQL v SQL. Aj keď je syntax WQL a SQL trochu podobná, nemôžete priamo previesť dotaz WQL na SQL. V tomto článku ukážem najjednoduchší a najrýchlejší spôsob, ako získať kód SQL dotazu z dotazu WQL v SCCM.

Potreboval som vytvoriť webovú správu pre používateľov, ktorá by mala obsahovať počítače, ktoré sa nevypínali v noci. Dostal som nasledujúci dotaz (dotaz):

select distinct 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 vnútorné spojenie SMS_G_System_WORKSTATION_STATUS na SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId vnútorné spojenie SMS_G_System_OPERATING_SYSTEM na SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId vnútorné spojenie SMS_G_System_COMPUTER_SYSTEM na SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId kde DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Ako vidíte, vs budeme predpokladať, že počítač používateľa sa nevypol v noci, ak sa dátum poslednej kontroly (LastHardwareScan) nerovná dátumu zavedenia OS (LastBootUpTime).

Teraz z tohto dotazu musíte vygenerovať dotaz SQL na vytvorenie zostavy so zoznamom počítačov a používateľov. Manuálna konverzia tohto dotazu na SQL je dosť náročná (na vytvorenie kódu dotazu môžete samozrejme použiť SQL Server Report Builder, existuje však ľahší spôsob). Pravda je, že mechanizmus ConfigMgr pri vykonávaní dotazov WQL ich pomocou poskytovateľa WMI prekladá do syntaxe t-SQL a odošle požiadavku do databázy. Všetky tieto operácie sa zaznamenávajú. Smsprov.log.

Vyplňte svoju žiadosť a otvorte súbor \ ConfigMgr \ Logs \ smsprov.log. Nájdite svoj dotaz v denníku. Malo by to začať Spustiť WQL =. Trochu nižšie, venujte pozornosť riadku, ktorý začína na Vykonať SQL =. Toto je presne prevedený dotaz do jazyka SQL. Skopírujte kód dotazu SQL. Môžete ho použiť na vytvorenie webovej správy SCCM alebo v nástroji Report Builder.

Zreteľný 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 od System_DISC AS SMS_R_System INNER JOIN WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey vnútorné spojenie Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey INNER REGISTRÁCIE Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM ON SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey INNER REGISTRÁCIE _RES_COLL_CM100213 AS SMS_CM_RES_COLL_CM100213 ON SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey kde DATEPART (dayofyear, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (dayofyear, ___ System_WORKSTATION_STATUS0.LastHWScan)

pretože počiatočný dotaz WQL bol obmedzený na kolekciu SCCM, dotaz SQL obsahuje aj obmedzenie ID kolekcie (v tomto príklade CM100213).

Pri generovaní správy SCCM sa na webovej stránke môže zobraziť chyba:

Pri spustení prehľadu sa vyskytla chyba. Podrobnosti sú nasledujúce:
Povolenie SELECT bolo zamietnuté pre objekt '_RES_COLL_CM100213', databázu 'SMS_CM1', schému 'dbo'.
Číslo chyby: -2147217911
Zdroj: Microsoft OLE DB Provider pre SQL Server
Natívna chyba: 229

Podľa chyby sa súčasnému používateľovi neposkytuje rola db_datareader na prístup k databázovej tabuľke. Ak chcete túto chybu opraviť, musíte ručne poskytnúť prístup k tabuľke alebo pohľadu v databáze SCCM. Ak to chcete urobiť, spustite SQL Server Management Studio, pripojte sa k databáze SCCM, v časti Tabuľky alebo Zobraziť vyhľadajte zadanú tabuľku (v tomto príklade _RES_COLL_CM100213) a otvorte jej vlastnosti..

Na karte Permissions (Povolenia) udelte príkaz Select Select to smsschm_user a webreport_approle.

Skúste aktualizovať webovú správu v prehliadači, ak sa znova zobrazí chyba „Povolenie SELECT bolo zamietnuté“, ktorá označuje ďalšie tabuľky, musíte im poskytnúť podobný prístup..