SCSM 2012 R2 With Powershell – Relationships – Part 2

By | 13 January 2016

Bir önceki bölümde powershell ile scsm class ve objelerini yönetmeyi anlatmıştım. Bu bölümde de SCSM üzerinde Relationship mantığından bahsedeceğim ve powershell ile relationship class’ları nasıl yöneteceğinizi aktaracağım.

Örneğin herhangi bir olay kaydını ele alalım. Olay kaydı System.WorkItem.Incident class’ına ait. Bu class’a ait attribute’ları üzerinde barındırıyor. Tabi System.WorkItem Class’ından ve System.WorkItem.TroubleTicket Class’ından miras olarak gelen attribute’lara da sahip.

Fakat Olay formunu açtığımızda üzerinde Affected User,AssignedTo user,Primary Owner,Affected CI,Affected Bussiness Service ve daha bir çok yukarıdaki şekilde görmediğiniz attribute’lar da vardır.

Bu attribute’lara relationship attribute’lar, bunların ait oldukları class’a da relationshipclass adı verilir.

Biraz karmaşık gibi görünebilir. Bunu aşağıdaki şekilde açıklayalım.

Fırat isimli kullanıcının sorununa ilişkin bir olay kaydı oluşturduğunu düşünelim. Fırat isimli kullanıcıya ait bir kullanıcı objesi CMDB’de bulunmaktadır ve bu obje System.User class’ından türetilmiştir.  Kullanıcı Olay kaydını oluşturduğunda System.WorkItem.Incident class’ından yeni bir obje türetmiş olur. Fırat isimli kullanıcının da bu olay kaydı üzerine etkilenen kullanıcı olarak eklenmesi gerekir. Bu ekleme işleminde olay kaydının ait olduğu System.WorkItem.Incident class’ı ile Fırat kullanıcısının ait olduğu System.User class’ının birbirleri ile ilişkilendirildiği System.WorkItemAffectedUser relationship class’ı kullanılır. Bu ralationship class’a ait bir instance oluşturulur. Bu instance sayesinde IR245 numaralı olay kaydının etkilenen kullanıcısı(Affected User) Fırat kullanıcısı olarak belirlenir. Burada olay kaydı kaynak class’a(Source Class), kullanıcı objesi ise hedef class’a(Target Class) aittir.

Basit anlamıyla Class ve ralationship mantığı bu şekilde işliyor. Powershell ile yapılacak işlemlerde class isimlerine de biraz hakim olmak gerekiyor. Çok sık kullanılan class isimlerine ait bir tabloyu makalemin sonunda paylaşacağım.

Şimdi öncelik powershell üzerinde get işlemi ile var olan kayıtlar üzerindeki Etkilenen Kullanıcı(Affected User) bilgisini elde edelim. Sonrasın var olan kayıtlardan birine herhangi bir kullancıyı Atanan Kullanıcı (Assigned To User) olarak atayalım. Ardından da atanan kullanıcıyı silme işlemi yapalım.

Burada etkilenen kullanıcıyı almak için service manager’ın builtin powershell modülünü kullanabileceğimiz gibi SMLets’i de kullanabiliriz. Her ikisi ile de işlemi yapalım. Default modül ile başlayalım.

#Öncelikle Olay Class’ını bir değişkene atayalım.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident

#Olay objesini elde edelim.

$OlayObjesi=Get-SCSMClassInstance-Class$OlayClass|where {$_.Id –eq“IR2”}

#Etkilenen kullanıcıya ait relationship class’ı bir değişkene atayalım.

$AffectedUserRel=Get-SCSMRelationship-NameSystem.WorkItemAffectedUser

 #Relationship Instance’ını bir değişkene atayalım.

 Burada yaptığımız işlemi açıklamak istiyorum. Kaynak obje olan olay kaydı, birden fazla relationship’e sahip.

