Hardware and Software Inventory

SCCM ile kuruluşunuzdaki bilgisayarların donanım ve yazılım hakkında bilgi toplamak için envanterini kullanabilirsiniz. Envanteri etkinleştirildikten ve istemci döngüye girdikten sonra, istemci bilgileri sccm sitesindeki bir yönetim noktasına gönderir. Yönetim noktası daha sonra envanter bilgilerini site veritabanında depolayan Configuration Manager site sunucusuna iletir.

01| Hardware Inventory

SCCM Hardware Inventory, Configuration Manager (SCCM) tarafından istemci bilgisayarlardan donanım bilgilerini toplayan özelliktir. Bu bilgiler, cihazların fiziksel ve bazı yazılımsal bileşenleri hakkında detaylı veri sağlar ve raporlamada kullanılır.

Bilgisayarın donanım bileşenleri hakkında bilgi toplar:

  • CPU (işlemci)
  • RAM
  • Disk (tipi, boyutu, durumu)
  • BIOS
  • Anakart bilgisi
  • Ağ bağdaştırıcısı
  • Ekran kartı
  • Seri numarası, üretici bilgisi vb.

Toplanan veriler, SCCM veritabanında tutulur ve raporlar ya da dinamik koleksiyonlar oluşturmak için kullanılır.

Örneğin, bir makinanın donanım bilgilerini çekmek isterseniz sccm konsol üzerinden Assets andd Compliance → Devices kısmından ilgili bilgisayara sağ tıklayın Start → Resource Explorer seçeneğine tıklayın.

Açılan pencerede tüm bu sonuçlar WMI sınıfları bilgisidir.  Bunu Creation Class Name kısmından WMI ile çektiğini görebilirsiniz.

Tüm bu envanteri çeken kısım aslında Administration → Client Settings → Default Settings kısmında donanım politikasıdır. Varsayılan olarak açık gelir ve 7 günde bir envanter bilgisini çekecek şekilde ayarlanmıştır. Bu süre 7 gün olarak kalması önerilir.

Resim

Bu kısımda önemli olan Set Classes alanıdır. Eğer yapınızda özel belirli şeyleri takip etmek isterseniz internet üzerinden araştırıp buradan aktif etmeniz gerekmektedir. Açılan pencerede takip edilen sınıfları görebilirsiniz.

Resim

Örneğin, barkod ve yazıcı bilgileri almak istiyorsanız Printer Device sınıfını eklemeniz gerekmektedir. Bu sayede veritabanında yazıcı ve barkod cihazların bilgileri v_GS_PRINTER_DEVICE tablosuna yazılacaktır. 

Resim

SCCM, cihazlara bağlı monitörler hakkında rapor verebilir. Bu bilgiler arasında marka, model ve üretim tarihi bulunur. Monitor bilgisini ise sağlıklı almak içinde Add butonuna basın.

Resim

 Açılan pencerede WMI namespace kısmına root\WMI yazın ve Connect butonuna basın.

Resim

Inventory classes kısmına WMIMonitorID yazın ve ekleyin.

Resim

Artık donanım bilgilerini bilgisayarlardan alabiliriz. Bunu sccm üzerinde koleksiyon bazlı veya herhangi bir bilgisayardan hemen tetikleyebilirsiniz. Ben herhangi bir bilgisayardan 7 gün beklemeden aşağıdaki gibi tetikliyorum.

Resim

Akabinde InventoryAgent.log dosyası açılarak süreç takip edilebilir. Log dosyalarından yine WMI çağırarak bilgileri topladığını görebilirsiniz.

SCCM sunucusuna envanter bilgilerinin geldiğini görmek için MP_Hinv.log dosyası takip edilebilir.

Resim

Donanım envanteri sürecini tekrar manuel tetikleyerek envanter bilgilerini geçici olarak ilgili klasöre geldiğini ve kaybolduğunu görebilirsiniz.

Resim

Envanterin başarılı olduğu görmek için raporlar kısmından Computer information for a specific computer raporuna bakabilirsiniz. Bu rapor belirli bir bilgisayar için genel donanım bilgilerini size verecektir.

Resim

02| Software Inventory

