SCSM 2012 R2, Powershell ile Nasıl Kullanılır? – Direct SQL Query To Data Warehouse – Bölüm 10

Service Manager ile Powershell’in nasıl etkin biçimde kullanabileceğinizi elimden geldiğince ilk 9 makale de anlatmaya çalıştım. Kişisel olarak kullandığım bir durum daha var. Son olarak ondan da bahsedip seriyi sonlandırmak istiyorum.

Bir önceki bölümde sorguların nasıl gelişmiş boyuta taşınabileceğini size aktarmıştım. Bu bölümde de yine sorgular ile ilgili bir anlatım yapacağım ancak diğerlerinden biraz daha farklı olacak.:)

Bildiğiniz gibi Service Manager mimarisinde raporlama için Datawarehouse Server yapılandırıyoruz. CMDB üzerindeki veriler 5 dakikalık aralıklarla DW veritabanına aktarılıyor ve raporlamamızı bu veritabanları üzerinden yapıyoruz. Yani neredeyse canlıya yakın veri barındırıyorlar.

Datawarehouse veri tabanına aktarılan veriler daha anlamlı olarak DW üzerindeki tablolarda barındırılıyorlar. Bu nedenle tablolara yapacağınız sorgular da okunabilir ve anlamlı olabiliyor. CMDB’de ise durum farklı. Veritabanı tabloları bir birleriyle raltionship kurmuş bol guid’li tablolardan oluşuyor. Veri çekmek istediğinizde oldukça büyük sorgular yazmanız gerekiyor.

Tüm bu bahsettiklerimin ardından bu bölümda anlatacağım konuya yavaş yavaş giriş yapayım. Eğer scriptlerinize almak istediğiniz verileri CMDB’den almak yerine raporlama DB’lerinden almak istiyorsanız, yazdığınız SQL query’leri kullanıp raporlar, chartlar,HTML tablolar vb. ürünler oluşturmak istiyorsanız, yapmanız gereken Powershell üzerinden SQL sunucusuna bağlantı kurup sorgunuzu çalıştırmak ve istediğiniz verileri elde etmek J

Tabi bu işlemlerde sadece datayı çekme amaçlı kullanacağınız sorguları kullanmanız gerekiyor. Aksi durumda istenmeyen sonuçlar çıkabilir.

Şimdi öncelikle SQL’le bağlanıp istediğimiz query’i çalıştıracak ve bize istediğimiz sonuçları dönecek bir function yazalım.

Fonksiyona ait açıklamalar aşağıdaki gibi komutların üzerinde yazıyor.

function
QueryToDW

{


[CmdletBinding()]


#Fonksiyonumuz Parametre olarak query stringini alıyor.


param(


[Parameter(Mandatory)]


[String]$Query )

#Service Manager Datawarehouse SQL’ine bağlantı sağlayalım.

$SqlConnection
=
New-Object
System.Data.SqlClient.SqlConnection

#Connection Stringinde SQL Server ismini ve bağlanacağımız DB ismini yazalım

$SqlConnection.ConnectionString =
“Data Source=SQLSRV;Initial Catalog=DWDataMart;Integrated Security=SSPI”

$SqlConnection.Open()


#Connection ve Query değişkenlerimizi command’a atayalım.


$SqlCommand
=
New-Object
System.Data.SqlClient.SqlCommand


$SqlCommand.Connection = $SqlConnection


$SqlCommand.CommandText = $Query


#SQL Data Adapter konfigürasyonumuzu yapalım


$SqlAdapter
=
New-Object
System.Data.SqlClient.SqlDataAdapter


$SqlAdapter.SelectCommand = $SqlCommand


#Dataset objesi oluşturalım.


$DataSet
=
New-Object
System.Data.DataSet


#Datasetimizi sql adapter’a aktaralım.


$SqlAdapter.Fill($DataSet)


#SQL bağlantısını kapatalım.


$SqlConnection.Close()

#Sonuç olarak sorgu yaptığımız Table ve tüm satırları dönelim.


Return
$DataSet.Tables[0]

}

Şimdi yazdığımız fonksiyonu kullanıp sorgumuzu yazalım.

#Olay kayıtlarının tutulduğu IncidentDİmVw tablosundan top 10 Olay kayıtlarını ID ve Başlık bilgilerine göre sorgulayalım

$StringQueryReturn
=
QueryToDW
-Query
“SELECT TOP 10 ID, Title

FROM IncidentDimVw

ORDER BY CreatedDate DESC”

Sorgumuzda tablodaki olay kayıtlarından TOP 10 olanları istediğimiz için on adet kayıt dönecektir. Dönen cevabı Powershell üzerinde bir array değişkenine atayalım.

#Dönen sonucu bir array’e atayalım.

$Incidents
= @($StringQueryReturn)

İşlem tamam . Şimdi array üzerinde istediğimiz şekilde sorgulamalar yapabiliriz. Gerçi iki adet attribute çektiğimiz için her hangi bir filtreleme yapmamıza gerek yok. Sonuçta filtrelemeyi sql sorgusu üzerine yaptık.

Direkt olarak array’i çağıralım.

$Incidents


Resim-1

Verileri array içerisine attıktan sonra elde etmek istediğiniz sonuca göre veriyi istediğiniz şekilde manipüle edebilirsiniz. Raporlama amaçlı veri almak istediğinizde, scriptlerinize bu fonksiyonu entegre edip direkt olarak raporlama veri tabanlarına sorgu atabilirsiniz.

Powershell ile güç sizinle J

Fonksiyon ve sorgu birleşik olarak aşağıdaki gibidir.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Yazı gezinmesi

Mobil sürümden çık