Üzerinde atanan kullanıcı,etkilenen kullanıcı,etkilenen CI,etkilenen bussiness service vb farklı relationship class’lar mevcut. Dolayısı ile komutta yaptığımız filtreleme ile (“{$_.RelationshipId -eq $AffectedUserRel.Id}” ) olay kaydına üzerindeki relationship class’lardan ID’si $AffectedUserRel değişkenine atadığımız

class’ın id’si ile eşit olan Instance’ı ver diyoruz.#>

$AffectedUserObject=Get-SCRelationshipInstance-SourceInstance$OlayObjesi|where{$_.RelationshipId -eq$AffectedUserRel.Id}

#Instance üzerindeki hedef objeye(kullanıcı objesine) aşağıdaki gibi ulaşıp displayname’ini elde edelim. Bu bize base değerler verecektir. Kullanıcının tüm attribute’larına ulaşmak için kullanıcının objesini elde etmek gerekir.

$AffectedUserObject.TargetObject.DisplayName

#Kullanıcı objesine ulaşmak istiyorsak “Get-scsmUser” cmdlet’ini kullanıp target objeden elde ettiğimiz Id ile ilgili kullanıcıyı elde etmemiz gerekir.

Get-SCSMUser-Id$AffectedUserObject.TargetObject.Id

Default modül SMLets’e göre biraz daha karışık. Smlets kullanarak kullanıcı objesini elde etmek bence biraz daha kolay. Aşağıda açıklamaları ile komutları bulabilirsiniz.

#Öncelikle Source class’ımız olan oLay class’ını bir değişkene atıyoruz.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident$ 

#Sonra Etkilenen kullanıcıyı elde etmek istediğimiz olay objesini elde ediyoruz.

$OlayKaydi=Get-SCSMObject-Class$OlayClass-Filter“Id -eq IR2”

#Ardından Etkilenen kullanıcıya ait Relationship Class’ı bir değişkene atıyoruz.

$AffectedUserRel=Get-SCSMRelationshipClass-NameSystem.WorkItemAffectedUser

#Aşağıdaki komut ile de Etkilenen kullanıcıya ait objeyi elde ediyoruz.

$AffectedUserObject=Get-SCSMRelatedObject-SMObject$OlayKaydi-Relationship$AffectedUserRel 

#Ardından değişkenin sonuna nokta koyarak kullanıcının attribute’larına ulaşabiliyoruz.

$AffectedUserObject.DisplayName

Şimdi Atanan Kullanıcı bölümü boş olan bir kayıt üzerine atama yapalım.

Default module kullanarak aşağıdaki komutlar ile atamayı yapabilirsiniz.

# Olay Class’ını değişkene atıyoruz.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident

 #Olay Objesini elde ediyoruz.

$OlayObjesi=Get-SCSMClassInstance-Class$OlayClass|?{$_.Id -eq“IR6”}

 #Kullanıcı class’ını değişkene atıyoruz.

$KullanıcıClass=Get-SCSMClass-NameSystem.Domain.User

#Kullanıcı Objesini Elde Ediyoruz.

$KullaniciObjesi=Get-SCSMClassInstance-Class$KullaniciClass|?{$_.UserName -eq“firat.yasar”}

#Atanan kullanıcı relationship class’ını değişkene atıyoruz.

$AtananKullaniciRel=Get-SCSMRelationship-nameSystem.WorkItemAssignedToUser|FL

#New-SCRelationshipInstance komutu ile kaynak obje,hedef obje ve relationship class’ı kullanıp atamayı yapıyoruz.

New-SCRelationshipInstance-RelationshipClass$AtananKullaniciRel-Source$OlayObjesi-Target$KullanıcıClass

 

SMLets ile aşağıdaki gibi atama işlemini yapabilirsiniz.

Import-moduleSMLets

#Olay Class’ını bir değişkene atıyoruz.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident$

#Atama yapacağımız olay objesini elde ediyoruz.

$OlayKaydi=Get-SCSMObject-Class$OlayClass-Filter“id -eq IR6”

#Kullanıcı Class’ını bir değişkene atıyoruz.

$KullaniciClass=Get-SCSMClass-NameSystem.Domain.User$

#Atayacağımız kullanıcı Objesini elde ediyoruz.

$KullaniciObjesi=Get-SCSMObject-Class$KullaniciClass-Filter“UserName -eq firat.yasar”

#Atanan kullanıcı RelationSHip Class’ını bir değişkene atıyoruz.

$AtananKullaniciRelClass=Get-SCSMRelationshipClass-NameSystem.WorkItemAssignedToUser

#Source,Target ve relationship class’ları kullanıp atamayı gerçekleştiriyoruz.

New-SCSMRelationshipObject-Relationship$AtananKullaniciRelClass-Source$OlayKaydi-Target$KullaniciObjesi-Bulk

 

Komutun ardından konsolu kullanıp arayüzü açtığımızda atanan kullanıcı bölümünde atamak istediğimiz kullanıcının yer aldığını görebiliriz. Ek olarak History tabına göz attığınızda “First Assign Date” atamasınında yapıldığını görebilirsiniz.

Bazen yazdığımız scriptler ile atanan kullanıcı bilgisini temizlemek isteyebiliriz. Mesela olay kaydını bir başka support gruba atamak istediğimizde atanan kullanıcıyı olay kaydı üzerinden silmemiz gerekebilir. Böyle bir ihtiyaç olduğunda aşağıdaki komutu çalıştırmanız yeterli olacaktır.

 

Default service manager modülü ile silme işlemini aşağıdaki komutları kullanarak yapabilirsiniz.

# Olay Class’ını değişkene atıyoruz.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident

#Olay Objesini elde ediyoruz.

$OlayObjesi=Get-SCSMClassInstance-Class$OlayClass|?{$_.Id -eq“IR6”}

#Atanan kullanıcı relationship class’ını değişkene atıyoruz.

$AtananKullaniciRel=Get-SCSMRelationship-nameSystem.WorkItemAssignedToUser|FL

#kaynak olay objesini gösterip üzerindeki relationship class’lardan $AtanankullaniciRel değişkenine eşit olan Relationship

#instance’ı siliyoruz.

Get-SCRelationshipInstance-Source$IR|?{$_.RelationshipId -eq$rel.Id} |Remove-SCRelationshipInstance

 

SMLets kullanarak aşağıdaki komutlar ile atanan kullanıcı bilgisini silebiliriz.

Import-moduleSMLets

#Olay Class’ını bir değişkene atıyoruz.

$OlayClass=Get-SCSMClass-NameSystem.WorkItem.Incident$

#Atama yapacağımız olay objesini elde ediyoruz.

$OlayKaydi=Get-SCSMObject-Class$OlayClass-Filter“id -eq IR6”

#Atanan kullanıcı Relationship Class’ını bir değişkene atıyoruz.

$AtananKullaniciRelClass=Get-SCSMRelationshipClass-NameSystem.WorkItemAssignedToUser

#Source ve relationship class’ı kullanıp ilgili relationship instance’ını siliyoruz.

Get-SCSMRelationshipObject-Relationship$AtananKullaniciRelClass|where{$_.SourceObject -eq$OlayKaydi}|Remove-SCSMRelationshipObject

Bu işlemleri yaparken classlara hakim olmak gerekiyor. İnternette örnekleri incelediğinizde belli class’lara ulaşabilirsiniz.

Aşağıdaki linkten class ve relationship bilgilerine ilişkin marcel zehner’in hazırladığı excell dosyasını download edebilirsiniz.

http://marcelzehner.ch/2013/02/10/documentation-of-scsm-relationship-classes/

 

Bir sonraki makalede görüşmek üzere.

 

FIRAT

Leave a Reply