SCCM Software Inventory, Configuration Manager (SCCM) istemcilerindeki dosya tabanlı yazılım bilgilerini toplamak için kullanılan bir özelliktir. Temel amacı, bilgisayarlarda yüklü olan uygulamaların .exe dosyalarına ve diğer tanımlanmış uzantılara dayalı olarak yazılım envanterini oluşturmaktır. Varsayılan olarak yazılım envanteri açık gelse bile siz ayarlamadığınız sürece herhangi bir bilgi gelmeyecektir.

Belirli dizinlerdeki .exe, .dll, .ini, .txt gibi uzantılara sahip dosyaları tarar.

  • Dosya adı, boyutu, sürümü, üreticisi gibi bilgileri toplar.
  • Hangi bilgisayarda hangi yazılım var, sürüm nedir, hangi kullanıcı çalıştırıyor gibi sorulara yanıt verir.
  • Lisans denetimi, güvenlik kontrolü, yasaklı yazılım tespiti gibi senaryolarda kullanılır.

Tüm bu envanteri çeken kısım aslında Administration → Client Settings → Default Settings kısmında yazılım politikasıdır. Varsayılan olarak açık gelir ve 7 günde bir envanter bilgisini çekecek şekilde ayarlanmıştır. Bu süre 7 gün olarak kalması önerilir.

Resim

Bu kısımda önemli olan tarama yapılacak klasörler ve dosya uzantıları tanımlamaktır. Bu tanımlamaları yaptıktan sonra, istemciler bu verileri SCCM sunucusuna gönderir.

  • Eğer çok fazla dizin ve  tüm dosya türleri taranırsa yüksek disk veya ağ trafiği oluşturabilir.
  • Komple disk ve fazla uzantı eklenirse istemcilerin envanteri taraması 3-4 saatleri bulabilir. 
  • Yazılım adı veya sürüm bilgisi yanıltıcı olabilir, çünkü exe dosyasına bağlıdır, gerçek kurulum kayıtlarını incelemez.

İlk olarak Inventory these file types kısmından yazılım uzantılarını (.exe, .dll vs.) ve yazılımların yüklü olduğu yolları (c:\Program Files vs.) ekleyelim.

Resim

Yazılım envanteri sürecini anlamak ve incelemek için 7 gün beklemeden herhangi bir bilgisayardan hemen tetiklenebilir.

Resim

Akabinde InventoryAgent.log dosyası açılarak süreç takip edilebilir. Bu işlem donanım envanteri gibi hızlı olmayacak ve ortalama 120-240 dk arası sürecektir. 

Resim

Herhangi bir dosya toplamaya başladığınız zaman sccm konsol üzerinden Assets andd Compliance → Devices kısmından ilgili bilgisayara sağ tıklayın Start → Resource Explorer seçeneğine tıklayın. Açılan pencerede Software kısmından görebilirsiniz.

Resim

Örneğin, Computers with a specific product raporundan Product Name kısmından yazılımı seçerek hangi bilgisayarlarda olduğunu görebilirsiniz.

Resim

Bazı kişiler bunu yapılandırmak yerine donanım envanteri üzerinde bulunan program ekle kaldır üzerindeki verileri kullanıyor. Burada tek yanlış bilinen şey insanların bunu yazılım envanterinden geldiğini düşünmesidir. Bunlar donanım envanteri üzerinden gelmektedir.

Resim

Program ekle kaldır üzerindeki program adını Computers with specific software registered in Add Remove Programs raporuna yazarak detaylı bilgilere erişebilirsiniz.

Resim

03| Software Metering

SCCM Software Metering, organizasyonunuzdaki yazılım kullanımını izlemek için kullanılan bir özelliktir. Temel amacı, hangi uygulamaların ne zaman, hangi bilgisayarlarda ve ne kadar süreyle kullanıldığını raporlamaktır.

  • Yazılım Kullanım Takibi: Belirlediğiniz .exe dosyalarının hangi kullanıcılar tarafından, ne zaman ve ne kadar süreyle çalıştırıldığını izler.
  • Lisans Optimizasyonu: Gerçek kullanım verilerine göre gereksiz lisanslar tespit edilip kaldırılabilir, böylece maliyetler düşürülebilir.
  • Yazılım Politikalarının Denetlenmesi: Yetkisiz yazılım kullanımı ya da az kullanılan uygulamalar tespit edilip, BT politikalarına göre işlem yapılabilir.
  • Kullanım Analizi: Departmanlar arası yazılım ihtiyaçları karşılaştırılarak daha verimli yazılım planlaması yapılabilir.
  • SCCM istemcileri belirlenen uygulamaların çalıştırılma bilgilerini toplar.
  • Bu bilgiler SCCM sunucusuna raporlanır.
  • Raporlama üzerinden kim, ne zaman, ne kadar süreyle uygulamayı kullanmış görüntülenebilir.
  • 30 gündür kullanılmayan Office lisanslarını belirlemek
  • Autocad gibi pahalı yazılımların aktif kullanım durumunu analiz etmek.
  • Eğitim/deneme amaçlı yüklenen yazılımların gereksiz kullanımını engellemek.

