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ı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar