Kako pretvoriti WQL SCCM upit u SQL izvještaj

Da biste odabrali razne podatke na računalima, korisnicima, uređajima u bazi podataka System Center Configuration Manager i stvorili zbirke, stalno morate stvarati različite upite. U uređivaču upita SCCM (editor upita) nalazi se priličan čarobnjak za kretanje kroz različite klase i atribute. Radi lakšeg prezentiranja potrebnih podataka korisnicima, radije koristim web izvješća (izvješća) SCCM. Problem je u tome što ako želite generirati web izvješće na temelju primljenog zahtjeva SCCM, naići ćete na činjenicu da se SCCM zahtjevni kôd ne može upotrijebiti za izradu izvješća.

Činjenica je da se upiti u ConfigMgr generiraju na WQL jeziku, a u izvješćima je potrebno izravno koristiti podatke u MSSQL bazi podataka u SQL-u. Iako je sintaksa WQL i SQL nešto slična, ne možete izravno pretvoriti WQL upit u SQL. U ovom ću članku pokazati najlakši i najbrži način za dobivanje koda SQL upita iz WQL upita u SCCM.

Morao sam stvoriti web izvješće za korisnike, koje bi trebalo sadržavati računala koja se nisu isključila noću. Dobio sam slijedeći upit (upit):

odabrati različita 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 od SMS_R_System INNER JOIN SMS_G_System_WORKSTATION_STATUS na SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId unutarnji pridružiti SMS_G_System_OPERATING_SYSTEM na SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId unutarnji pridružiti SMS_G_System_COMPUTER_SYSTEM na SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId gdje DATEPART (DY, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime)! = DATEPART (DY, SMS_G_System_WORKSTATION_STATUS.LastHardwareScan)

Kao što vidite, pretpostavit ćemo da se računalo korisnika nije isključilo noću ako datum zadnjeg skeniranja (LastHardwareScan) nije jednak datumu pokretanja OS-a (LastBootUpTime).

Sada iz ovog upita morate generirati SQL upit za izradu izvještaja s popisom računala i korisnika. Ručno pretvaranje ovog upita u SQL prilično je teško (naravno, možete koristiti SQL Server Builder Report Builder za izgradnju kôda upita, ali postoji lakši način). Činjenica je da ConfigMgr motor, prilikom izvođenja WQL upita, prevodi ih u t-SQL sintaksu koristeći WMI davatelja i zahtjev šalje u bazu podataka. Sve ove operacije se bilježe. smsprov.log.

Dakle, ispunite svoj zahtjev i otvorite datoteku \ ConfigMgr \ Logs \ smsprov.log. Pronađite svoj upit u dnevniku. Trebalo bi početi s Izvrši WQL =. Malo niže, obratite pažnju na liniju koja počinje s Izvršite SQL =. To je točno pretvoreni upit u SQL jezik. Kopirajte kôd SQL upita. Možete ga koristiti za izradu SCCM web izvješća ili u Builderu izvještaja.

Različit 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 unutarnji PRIDRUŽITE WorkstationStatus_DATA AS ___System_WORKSTATION_STATUS0 ON ___ System_WORKSTATION_STATUS0.MachineID = SMS_R_System.ItemKey unutarnji PRIDRUŽITE Operating_System_DATA AS SMS_G_System_OPERATING_SYSTEM O SMS_G_System_OPERATING_SYSTEM.MachineID = SMS_R_System.ItemKey Unutarnje PRIDRUŽITE Computer_System_DATA AS SMS_G_System_COMPUTER_SYSTEM ON SMS_G_System_COMPUTER_SYSTEM.MachineID = SMS_R_System.ItemKey Unutarnje PRIDRUŽITE _RES_COLL_CM100213 AS SMS_CM_RES_COLL_CM100213 ON SMS_CM_RES_COLL_CM100213 .MachineID = SMS_R_System.ItemKey gdje DATEPART (dayofyear, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime0) DATEPART (dayofyear, ___ System_WORKSTATION_STATUS0.LastHWScan)

jer početni WQL upit bio je ograničen na SCCM kolekciju, SQL upit također sadrži ograničenje na ID kolekcije (u ovom primjeru CM100213).

Prilikom generiranja SCCM izvješća na web stranici se može pojaviti pogreška:

Došlo je do pogreške prilikom pokretanja izvještaja. Pojedinosti su sljedeće:
Dozvola SELECT odbijena je na objektu '_RES_COLL_CM100213', bazi podataka 'SMS_CM1', shemi 'dbo'.
Broj pogreške: -2147217911
Izvor: Microsoft OLE DB usluga za SQL Server
Izvorna pogreška: 229

Sudeći po pogrešci, trenutnom korisniku nije dodijeljena uloga db_datareader za pristup tablici baze podataka. Da biste popravili ovu pogrešku, morate ručno osigurati pristup tablici ili prikazu u SCCM bazi podataka. Da biste to učinili, pokrenite SQL Server Management Studio, spojite se na SCCM bazu podataka, u odjeljku Tablice ili Prikaži, pronađite navedenu tablicu (u ovom primjeru _RES_COLL_CM100213) i otvorite njena svojstva.

Na kartici Dozvole dodijelite Odabir dozvola za smsschm_user i webreport_approle.

Pokušajte ažurirati web izvješće u pregledniku, ako se pogreška "SELECT dozvola odbijena" ponovno ukazuje na ostale tablice, morate im pružiti sličan pristup.