Bu özellik kapalı gelir, aktif etmek için SCCM konsolunda Administration → Client Settings → Default Settings açarak Software Metering özelliğini Enabled yapmanız gerekmektedir.

Resim

Ancak sadece bu yeterli olmaz. Hangi uygulamayı takip etmek istediğimizi belirtmemiz gerekmektedir. Bunun için, Assets and Compliance → Software Metering → Create Software Metering Rule seçeneği ile devam ederiz. 

Çok fazla takip edilecek programınız varsa klasör şeklinde ayırarak kategorilere ayırabilirsiniz.

Resim

Açılan pencerede,

  • Name kısmına takip edilecek program adını örneğin Google Chrome yazın.
  • File name kısmına ise izlemek istediğin .exe dosyasının adı örneğin chrome.exe yazın.
  • Original file name kısmı boş bırakabilirsin veya exe gerçek dosya adını (metadata) verebilirsin.
  • Version kısmına belirli bir versiyon istersen yazabilirsin, boş bırakılırsa tüm versiyonları kapsar.
  • Language kısmına belirli bir dil izlemek istiyorsan seçebilirsin genelde Any bırakılır.
Resim

Politikaların hemen geçerli olması için Machine Policy Retrieval & Evaluation Cycle seçeneğine bir kaç kere tıklayın.

Resim

Akabinde mtrmgr.log dosyası açılarak süreç takip edilebilir. Biraz önce oluşturduğunuz kuralı görürseniz işlem başarılı olmuştur.

Resim

Kuralın çalıştığını doğrulamak için eklediğini programı çalıştırarak  mtrmgr.log dosyasına yazdığını görebilirsiniz. Bu logları bir süre sonra SCCM raporlama ekranından görebiliriz.

Resim

Varsayılan olarak her 60 dakikada bir, istemci etkinleştirilen yazılım ölçüm kurallarına bağlı olarak kullanımı raporlayacaktır. Bu süreyi beklememek için manuel olarak yazılım Ölçümleme döngüsünü tetikleyebiliriz.

Resim

Yazılım Ölçümü hakkında size harika bilgiler verecek bazı yerleşik raporlarınız var. Bunları bir süre sonra raporlar kısmından alabilirsiniz. Örneğin, eklediğimiz ürünü hangi kullanıcılar hangi ay ve yılda kaç kere çalıştırmış gibi bilgileri Users that have run a specific metered software program ilgili rapordan alabiliriz.

Resim

04| Asset Intelligence

Asset Intelligence, Configuration Manager içinde yer alan bir özelliktir ve ortamındaki yazılım varlıklarını daha detaylı bir şekilde tanımlamak, izlemek ve raporlamak için kullanılır.

  • Ortamdaki yazılımları sadece dosya (.exe) bazında değil, ürün adı, yayıncı, sürüm, kurulum yolu gibi detaylarıyla birlikte izler.
  • Yazılım kurulum bilgilerini WMI ve registry verileri üzerinden toplar, lisans uyumluluğu için raporlama yapar.
  • Bilgisayar başına lisanslı yazılım kullanımını ve yasadışı/yasaklı yazılım tespiti gibi işlemleri kolaylaştırır.
  • Asset Intelligence Catalog sayesinde yazılım bilgileri daha doğru ve güncel şekilde sınıflandırılır.
  • Ayrıca kullanıcılar veya cihazlar üzerinde hangi yazılımların kullanıldığını izlemek için ayrıntılı raporlar sunar.
  • Kurulu yazılımlar ve sürümleri
  • Yazılım yayıncı bilgileri
  • Yazılım kategorileri (örneğin: Office uygulamaları, güvenlik yazılımları)
  • Donanım bilgileri (örnek: BIOS sürümü, RAM tipi)
  • Lisans verileri (eğer ek lisans bilgisi girilirse)
  • Daha doğru yazılım envanteri: Sadece exe taraması yerine, kurulum verisi ve ürün bilgileri baz alınır.
  • Lisans takibi: Lisanslı mı, lisanssız mı görebilirsin (elle veri girişi gerekebilir).
  • Güvenlik: Yasaklı veya zararlı yazılım kurulumlarını tespit edebilirsin.
  • Düzenli raporlama: Hazır gelen detaylı yazılım raporları sayesinde denetim ve envanter süreçlerini kolaylaştırır.

