1. Ana Sayfa
  2. Service Manager (SCSM)
  3. SCSM 2012 R2, Powershell ile Nasıl Kullanılır? – Relationships – Bölüm 2

SCSM 2012 R2, Powershell ile Nasıl Kullanılır? – Relationships – Bölüm 2

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.


Resim-1

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.


Resim-2

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 -Name System.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 -Name System.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


Resim-3


Resim-4

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 -Name System.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 -Name System.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


Resim-5

Ş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 -Name System.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 -Name System.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 -name System.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-module SMLets

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

$OlayClass = Get-SCSMClass -Name System.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 -Name System.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 -Name System.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.


Resim-6


Resim-7

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 -Name System.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 -name System.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-module SMLets

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

$OlayClass = Get-SCSMClass -Name System.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 -Name System.WorkItemAssignedToUser

#Source ve Relationship Class’ı kullanıp ilgili Relationship instance’ını siliyoruz.

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


Resim-8

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

Bu linkten Class ve Relationship bilgilerine ilişkin Marcel Zehner’in hazırladığı excel dosyasını download edebilirsiniz.

Ya da aynı dosyayı bu linkten indirebilirsiniz. Dosyanın şifresi mshowto.

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

Sakarya doğumludur. İstanbul Üniversitesi’nde Matematik/Fen ve Teknoloji öğretmenliğini bitirmiştir. Yüksek lisansını Sakarya Üniversitesi Bilgisayar Mühendisliği’nde yapmıştır. Bilişim sektöründe çeşitli firmalarda sistem ve network sorumlusu olarak çalışmıştır. Bazı kurumlarda sistem ve network üzerine uzmanlık eğitimleri vermiştir. Şu anda Netaş şirketinde kurumsal danışman olarak görev yapmaktadır. Microsoft System Center ürünleri, Powershell ve Azure teknolojileri ile ilgilenmektedir. 2016 yılında Microsoft tarafından Cloud and Datacenter alanında MVP unvanını almıştır.

Yorum Yap