Jak převést dotaz WQL SCCM na sestavu SQL

Chcete-li vybrat různá data v počítačích, uživatelích, zařízeních v databázi System Center Configuration Manager a vytvářet kolekce, musíte neustále vytvářet různé dotazy. V editoru dotazů SCCM (editor dotazů) je poměrně pohodlný průvodce pro navigaci různých tříd a atributů. Pro pohodlnější prezentaci potřebných informací uživatelům raději používám webové zprávy SCCM. Problém je v tom, že pokud chcete vygenerovat webovou zprávu na základě přijatého požadavku SCCM, narazíte na skutečnost, že kód požadavku SCCM nelze použít k sestavení zprávy..

Faktem je, že dotazy v ConfigMgru jsou generovány v jazyce WQL a ve zprávách je nutné přímo používat dotazy do databáze MSSQL v SQL. Přestože je syntaxe WQL a SQL poněkud podobná, nelze přímo převést dotaz WQL na SQL. V tomto článku ukážu nejjednodušší a nejrychlejší způsob, jak získat kód SQL dotazu z dotazu WQL v SCCM.

Potřeboval jsem vytvořit webovou zprávu pro uživatele, která by měla obsahovat počítače, které se nevyply v noci. Mám následující 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 vnitřní spojení SMS_G_System_WORKSTATION_STATUS na SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId vnitřní spojení SMS_G_System_OPERATING_SYSTEM na SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId vnitřní spojení 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)

Jak vidíte, vs budeme předpokládat, že počítač uživatele se nevypnul v noci, pokud se datum poslední kontroly (LastHardwareScan) nerovná datu spuštění operačního systému (LastBootUpTime).

Nyní z tohoto dotazu musíte vygenerovat dotaz SQL, abyste sestavili sestavu se seznamem počítačů a uživatelů. Ruční převod tohoto dotazu na SQL je poměrně obtížný (samozřejmě můžete použít sestavu SQL Server Report Builder k vytvoření kódu dotazu, existuje však jednodušší způsob). Skutečností je, že modul ConfigMgr při provádění dotazů WQL převádí je do syntaxe t-SQL pomocí zprostředkovatele WMI a odešle požadavek do databáze. Všechny tyto operace jsou protokolovány. smsprov.log.

Vyplňte tedy svůj požadavek a otevřete soubor \ ConfigMgr \ Logs \ smsprov.log. Najděte svůj dotaz v protokolu. Mělo by to začít Spustit WQL =. Trochu níže, věnujte pozornost linii, která začíná Provést SQL =. Toto je přesně převedený dotaz do jazyka SQL. Zkopírujte kód dotazu SQL. Můžete jej použít k vytvoření webové sestavy SCCM nebo ve Tvůrci sestav.

Zřetelný 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 vnitřní spojení Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey INNER REGISTRACE Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM ON SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey INNER REGISTRACE _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)

Protože počáteční dotaz WQL byl omezen na kolekci SCCM, dotaz SQL také obsahuje omezení na ID kolekce (v tomto příkladu CM100213).

Při generování zprávy SCCM se na webové stránce může objevit chyba:

Při spuštění sestavy došlo k chybě. Podrobnosti jsou následující:
Oprávnění SELECT bylo zamítnuto u objektu '_RES_COLL_CM100213', databáze 'SMS_CM1', schématu 'dbo'.
Číslo chyby: -2147217911
Zdroj: Microsoft OLE DB Provider pro SQL Server
Nativní chyba: 229

Soudě podle chyby není současnému uživateli poskytnuta role db_datareader pro přístup k databázové tabulce. Chcete-li tuto chybu opravit, musíte ručně poskytnout přístup k tabulce nebo zobrazení v databázi SCCM. Chcete-li to provést, spusťte SQL Server Management Studio, připojte se k databázi SCCM, v části Tabulky nebo pohledy vyhledejte zadanou tabulku (v tomto příkladu _RES_COLL_CM100213) a otevřete její vlastnosti.

Na kartě Oprávnění udělte možnost Vybrat oprávnění smsschm_user a webreport_approle.

Zkuste aktualizovat webovou sestavu v prohlížeči, pokud se znovu objeví chyba „Oprávnění SELECT bylo odepřeno“ označující další tabulky, musíte jim dát podobný přístup.