1. Anasayfa
  2. Service Manager (SCSM)

SCSM 2012 R2, Powershell ile Nasıl Kullanılır? – Advanced Query – Bölüm 9


0

Service Manager mimarisinde filtreleme yapacağımız günlük işlerde olmazsa olmazımızdır. Gerek bilgi amaçlı kullanacağımız anlık sorgularda, gerek raporlama için kullandığımız sorgularda gerekse konsol üzerinden yaptığımız sorgulamalarda her zaman belli kriterler ile verileri veritabanından çekeriz.

Yoğun veri barındıran veritabanları üzerinde bu tarz işlemleri yaptığımızda düşünmemiz gereken bir husus daha ortaya çıkar. PERFORMANS!!! J

Bu amaçla yazacağımız scriptler için performans durumunu da düşünmemiz gerekir. Günün belli saatinde çalışacak scripler için bunu göz ardı edebilirsiniz ancak belli kriterlere göre anlık tetiklenen script workflow’larda ya da custom yazılmış dashboard bileşenlerinde bu durumu göz önünde tutmamız gerekiyor.

Önceki makalelerimde –Filter parametresinin where koşuluna göre daha performanslı olduğunu söylemiştim. Ama –filter’ın eksi yönü tek operator desteklemesi ve and, or sorguları kullanacağımız durumları karşılayamaması idi.

Şimdi sorguları biraz daha advanced hale getirebiliriz. Kullanacağımız yöntem server side filtering ve multiple criteria yı destekliyor. Bu nun için biraz daha fazla kod yazmamız gerekecek (bir kaç satır fazla) ancak performans artışını göze aldığımızda gösterdiğimiz çabaya değecektir.

Basit bir örnekle açıklayayım.

Bizim klasik powershell scriptlerde ve gündelik komutlarımızda kullandığımız where koşul ifadesi ile durumu Closed ya da Resolved olmayan ve en fazla 15 gün öncesine kadar oluşturulmuş olay kayıtlarını elde edip $OlayObjeleri değişkenine atayalım. (Daha önceki makalelerimde bu yapıları ayrıntılı olarak anlatmıştım.) Farklı olarak scriptin performansını measure-Command cmdlet’i ile ölçelim.

measure-Command {

Import-module
SMLets

$Date
= (Get-Date).AddDays(-15)

$OlayClass
=
Get-SCSMClass
–Name
System.WorkItem.Incident$

$Closed
=
Get-SCSMEnumeration
-Name
IncidentStatusEnum.Closed

$Resolved
=
Get-SCSMEnumeration
-Name
IncidentStatusEnum.Resolved

$OlayObjeleri
=
Get-SCSMObject
-Class
$OlayClass
|
where{$_.Status -ne $Closed
-and
$_.Status -ne $Resolved
-and
$_.CreatedDate -gt $Date} }

Script çalıştıktan sonra aşağıdaki gibi bir çıktı veriyor ve veriyi elde etmesi 18 saniye sürüyor. Toplamda 227 adet veri elde etmiş oluyor.


Resim-1

Şimdi de sorgumuzu biraz advanced hale getirelim. Biraz daha karmaşık olacak belki ya da daha fazla komut yazmamız gerekecek ancak performans farkı görülmeye değer J (Script’e ilişkin açıklamaları komutların üzerinde bulabilirsiniz.)

Yine Aynı şekilde measure-Command cmdlet’i ile script performansını ölçelim.

measure-Command {

Import-module
SMLets

$Date
= (Get-Date).AddDays(-15)

$OlayClass
=
Get-SCSMClass
–Name
System.WorkItem.Incident$

#Enumeration değerlerini değişkenlere atayalım. Bunların ID attribute’ları burada gerekli olacak.

$Closed
= (Get-SCSMEnumeration
-Name
IncidentStatusEnum.Closed).ID

#Şimdi bir kriter tipi belirlememiz gerekiyor. Bunu genelde C# ile service Manager’a uygulama geliştirdiğimizde kullanıyoruz.

$CriteriaType
=
“Microsoft.EnterpriseManagement.Common.EnterpriseManagementObjectCriteria”

#Şimdi kriterin kendisini belirtelim. Where ile belirttiğimiz kriterden çok farklı değil.

$Criteria
=
“Status != ‘$Closed‘ and Status != ‘$Resolved‘ and CreatedDate > ‘$Date‘”

#Şimdi kriter tipini ve kriterin kendisini kullanıp filtremizi oluşturalım.

$OlayFilter
=
New-Object
–Type
$CriteriaType
$Criteria,$OlayClass

#Son olarak ilgili kriteri kullanıp olay objelerini elde edelim.

$OlayObjects
= @(Get-SCSMObject
–Criteria
$OlayFilter)

}

Script’in çalışması milisaniyeler ile gerçekleşiyor. Sorgu aynı sorgu fakat şekilde saniyeye göz attığınızda SIFIR olarak göze çarpıyor . Obje sayısı ile aynı. 227
J


Resim-2

18 saniyeye sıfır saniye J Elde edilen obje sayıları da aynı J

Tamam komutlar diğerine göre hafif karışık ama performans görülmeye değer. İkisi de aynı işi yapıyor.

Tercih sizin J

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

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Sakarya doğumludur. İstanbul Üniversitesi’nde Matematik/Fen ve Teknoloji öğretmenliğini bitirmiştir. Yüksek lisansını Sakarya Üniversitesi Bilgisayar Mühendisliği’nde yapmıştır. Bilişim sektöründe çeşitli firmalarda sistem ve network sorumlusu olarak çalışmıştır. Bazı kurumlarda sistem ve network üzerine uzmanlık eğitimleri vermiştir. Şu anda Netaş şirketinde kurumsal danışman olarak görev yapmaktadır. Microsoft System Center ürünleri, Powershell ve Azure teknolojileri ile ilgilenmektedir. 2016 yılında Microsoft tarafından Cloud and Datacenter alanında MVP unvanını almıştır.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir