Kako pretvoriti poizvedbo WQL SCCM v poročilo SQL

Če želite izbrati različne podatke v računalnikih, uporabnikih, napravah v zbirki podatkov System Center Configuration Manager in sestaviti zbirke, morate stalno ustvarjati različne poizvedbe. V urejevalniku poizvedb SCCM (urejevalnik poizvedb) je dokaj priročen čarovnik za krmarjenje po različnih razredih in atributih. Za bolj priročno predstavitev potrebnih informacij uporabnikom raje uporabim spletna poročila (poročila) SCCM. Težava je v tem, da če želite ustvariti spletno poročilo na podlagi prejete zahteve SCCM, boste naleteli na dejstvo, da kode zahteve SCCM ni mogoče uporabiti za izdelavo poročila.

Dejstvo je, da poizvedbe v programu ConfigMgr generirajo v jeziku WQL, v poročilih pa je treba neposredno uporabljati poizvedbe do baze podatkov MSSQL v SQL. Čeprav je sintaksa WQL in SQL nekoliko podobna, poizvedbe WQL ne morete neposredno pretvoriti v SQL. V tem članku bom prikazal najlažji in najhitrejši način za pridobivanje kode poizvedbe SQL iz poizvedbe WQL v SCCM.

Ustvariti sem moral spletno poročilo za uporabnike, ki bi moralo vsebovati računalnike, ki se ponoči niso izklopili. Imam naslednjo poizvedbo (poizvedbo):

izbrati posebno 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 iz SMS_R_System notranjo pridružitev SMS_G_System_WORKSTATION_STATUS na SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId notranji pridruži SMS_G_System_OPERATING_SYSTEM na SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId notranja pridruži SMS_G_System_COMPUTER_SYSTEM na SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId kjer DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Kot lahko vidite, bomo predpostavljali, da se uporabnikov računalnik ni ponoči izklopil, če datum zadnjega skeniranja (LastHardwareScan) ni enak datumu zagona OS (LastBootUpTime).

Zdaj iz te poizvedbe morate ustvariti poizvedbo SQL, da sestavite poročilo s seznamom računalnikov in uporabnikov. Ročna pretvorba te poizvedbe v SQL je precej težavna (seveda lahko za izdelavo poizvedbene kode uporabite SQL Server Builder Builder, vendar obstaja lažji način). Dejstvo je, da motor ConfigMgr pri izvajanju poizvedb WQL z izvajalcem WMI prevede v sintakso t-SQL in zahtevo pošlje v bazo podatkov. Vse te operacije so zabeležene. smsprov.log.

Torej, izpolnite svojo zahtevo in odprite datoteko \ ConfigMgr \ Logs \ smsprov.log. V dnevniku poiščite svojo poizvedbo. Začeti bi bilo treba z Izvedite WQL =. Malo nižje bodite pozorni na črto, ki se začne z Izvedite SQL =. To je točno pretvorjena poizvedba v jezik SQL. Kopirajte kodo SQL poizvedbe. Z njim lahko sestavite spletno poročilo SCCM ali v Builderju poročil.

Razlikuje 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 notranjo pridružitev WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey notranjo pridružitev Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM ON SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey notranjo pridružitev Computer_System_DATA KOT SMS_G_System_COMPUTER_SYSTEM O SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey notranjo pridružitev _RES_COLL_CM100213 KOT SMS_CM_RES_COLL_CM100213 O SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey kjer DATEPART (dayofyear, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (dayofyear, ___ System_WORKSTATION_STATUS0.LastHWScan)

Ker začetna poizvedba WQL je bila omejena na zbirko SCCM, poizvedba SQL vsebuje tudi omejitev ID-ja zbirke (v tem primeru CM100213).

Pri ustvarjanju poročila o SCCM se lahko na spletni strani prikaže napaka:

Pri zagonu poročila je prišlo do napake. Podrobnosti so naslednje:
Dovoljenje SELECT je bilo zavrnjeno v objektu '_RES_COLL_CM100213', zbirki podatkov 'SMS_CM1', shemi 'dbo'.
Številka napake: -2147217911
Vir: Microsoft OLE DB Ponudnik za SQL Server
Naravna napaka: 229

Sodeč po napaki trenutno uporabniku ni na voljo db_datareader vloge za dostop do tabele baze podatkov. Če želite odpraviti to napako, morate ročno zagotoviti dostop do tabele ali pogleda v bazi podatkov SCCM. Če želite to narediti, zaženite SQL Server Management Studio, se povežite z bazo podatkov SCCM, v razdelku Tabele ali Pogled, poiščite določeno tabelo (v tem primeru _RES_COLL_CM100213) in odprite njene lastnosti.

Na kartici Dovoljenja dodelite Izberi dovoljenja smsschm_user in webreport_approle.

Poskusite posodobiti spletno poročilo v brskalniku, če se napaka "SELECT dovoljenje zavrne" znova prikaže druge tabele, jim morate omogočiti podoben dostop.