SCSM 2012 R2 With Powershell – Classes & Object – Part 1

By | 13 January 2016

 

Service manager 2012 R2 ürünü UR 8 ile birlikte kararlı bir hale geldi. Çıktığından bu yana bir çok eksiği service pack’ler ve update rollup’lar ile gidierildi. Geliştirilmeye de devam ediliyor.

Service manager ürünü diğer system center ürünleri ile yan yana kullanıldığında sadece bir yardım masası ürünü olmaktan çıkıp, bir asset managemnet ürünü, bir otomasyon ürünü gibi farklı rolleri de üstlenebiliyor. Artı bana göre en önemli özelliklerinden birisi de ortamdaki diğer Microsoft ya da non-Microsoft ürünler ile kolayca entegre olabilmesi.

Service manager’ı etkin bir biçimde kullanmak için elinizde bir çok alternatif bulunuyor. Etkin biçimde kullanmak ile kastettiğim şey, varsayılan olarak gelen konfigürasyonlar, iş akışları(workflows),arayüzler,görevler(Tasks) yetersiz kaldığında ihtiyaca uygun olarak custom konfigürasyonlar yapabilmeniz.

Bu tarz konfigürasyonları yapmanız için de açıkcası elinizde bir çok araç bulunuyor.

Bunlar;

  1. Powershell
  2. Authoring Tool
  3. Orchestrator
  4. Visual studio Authoring Extensions
  5. Custom Kodlama (C# – SDK)

 

Ben bu yazı serisinde service manager mimarisinde powershell’i nasıl etkin olarak kullanabileceğinizi anlatacağım. Sonrasında diğer araçlar için de makale hazırlarlamayı düşünüyorum. Servis manager’ın yetenekleri powershell ile nasıl daha ileriye taşıyabileceğinizi elimden geldiğince göstermeye çalışacağım.

SCSM 2012 R2 kurulumu ile birlikte builtin bir powershell modülü geliyor. Ancak bu modül içersinde bulunan CMDLet’ler çok yeterli değil. Daha efektif olması açısından codeplex’te bulunan SMLets modülünü de yüklememiz gerekiyor.

SMLets modülünü aşağıdaki linkten indirebilirsiniz.

https://smlets.codeplex.com/

İlgili linkten indireceğiniz MSI uzantılı dosyayı management server üzerine kurmanız yeterli olacaktır. Remote bir server üzerine de kurulum yapabilirsiniz. Ancak o zaman modül dosyalarını editlemeniz gerekecektir.  Önerilen SCSM Managerment server rolüne sahip bir sunucu üzerine kurulum yapmanızdır.

 

 

Kurulumun ardından powershell ile service manager ortamını yönetebilecek duruma geliyoruz. Bu makale service manager üzerinde powershell kullanımını anlatacağım için en azından service manager kullanmış olmak, mimaride ki öğelere hakim olmak gerekiyor. O sebeple yeni başlayanlar için öncelikle mimariyi anlatan makalelerden başlamalarını öneriyorum.

 

Kurulum sonrasında modülü kullanabilmemiz için aşağıdaki gibi import etmemiz gerekiyor.

Şimdi service manager’ı powershell ile yönetmeye başlayabiliriz.

Öncelikle Service manager mimairisindeki Class ve Object mantığından biraz bahsetmek istiyorum.

Service manager temelde ConfigurationItem ve WorkItem diye iki farklı class’ı içersinde barındırıyor.  Bunların her ikisi de ana class olan System Class’ının sub class’larıdır.

Bu iki farklı class’a ait öğeler Konsolda ilgili çalışma alanları altında yer alır.

ConfigurationItems (Cıs) temel olarak envanterini tutacağınız ve work item’lar ile ilişkilendireceğiniz objelerdir. Bunlar örnek olarak aşağıdaki gibidir;

  • Kullanıcılar
  • Bilgisayarlar
  • Bussiness Service’ler
  • Yazılımlar
  • Tüm Hardware’ler
  • Yazıcılar

WorkItems ise süreç yönetimini yaparken kullanacağımız (olay yönetimi,talep yönetimi,değişiklik yönetimi vb.) objelerin ana class’ı dır.

 

Class’lar ve birbirleri ile iletişimini daha ayrıntılı olarak incelemek için aşağıdaki linkten SM_job_aids zipli klasörünü indirip class diagramını inceleyebilirsiniz.

http://go.microsoft.com/fwlink/?LinkId=186291

 

 SCSM mimarisinde oluşturulacak çalışma öğesi objeleri ya da kullanıcı ve bilgisayar objeleri bu class’ların instance’ları olarak üretileceklerdir. Dolayısıyla oluşturulan iş öğesi ya da herhangi bir kullanıcıyı powershell ile çağırmak istiyorsak öncelikle class’ı belirtmemiz gereklidir.

İlk adım olarak olay kayıtları ile ilerleyelim. Sonrasında diğer class’lar içinde işlemler yapalım.

Olay objelerinin türetildiği Class’ın ismi “System.WokItem.Incident”tır.  ilk olarak bu class’ı get komutu ile çağıralım.

Bunun için Get-SCSMClass cmdlet’ini kullanıp –name parametresi ile Class ismini yazıyoruz.

PS C:\> Get-SCSMClass -Name System.WorkItem.Incident

Komutu çalıştırdığımızda istediğimiz class ile birlikte o classtan türetilmiş diğer class’larda listelenir. Ana class’ı direk elde etmek için aşağıdaki gibi class isminin sonuna $ işareti koymamız yeterli olacaktır.

PS C:\> Get-SCSMClass -Name System.WorkItem.Incident$

Class’ı ikinci bir komutta kolaylıkla kullanmak için bir değişkene atamak daha faydalı olacaktır. Komutu bir değişkene atayalım.

PS C:\> $IncidentClass = Get-SCSMClass -Name System.WorkItem.Incident$

Şimdi bu class’tan türetilmiş olay objelerini çağıralım. Class olarak daha önceden oluşturduğumuz $IncidentClass değişkenini bu komutta kullanarak ilgili class’a ait objeleri elde edelim.

PS C:\> Get-SCSMObject -Class $IncidentClass

Benim test ortamımda iki adet olay kaydı bununduğu için komut çıktısında iki adet olay kaydı görünüyor. SCSM mimarisini kullanan bir ortamda bu komutu çalıştırdığınızda olay kayıtlarının hepsini listeleyecektir.

Şimdi elde ettiğimiz olay objelerini, üzerinde bulunan alanlara göre filtreleyelim.

Önce –filter komutu ile filtreleme yapalım. ID’ye göre filtreleyelim.

Görüldüğü gibi ID’si IR2 olan olay objesini elde etmiş olduk.

Aynı şekilde where-object ile de filtreleme yapabiliriz.

PS C:\> Get-SCSMObject -Class $IncidentClass| Where-Object{$_.Id -eq “IR2”}

İki komut ile de aynı sonucu elde edebiliriz fakat –filter ile daha hızlı şekilde istediğimiz veriyi alırız. Bu sebeple kayıt sayısı çok fazla ise filtrelemelerinizde –filter kullanmanız önerilir.

Get ettiğimiz objenin üzerindeki özelliklere(Attributes) ulaşmak için select parametresini kullanıp istediğimiz attribute’un ismini yazıp listeleyebiliriz.

PS C:\> Get-SCSMObject -Class $IncidentClass| Where{$_.Id -eq “IR2”}|select Id,Title,Status,Source,TierQueue

Yada Komutu bir değişkene atayıp değişken üzerinden (.) kullanarak objenin attribute’larına ulaşabiliriz.

Olay kaydı üzerindeki liste olan attribute’lar Enumeration olarak adlandırılırlar. Bunlar içerlerinde birden çok değer taşırlar ve bu değerler arasında parent/child ilişki vardır. Enumları ilerleyen makalelerde ele alacağım.

Ancak bu kısımda açıklamak istediğim bir durum var. Olay kaydının attribute’larını powershell sorgusu ile elde ederken bir liste attribute’u get ettiğinizde “Title” attribute’undan farklı olarak aşağıdaki gibi çıktı ile karşılaşırız.

Karşılaştığımız çıktı bize list öğesinin enumeration değerini verir. Daha sonra bu objeyi ayrıntılı anlatacağım.

Komutun sonuna . koyduğumuz anda bu enumeration objesinin attribute’larını da elde edebilir duruma geliriz. Komutu aşağıdaki gibi çalıştırıyoruz.

Sonuç olarak olay kaydı üzerine atanmış olan tierqueue(Support Group) attribute’unun DisplayName attribute’unu elde etmiş oluyoruz.

Yine olay kaydı ile ilgili oluşturulma tarihi ve benzeri tarih bilgilerini de bu yolla elde edebiliriz.

Örnekleri çeşitlendirmek mümkün. Örneğin bu sefer kullanıcı objelerini powershell soruları ile elde edelim.

Bu işlem için sırası ile;

  1. Kullanıcı Class’ını çağırıyoruz. (System.User$)
  2. Çağırdığımız Class’ı get-scsmobject komutu ile kullanıp class’a ait instance’ları elde ediyoruz.
  3. Ardından yapacağımız filtreleme ile spesifik objeleri elde ediyoruz.

PS C:\> $UserClass = Get-SCSMClass -Name System.User$

PS C:\> Get-SCSMObject -Class $UserClass

Şimdi kullanıcıları departmanı IT olanlar diye filtreleyelim.

Get-SCSMObject -Class $UserClass -Filter “Department -eq IT”

Yine select ile kullanıcı objelerini istediğimiz attribute’larına göre listeleyebiliriz.

PS C:\> Get-SCSMObject -Class $UserClass -Filter “Department -eq IT”|select DisplayName,Department,Title

Olay kaydında olduğu gibi herhangi bir objeyi bir değişkene atayıp . ile attribute’larına ulaşabiliriz.

PS C:\> $USER = Get-SCSMObject -Class $UserClass -Filter “Displayname -eq ‘Fırat YAŞAR'”

PS C:\> $USER.UserName

 

Birden fazla objeyi bir array’e de atayabilirsiniz. Bunun için yapmanız gereken birden fazla kayıt dönen komutu bir array’e eşitlemektir.

PS C:\> $UsersArray = @(Get-SCSMObject -Class $UserClass -Filter “Department -eq IT”)

PS C:\> $UsersArray

 

Sonrasında oluşturduğunuz array’e sorgu atabilirsiniz.

PS C:\> $UsersArray|where{$_.UserName -eq “firat.yasar”}

Bu bölümde powershell mimarisinde class’ları ve objeleri nasıl kullanabileceğimizi görmüş olduk. Bir sonraki makalede Classlar arasındaki relationship’leri ele alacağım.

FIRAT

Leave a Reply