1. Ana Sayfa
  2. Service Manager (SCSM)
  3. Service Manager 2012’de Custom Console Task ile Otomatik PowerShell Script’i Çağırmak Nasıl Yapılır – Bölüm 1

Service Manager 2012’de Custom Console Task ile Otomatik PowerShell Script’i Çağırmak Nasıl Yapılır – Bölüm 1

System Center 2012 Service Manager ürünü Lab/PreProd ortamlarında kullanılıyor ise test amaçlı bir çok instance (Incidents, Change Request, Release Records vb) oluşturulmuş olabilir. Demo ortamlarında normal karşılaşılan bu durum üretim ortamında ise problem yaratacaktır. Bu sebeple üretim ortamına geçilmeden önce test kayıtlarının temizlenmesi gerekmektedir.

Bu yazıda Service Manager konsolu içerisinde bir adet Console Task oluşturulacak ve bu konsol taskının bağlı bulunduğu butona tıklandığında farklı bir PowerShell scripti tetiklenecektir. Bu script ise var olan tüm instanceları silecektir. Böylece kolaylıkla demo ortamları sıfırlanabilecektir.


Resim-1

Bu işlemin gerçekleştirilmesi için custom bir PowerShell scriptleri oluşturulacak ve bu scriptler farklı Work Item kategorilerine atanacaktır. Bu blog postunda Work Item kategorisi olarak Release Records kullanılacaktır ancak script istenildiği gibi diğer instanceler için de aktif edilebilir.

Bu işlemin gerçekleştirilmesi için aşağıdaki script kullanılacaktır.

Import-Module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\SMLets $SQLServer = “SQLSERVERNAME\InstanceName” $SQLDBName = “SCSMDBNAME” $SqlQuery = “SELECT BaseManagedEntityId FROM MT_System$WorkItem$ReleaseRecord" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SqlQuery $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close() $dataset.tables[0] | foreach { $_.BaseManagedEntityId } | foreach { $_.Guid } | Out-File C:\Temp\ReleaseRecordIDs.txt Get-Content c:\Temp\ReleaseRecordIDs.txt | ForEach-Object{$RR= Get-SCSMObject -Class (Get-SCSMClass -Name System.WorkItem.releaserecord$) -Filter "ID -eq '$_'";$RR | Remove-SCSMObject -force } Remove-Item c:\Temp\ReleaseRecordIDs.txt

Şimdi her bir script adımını tek tek inceleyelim:

Import-Module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\SMLets

SMLets codeplex üzerinde yayınlanan ve Service Manager komutlarına ek olarak yönetimde kullanılabilecek komutlar ekleyen bir moduldür. Farklı SCSM objelerine ve sınıflarına erişmek için SMLets çok fazla fonksiyonalite sunacaktır. Bu sebeple ilk adımda bu modulün yüklenmesi işlemi gerçekleştirilir.

Aynı zamanda hazırlanan ufak bir fonksiyon ile SMLets modülünün yüklü olup olmadığı kontrol edilir.

$Getmodule = (get-module|%{$_.name}) -join " " if(!$GetModule.Contains("SMLets")) {Import-Module SMLets -Force}

Bir sonraki adımda Service Manager veritabanı üzerinden ilgili objelerin getirilmesi sağlanır. Bunun için her bir objesinin BaseManagedEntityID değeri bilinmesi gerekmektedir. Bu sebeple SQL üzerine bir bağlantı açılır ve ilgili query çalıştırılır.

SQLServer = "SQLSERVERNAME\InstanceName" $SQLDBName = "SCSMDBNAME" $SqlQuery = "SELECT BaseManagedEntityId FROM MT_System$WorkItem$ReleaseRecord”

Bu query tüm Release Record Entity ID değerlerini alır ve bunları SQLQuery değişkenine atar. Aynı Query SQL üzerinde çalıştırıldığında aşağıdaki çıktı elde edilir.


Resim-2

Aşağıdaki 3 satır ile birlitke SQL Server Name, SQL DB Name ve SQL Query değerleri değişkenlere atanır.

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = “Server = $SQLServer; Database = $SQLDBName; Integrated Security = True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SqlQuery $SqlCmd.Connection = $SqlConnection

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

$DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close()

Yukarıdaki adımlar ile SQL üzerinden bağlantı açılır.

$dataset.tables[0] | foreach { $_.BaseManagedEntityId } | foreach { $_.Guid } | Out-File C:\Temp\ReleaseRecordIDs.txt

ForEach-Object{$RR= Get-SCSMObject -Class (Get-SCSMClass -Name System.WorkItem.releaserecord$) -Filter “ID -eq ‘$_'”;$RR | Remove-SCSMObject -force -confirm:$false }

Yukarıdaki komutlar ile $dataset.tables[0] içerisindeki veriler bir txt içerisine aktarılır. Bu değerler ikinci komut ile konsoldan kaldırılacaktır. (Remove-SCSMObject)

Yukarıdaki bu komutlar manuel olarak çalıştırıldığında makale başında talep edilen aksiyonları alır. Makalenin ikinci bölümünde bu scripti Service Manager içerisinde bir task olarak yapılandıracağız.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

Anıl ERDURAN, Istanbul'da dogdu. Profesyonel olarak 6 senedir, toplamda 8 senedir bilişim sektöründe çalısmaktadır. Üniversite egitimiyle birlikte sektörde çesitli kurumlarda sistem uzmanı pozisyonlarında görev yaptı. Halen Bilge Adam Bilgi Teknolojileri Akademisi'nde Sistem/Network eğitmeni olarak çalışmaktadır. Microsoft ürün ailesi ve network altyapıları ile ilgili çeşitli community ve basılı yayında how-to belgeleri hazırlamaktadır. Sahip olduğu sertifikalar MCSE+S+M 2003 CISCO CCNA JUNIPER JNCIA-ER MCITP MCT

Yorum Yap

Yorumlar (1)