Bu özellik kapalı gelir, aktif etmek için SCCM konsolunda Administration → Site Configuration → Servers and Site System Roles → Add Site System Roles seçeneği ile devam edin.

Resim

System Role Selection kısmından Asset Intelligence synchronization point işaretlenerek devam edilir. Sertifika ve senkronize sürelerini varsayılan olarak bırakabilirsiniz.

Resim

Yükleme işlemini takip etmek için AIUSSetup.log dosyasını takip edebilirsiniz.

Resim

Bu işlemden sonra  Asset Intelligence etkinleştirmemiz gerekmektedir. Bunun için Assets and Compliance → Asset Intelligence → Edit Inventory Classes kısmına tıklayın.

Resim

Açılan pencerede Enable only the selected Asset Intelligence reporting classes seçilirse raporlar için tüm sınıflar seçilmiş olur ve bu sınıflarla ilgili tüm verilerin toplanmasına olanak tanınır. OK ile sınıf seçimi işlemi işlemine devam edilir.  İsterseniz ilgili sınıfların üzerinde bekleyerek hangi sınıfları takip edildiği görebilir ve istediğiniz sınıfları seçebilirsiniz.

Bu işlemden sonra donanım envanteriyle ilgili işaretlenen tüm sınıflar etkinleşecektir.

Resim

Katalog senkronizasyonunu başlatmak için Assets and Compliance → Asset Intelligence → Synchronize → Synchronize Asset Intelligence Catalog seçilir.

Resim

Böylece SCCM’de Asset Intelligence yapılandırması tamamlanmış olur. Raporlar kısmından Asset Intelligence ile gelen özel raporlardan bir süre sonra verileri çekebilirsiniz. Örneğin, Software 02D – Computers with a specific application installed raporu hangi yazılımların hangi bilgisayarlarda olduğunu görebilirsiniz.

Resim

Custom SQL Inventory

Bu kısımda şirketinizdeki aşağıdaki donanım envanterini SQL sorgusu ile nasıl alabileceğinizi bakacağız. 

  • Computer MANUFACTURER, MODEL, SERIALNUMBER
  • Monitor MANUFACTURER, MODEL, SERIALNUMBER
  • HOSTNAME, IP ADDR, MAC ADDR
  • CPU, RAM, DISK, DISK TYPE
  • PRINTER MODEL
  • OS, OS Build
  • BIOS VERSION 
  • BOOT MODE
  • TPM SUPPORT

Sadece monitor bilgileri ASCII olarak geldiği için database üzerinde bir kaç işlem yapmamız gerekmektedir. SCCM database üzerinde SSMS açın ve monitor bilgilerini ASCII to text yapmak için aşağıdaki sorguyu çalıştırın.

  • USE [sccm_db] parantez içine kendi sccm db sunucu adını yazın.
USE [CM_ONK]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

create function [dbo].[fn_ConvertCommaDelimitedASCIIValuestoString] (@InputString nvarchar (max))
returns nvarchar (max)
as
begin

/*
This function can be used to convert the data stored in 
the UserFriendlyName0 column of the v_GS_WMIMONITORID view.
The data seems to be stored as a string of comma delimited 
decimal ASCII values that can be converted to a string.

A sample is:

'68, 69, 76, 32, 49, 57, 48, 56, 70, 80, 66, 76, 75'

Converting to characters makes it "DEL 1908FPBLK"

If the parameter does not fit the format listed above, the
return value will just be the parameter back again, since 
some of the values in UserFriendlyName0 are actual models
such as "NS-22D510NA19".  Go figure.
*/

declare @WorkString nvarchar (max)
declare @ReturnString nvarchar (max) = ''
declare @ASCIIValue tinyint

-- Check the input string to make sure it is not null,
-- starts with a number, has commas, and there are no 
-- characters other than numbers, commas, and spaces

