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

İstanbul doğumlu ve Marmara Üniversitesi mezunudur. Mezuniyet sonrası kariyerine Bilge Adam Bilişim Teknolojileri Akademisi'nde Microsoft Certificated Trainer, Consultant ve Senior Consultant pozisyonlarında ve Data Market bünyesinde Danışmanlık Birim Müdürü olarak görev yapmaya başlamıştır. Microsoft bünyesinde tüm MEA bölgesindeki ülkelerde System Center ve Infrastructure projelerinden sorumlu Consultant olarak görev yaptıktan sonra, Aralık 2012 itibari ile KoçSistem bünyesinde danışman olarak çalışmaya başlamıştır. System Center Configuration Manager ürünü için 2010 ve 2011 yıllarında MVP (Microsoft Most Valuable Professional) ünvanı alan Anıl Erduran, 2013 yılında System Center Cloud & Datacenter Management alanında MVP seçilmiş ve uzun yıllar bu ünvanı korumayı başarmıştır. Şu anda Londra'da yaşayan Anıl Erduran AWS üzerinde çalışan Microsoft iş yüklerinden sorumlu EMEA Senior Partner Solutions Architect olarak çalışmaktadır.

Yorum Yap

Yorumlar (1)