if @InputString is null
  or charindex (',', @InputString) = 0
  or trim (@InputString) not like '[0-9]%'
  or patindex ('%[^ ,0-9]%', @InputString) > 0
	begin
	set @ReturnString = @InputString
	end
else
	begin
	set @WorkString = trim (@InputString)
	-- Work through the string, one numeric value at a time,
	-- by grabbing the data before the next comma
	while charindex (',', @WorkString) <> 0
		begin
		set @ASCIIValue = try_cast (substring (@WorkString, 0, charindex (',', @WorkString)) as tinyint)
		-- Make sure the numeric value is a valid ASCII value
		-- and can be used in the CHAR function.
		if @ASCIIValue is not null
			begin
			-- Only convert printable characters
			if @ASCIIValue > 31 set @ReturnString = @ReturnString + char (@ASCIIValue)
			end
		-- If it's not valid, just return the supplied input string
		else
			begin
			set @ReturnString = @InputString
			set @WorkString = ''
			end
		-- Trim off the current number and reset @WorkString to get the next
		set @WorkString = substring (@WorkString, charindex (',', @WorkString) + 1, LEN (@WorkString))
		end
	end
-- Get the last number after the final comma
set @ASCIIValue = try_cast (@WorkString as tinyint)

if @ASCIIValue is not null
	begin
	-- Only convert printable characters
	if @ASCIIValue > 31 set @ReturnString = @ReturnString + char (@ASCIIValue)
	end
else
	set @ReturnString = @InputString

return (@ReturnString)
end

Bu işlemden sonra artık aşağıdaki detaylı sorguyu çalıştırıp verilere erişebilirsiniz.

WITH DiskTurleri AS (
    SELECT DISTINCT
        CS.ResourceID,
        CASE
            WHEN PD.MediaType0 = 3 THEN 'HDD'
            WHEN PD.MediaType0 = 4 THEN 'SSD'
            ELSE 'Bilinmiyor'
        END AS DiskTuru
    FROM v_GS_COMPUTER_SYSTEM CS
    LEFT JOIN v_GS_PHYSICAL_DISK PD ON PD.ResourceID = CS.ResourceID
),
DiskTuruAgg AS (
    SELECT
        ResourceID,
        STRING_AGG(DiskTuru, ' - ') AS DiskTurleri
    FROM DiskTurleri
    GROUP BY ResourceID
),
YazicilarAgg AS (
    SELECT
        PD.ResourceID,
        STRING_AGG(PD.DriverName0, ' -  ') AS Yazicilar
    FROM (
        SELECT DISTINCT ResourceID, DriverName0
        FROM v_GS_PRINTER_DEVICE
        WHERE
            DriverName0 IS NOT NULL
            AND DriverName0 NOT LIKE '%Microsoft Print to PDF%'
            AND DriverName0 NOT LIKE '%OneNote%'
            AND DriverName0 NOT LIKE '%XPS%'
            AND DriverName0 NOT LIKE '%Fax%'
            AND DriverName0 NOT LIKE '%Adobe PDF%'
            AND DriverName0 NOT LIKE '%Anydesk%'
            AND DriverName0 NOT LIKE '%Remote Desktop%'
            AND PortName0 NOT LIKE 'nul%' -- sanal portlar
    ) PD
    GROUP BY PD.ResourceID
),
MonitorBilgisiAgg AS (
    SELECT 
        m.ResourceID,
        STRING_AGG(CM_ONK.dbo.fn_ConvertCommaDelimitedASCIIValuestoString(m.ManufacturerName0), ' - ') AS MonitorManufacturer,
        STRING_AGG(CM_ONK.dbo.fn_ConvertCommaDelimitedASCIIValuestoString(m.UserFriendlyName0), ' - ') AS MonitorModel,
        STRING_AGG(CM_ONK.dbo.fn_ConvertCommaDelimitedASCIIValuestoString(m.SerialNumberID0), ' - ') AS MonitorSerialNumber
    FROM v_GS_WMIMONITORID m
    GROUP BY m.ResourceID
),
TemelVeri_Ranked AS (
    SELECT
        CS.ResourceID,
        CS.Manufacturer0 AS Marka,
        CS.Model0 AS Model,
        BIOS.SMBIOSBIOSVersion0 AS BIOSVersiyonu,
        CS.Name0 AS BilgisayarAdi,
        NAC.IPAddress0 AS IPAdresi,
        NAC.MACAddress0 AS MACAdresi,
        MEM.TotalPhysicalMemory0 / 1048576 AS RAM_GB,
        CPU.Name0 AS CPUBilgisi,
        HDD.Size0 / 1024 AS DiskBoyutu_GB,
        BIOS.SerialNumber0 AS BilgisayarSeriNo,
        OS.Caption0 AS IsletimSistemi,
        OS.Version0 AS BuildNumarasi,
        CASE WHEN TPM.SpecVersion0 IS NOT NULL THEN 'Var' ELSE 'Yok' END AS TPM_Destegi,
        CASE 
            WHEN FW.UEFI0 = 1 THEN 'UEFI'
            WHEN FW.UEFI0 = 0 THEN 'Legacy'
            ELSE 'Bilinmiyor'
        END AS BootModu,
        ROW_NUMBER() OVER (PARTITION BY CS.Name0 ORDER BY CS.ResourceID) AS rn
    FROM v_GS_COMPUTER_SYSTEM CS
    LEFT JOIN v_GS_PC_BIOS BIOS ON CS.ResourceID = BIOS.ResourceID
    LEFT JOIN v_GS_X86_PC_MEMORY MEM ON CS.ResourceID = MEM.ResourceID
    LEFT JOIN v_GS_PROCESSOR CPU ON CS.ResourceID = CPU.ResourceID
    LEFT JOIN v_GS_LOGICAL_DISK HDD ON CS.ResourceID = HDD.ResourceID AND HDD.DeviceID0 = 'C:'
    LEFT JOIN v_GS_NETWORK_ADAPTER_CONFIGURATION NAC
        ON CS.ResourceID = NAC.ResourceID
        AND NAC.IPEnabled0 = 1
        AND (
            NAC.Description0 IS NULL OR (
                NAC.Description0 NOT LIKE '%Hyper-V%'
                AND NAC.Description0 NOT LIKE '%VMware%'
                AND NAC.Description0 NOT LIKE '%VirtualBox%'
                AND NAC.Description0 NOT LIKE '%Loopback%'
            )
        )
    LEFT JOIN v_GS_OPERATING_SYSTEM OS ON CS.ResourceID = OS.ResourceID
    LEFT JOIN v_GS_TPM TPM ON CS.ResourceID = TPM.ResourceID
    LEFT JOIN v_GS_FIRMWARE FW ON CS.ResourceID = FW.ResourceID
    INNER JOIN v_FullCollectionMembership FCM ON CS.ResourceID = FCM.ResourceID
    WHERE FCM.CollectionID = 'ONK00043'
),
TemelVeri AS (
    SELECT * FROM TemelVeri_Ranked WHERE rn = 1
)
SELECT
    ROW_NUMBER() OVER (ORDER BY TV.BilgisayarAdi) AS [Sıra No],
    TV.Marka,
    TV.Model,
    TV.BIOSVersiyonu,
    TV.BilgisayarAdi,
    LEFT(TV.IPAdresi, CHARINDEX(',', TV.IPAdresi + ',') - 1) AS IPAdresi,
    TV.MACAdresi,
    TV.RAM_GB,
    TV.CPUBilgisi,
    TV.DiskBoyutu_GB,
    TV.BilgisayarSeriNo,
    TV.IsletimSistemi,
    TV.BuildNumarasi,
    TV.TPM_Destegi,
    TV.BootModu,
    ISNULL(DTA.DiskTurleri, 'Yok') AS DiskTurleri,
    ISNULL(YA.Yazicilar, 'Yok') AS Yazicilar,
    ISNULL(MB.MonitorManufacturer, 'Yok') AS MonitorManufacturer,
    ISNULL(MB.MonitorModel, 'Yok') AS MonitorModel,
    ISNULL(MB.MonitorSerialNumber, 'Yok') AS MonitorSerialNumber
FROM TemelVeri TV
LEFT JOIN DiskTuruAgg DTA ON TV.ResourceID = DTA.ResourceID
LEFT JOIN YazicilarAgg YA ON TV.ResourceID = YA.ResourceID
LEFT JOIN MonitorBilgisiAgg MB ON TV.ResourceID = MB.ResourceID

Artık tek yapmanız gereken bir sonraki rapor bölümünden bunu rapor haline getirmeniz.

Resim
Blog'a Dön