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

SCSM 2012 R2, Powershell ile Nasıl Kullanılır? – Task Schedular Script – Bölüm 4

İlk bölümlerde SCSM 2012 R2 ile powershell’i etkin olarak kullanabilmeniz için gereken bileşenlerden ayrıntılı olarak bahsetmiştim. Artık yavaş yavaş powerhsell’i komut seviyesinden çıkartıp script seviyesine taşıyabiliriz. Makale serisinin bundan sonraki 3 bölümü powershell scriptleri service manager mimarisinde nasıl kullanabiliriz şeklinde ilerleyecek.

Bu bölümde service manager için yazacağımız powershell scriptleri windows server işletim sistemlerinde bulunan Task Schedular ile birlikte nasıl kullanacağınızdan bahsedeceğim.

Öncelikle ne tarz scriptleri task schedular ile kullanabileceğimizden biraz bahsedelim.

Service manager mimarisi arka planda üzerinde çalışan bir çok workflow’u barındırır. Bu workflow’ların çoğu 1 dakikalık periyotlarda belirtilen kritere uygun obje varmı diye database’i kontrol eder.

Örneğin bir email bildirimi konfigürasyonu yaptınız. Olay kaydının support grubu X iken Y olarak güncellendiğinde Y destek grubundaki kişilere email ile bu değişikliği bildirmek istiyorsunuz. Yaptınız konfigürasyon arka planda bir workflow oluşturur. Bu workflow 60 dakikada bir belirtilen şekilde bir güncelleme işlemi varmı diye sistemi kontrol eder. Kritere uygun bir kayıt bulduğunda da belirttiğiniz kiş ya da kişilere mail bildirimi yapar.

Şimdi bu şekilde kısa sürelik işler için powershell scriptlerden faydalanabiliriz. Yapmamız gereken işlem authoring tool yardımı ile service manager üzerinde çalışacak workflow yazmaktır. Bu workflowları zaman tabanlı da yapabiliriz. (Zamana bağlı olarak belirlediğimiz tarihte çalışacak şekilde). Ancak service manager üzerinde yapacağınız bir çok özelleştirme ile ortamda çalışan bir sürü workflow olacak. Bunların performansı etkilemeyecek şekilde dizayn edilip, gerekirse management serverlar arasında paylaştırılıp çalıştırılması lazım. Bu tarz zaman ayarlı powershell script’leri de service manager üzerinde çalıştırabileceğiniz gibi windows server üzerindeki task scheduler’ı kullanarakta çalıştırabilirsiniz. Performans düşürmemek ve yükü dengelemek adına zaman ayarlı scriptlerde Task Scheduler burada en iyi alternatif olarak görünüyor.

Şimdi bir örnek üzerinden ilerleyelim, ardından scripti yazalım. Sonrasında çalışılabilirliğini kontrol edelim.

Genelde task schedular ile çalıştıracağımız scriptler belli zaman aralığında sistem üzerinden bilgi alma amaçlı olur. Ya da bulk olarak işlem yapma amaçlı. Örneğin çözümlenmiş ve üzerinden belli sayıda gün geçmiş olay kayıtlarının bulk olarak kapatılması gibi. Gerçi bu işlemi yapan bir çok tool ve workflow yazıldı. Biz örneğimizde biraz daha sistemden bilgi alma şeklinde ilerleyelim.

Yapacağımız script her Pazartesi çalışsın ve belli bir support group üzerindeki 15 gün önce oluşturulmuş ancak halen kapatılmamış ya da çözümlenmemiş olay kayıtlarının listesini html olarak departmanın yöneticisine email atsın.

Şimdi öncelikle scriptimizde kullanacağımız değişkenleri tanımlayarak başlayalım.

Öncelikle 15 gün önceki tarihi belirleyip bir değişkene atayalım.

#15 gün önceyi belirlemek için bu kısma 15 günün dakika olarak değerini yazıp bir değişkene ayatalım.

$WorkItemCreatedBefore = 600

#Bugünün tarihinden dakika cinsinden belirlediğimiz tarihi çıkartıp 15 gün önceki tarihi belirleyelim.

$GetBeforeDate = (get-date).AddMinutes($WorkItemCreatedBefore).ToString(“MM/dd/yyy HH:mm:ss”)

Tarihi belirleme işleminin ardından çözümlenmemiş ve kapatılmamış kayıtları belirlemek için gereken enumeration’ları bir değişkene atamam gerekiyor. Bu amaçla “Çözümlendi” ve “Kapatıldı” olay durumlarına ait enumeration değerlerini ilgili değişkenlerine atayıp, kriterime uygun olay kayıtlarını çekerken bu çözümlendi ve kapatıldı enumeration’larına eşit olmayanlar diye çekeceğim.

#Çözümlendi ve kapatıldı enumeration değerlerini birer değişkene atayalım. Bunları olay kayıtlarını çekerken kullanacağız.

$Closed = Get-SCSMEnumeration IncidentStatusEnum.Closed$

$Resolved = Get-SCSMEnumeration IncidentStatusEnum.Resolved$

Olay kaydı üzerindeki atanan ve etkilenen kullanıcı bilgilerini de elde edip kayıtları listelerken bu bilgileri de vermemiz güzel olur.

#Etkilenen ve atanan kullanıcılara ait relationship class’ları birer değişkene atayalım.

$AssignedUserObjectRelClass = Get-SCSMRelationshipClass System.WorkItemAssignedToUser

$AffectedUserObjectRelClass = Get-SCSMRelationshipClass
System.WorkItemAffectedUser

Olay kaydına ait class’ı da objeleri elde ederken kullanmak için bir değişkene atayalım.

#Olay kaydına ait class’ı bir değişkene atayalım

$IncidentClass Get-SCSMClass -Name System.WorkItem.Incident$

#Belirli bir support gruba ait kayıtlar üzerinde işlem yapacağımız için support grubun name’ini bir değişkene atayalım. Name’i nasıl öğreneceğinizi bir önceki makalede anlatmıştım.

$TierQueueName Get-SCSMEnumeration -Name IncidentTierQueuesEnum.Tier1$

SMTP sunucusunun bilgisini girelim.

#html tablomuzun mail olarak gönderilmesi için smtp host sunucusunun bilgisini giriyoruz.

$smtphost=“mail.frt.com”

Son olarak yapacağımız işlemleri kaydedip html’e döndüreceğimiz boş bir değişken tanımlayalım. Boş değere eşitlememizin sebebi her çalıştığında içersindeki değeri boşaltması için. Aksi taktirde ard arda çalıştırdığınızda bir önceki dataları da barındıracaktır.

$html “”

Kısaca değişkenleri scriptimizin üst kısmında aşağıdaki gibi yapılandırmış olduk.

#=========================DEGISKENLER=======================================

Import-Module SMlets -force

$WorkItemCreatedBefore 600

$GetBeforeDate = (get-date).AddMinutes($WorkItemCreatedBefore).ToString(“MM/dd/yyy HH:mm:ss”)

$Closed Get-SCSMEnumeration IncidentStatusEnum.Closed$

$Resolved = Get-SCSMEnumeration IncidentStatusEnum.Resolved$

$AssignedUserObjectRelClass = Get-SCSMRelationshipClass
System.WorkItemAssignedToUser

$AffectedUserObjectRelClass Get-SCSMRelationshipClass  System.WorkItemAffectedUser

$IncidentClass = Get-SCSMClass -Name System.WorkItem.Incident$

$TierQueueName Get-SCSMEnumeration -Name IncidentTierQueuesEnum.Tier1$

$smtphost=“mail.frt.com”

$html “”

Verileri ekleyeceğimiz html tablonun style’ını belirleyelim. Bu kısım oluşacak html tablonun özlliklerini,ölçülerini, rengini ve satırların sıralı olarak renk değiştirmesini içeren bir kısım kodu içeriyor. Konumuzla çok ilgili değil. Ancak güzel bir görsel ortaya çıkması açısından kullanabiliriz.

Daha önceden html bilginiz varsa kolayca anlayabileceğiniz bir kaç satır kodu içeriyor.

Bu bölümde html’in style tagını yapılandırıp bir değişkene atıyoruz. Bu değişkeni de yaptığımız işlemler sonrasında tabloyu oluştururken kullanacağız.

#==============================E-Mail HTML  SYLE==============================

$style = “<style>BODY{font-family: Arial; font-size: 10pt;}”

$style = $style “TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}”

$style $style “TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;}”

$style $style “TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;}”

$style $style “.odd { background-color:#ffffff; }”

$style $style “.even { background-color:#dddddd; }”

$style $style “</style>”

Yine tablo görseli ile ilgili yukarıda bahsettiğim tablonun satırlarını renklendiren bir fonksiyon kullanacağız. Hazır bir fonksiyon, Aşağıdaki linkten faydalandım.

https://community.spiceworks.com/scripts/show/1745-set-alternatingrows-function-modify-your-html-table-to-have-alternating-row-colors

#=========================TABLO GORSELİ İÇİN CUSTOM FONKSIYON=================


Function
Set-AlternatingRows {


[CmdletBinding()]

    Param(

    [Parameter(Mandatory,ValueFromPipeline)]


[string]$Line,

     [Parameter(Mandatory)]

    [string]$CSSEvenClass,


[Parameter(Mandatory)]

     [string]$CSSOddClass

    )

    Begin {

        $ClassName = $CSSEvenClass

    }

    Process {

        If ($Line.Contains(“<tr><td>”))

        {    $Line = $Line.Replace(“<tr>”,“<tr class=””$ClassName“”>”)

            If ($ClassName -eq $CSSEvenClass)

            {    $ClassName = $CSSOddClass

            }

            Else

            {    $ClassName = $CSSEvenClass

            }

        }

        Return $Line

    }

}

Son olarak yapacağımız tabloya her satır ekleme işlemi sırasında çağıracağımız fonksiyonu yazalım.

Fonksiyon satırın ekleneceği tablo’ya ait değişkeni ve olay kaydına ait bilgileri içeren değişkenleri parametre olarak alıyor. Ardından yeni bir satır oluşturup satırın ilgili stünlarına olay kaydına ait bilgileri yazıyor.

#===========================HTML Tabloya Satır ekleme Fonksiyonu==============

Function
Add-Row {

param($table,$INCID,$INCStatus,$INCTitle,$INCSupportGroup,$INCAssignedToUser,$INCAffectedUser,$INCCreatedDate)

$row = $table.NewRow()


$row.ID = $INCID


$row.Status = $INCStatus


$row.Title = $INCTitle


$row.SupportGroup = $INCSupportGroup


$row.AssignedToUser = $INCAssignedToUser


$row.AffectedUser = $INCAffectedUser


$row.CreatedDate = $INCCreatedDate.ToString().Split(“”)[0]


$table.Rows.Add($row)

}

Bu işlemlerin ardından artık scriptimizin işlemi yapacak bölümünü yazabiliriz. Öncelikle bizim belirttiğimiz kriterlere uygun olan olay kayıtlarını alıp bir dizi (array) içerisine atayalım.

Zaten komut içerisinde kullanacağımız değişkenlerin bir kısmını yukarıda belirlemiştik. Komutu bir kaç parçada yorumlayacak olursak;

  • Get-SCSMObject -Class $IncidentClass – Incident Class’ındaki objeleri elde ettiğimiz komut.
  • ($_.Status -ne $Closed -AND $_.Status -ne $Resolved -AND $_.TierQueue -eq $TierQueueName -And ($_.CreatedDate) -lt $GetBeforeDate)Durumu kapandi ve çözüldü enumeration değerlerine eşit olmayan, Destek grubu değişkene tanımladığımız destek grubuna eşit olan ve oluşturulma tarihi scriptin başında belirlediğimiz 15 gün önce’yi gösteren tarihten düşük olan olay kayıtlarını elde etmek için kullandığımız filtre.

#=========================Tüm Client Systems Olaylarını AL===============================

$Incidents = @(Get-SCSMObject -Class $IncidentClass | where {($_.Status -ne $Closed -AND $_.Status -ne $Resolved -AND $_.TierQueue -eq $TierQueueName -And ($_.CreatedDate) -lt $GetBeforeDate)})

Dolayısı ile komut çalıştığında kriterimize uygun olan tüm olay kayıtlarını $Incidents isimli arrayin içerisine dolduracak. Bundan sonra yapmamız gereken işlem de arrayin içersindeki elde ettiğimiz her kayıt için tablomuzda bir adet satır oluşturma işlemi.

Kodun kalan kısmına bir koşul ile başlamamız gerekiyor. Eğer sorgumuz 15 gün önce oluşturulup çözümlenmemiş ya da kapatılmamış bir kayıt bulamazsa scriptin geri kalan komutları çalıştırmasının bir anlamı yok. Bu sebeple kodun bundan sonraki kısmına bir “if” ifadesi ile başlayalım.

Array eleman değeri 0 dan büyükse kodun kalan kısmının devam edeceğini söyleyelim.

If ($Incidents.count -gt 0)

Şimdi kodun if içersinde kalan kısmının üzerinde açıklamalarıma devam edeceğim. İlk olarak

If ($Incidents.count -gt 0)

{

#Öncelikle bir adet tablo oluşturup olmasını istediğimiz stunları bu tablo ile ilişiklendirelim.

$table = New-Object system.Data.DataTable “TestTable”

$col1 = New-Object system.Data.DataColumn ID,([string])

$col2 = New-Object system.Data.DataColumn Status,([string])

$col3 = New-Object system.Data.DataColumn Title,([string])

$col4 = New-Object system.Data.DataColumn SupportGroup,([string])

$col5 = New-Object system.Data.DataColumn AssignedToUser,([string])

$col6 = New-Objectsystem.Data.DataColumn AffectedUser,([string])

$col7 = New-Object system.Data.DataColumn CreatedDate,([string])

$table.columns.add($col1)

$table.columns.add($col2)

$table.columns.add($col3)

$table.columns.add($col4)

$table.columns.add($col5)

$table.columns.add($col6)

$table.columns.add($col7)

#==========================BELİRLİ SUPPORT GRUP İÇİN İŞLEM YAP================

#Olay Kayıtlarını içeren dizi(array) içerisindeki her bir olay objesi için tabloda satır oluşturalım. Bu amaçla foreach sorgusu ile her olay kaydına ait ilgili

attribute’ları elde edip “Add-Row” fonsiyonu ile tabloya ekleyelim.Bu işlem her bir olay kaydı için ayrı ayrı foreach döngüsü içerisinde yapılacaktır.

foreach ($Incident in $Incidents)

{

#Etkilenen ve Atanan kullanıcı relationship class’larını belirlemiştik. Onları kullanıp Related Objeleri ilgili değişkenlere atayalım.


$AssignedUser = Get-SCSMRelatedObject -SMObject $Incident -Relationship $AssignedUserObjectRelClass


$AffectedUser = Get-SCSMRelatedObject -SMObject $Incident -Relationship $AffectedUserObjectRelClass


#Ilgili olay kaydının attribute’larını Add-Row foksiyonu ile satır olarak tabloya ekleyelim.


Add-Row $table $Incident.ID $Incident.Status.DisplayName $Incident.Title $Incident.TierQueue.DisplayName $AssignedUser.DisplayName $AffectedUser.DisplayName $Incident.CreatedDate

}

#Foreach döngüsü taamlandıktan sonra boş olan html değişkenine önce Başlık Ataması yapalım. Başlığa Destek grubunun ismini ve tablodaki olay sayısını değişken olarak atayalım.


$html += “<h3>”+$TierQueueDisplayName+” – Open Incident Count :”+ $CSIncidents.Count +“</h3>”

#Son olarak oluşturduğumuz tabloyu belirttiğimiz attribute’ları ile html değişkenine aktaralım. Sonrasında değişkeni html’e dönüştürelim ve “Set-AlternatigRows” fonksiyonu ile tablonun satır

renklerini sırası ile gri ve beyaz olacak şekilde ayarlayalım.

$html += $table |select ID,Status,Title,SupportGroup,AssignedToUser,AffectedUser,CreatedDate | ConvertTo-Html -Head $Style | Set-AlternatingRows -CSSEvenClass even -CSSOddClass odd

Artık elimizde istediğimiz html tabloyu içeren bir değişken var. Bu değişkeni isterseniz direk mail atma fonksiyonu ile mail olarak atabilirsiniz. Ama öncesinde test yapmak isterseniz aşağıdaki komut ile explorer’da açmanızı öneririm.

Komut kararlı hale geldikten sonra mail konfigürasyonunu yapmanız daha uygun olur.

Bu amaçla aşağıdaki komutu scriptin sonuna yazalım ve scripti çalıştıralım. Tabi öncesinde c:\ dizininde TEMP isimli bir klasör oluşturalım. (Explorer için gerekli .htm uzantılı dosya bu bölüme kayıt edilecek.) İsterseniz farklı bir lokasyonuda kullanabilirsiniz.

#============================Explorer’da Aç====================================


set-content C:\TEMP\test.htm $html

&
‘C:\Program Files\Internet Explorer\iexplore.exe’ C:\TEMP\test.htm

#==============================E-MAIL GÖNDER====================================



#şimdilik boş. Test sonrasın doldurulacak.

}

Şimdi scriptimizi çalıştırıp sonuçları gözlemleyelim.


Resim-1

Resimde de göründüğü gibi belirttiğim kritere uygun kayıtları HTML bir tabloda elde ettik. Başlık kısmında destek grubunun ismi ve tablodaki toplam kayıt sayısı da sorunsuz şekilde gözüküyor.

İşlem tamam. Scriptimizde herhangi bir hata şu anlık gözükmüyor. Şimdi Email fonksiyonunu ekleyip explorarda açmak için kullandığımız satırı silebiliriz.

Tabi $from ve $to kısımlarını kendinize göre editlemeniz gerekiyor.

#==============================E-MAIL GÖNDER====================================


$subject = “Service Desk Open Incident Notification”


$body = $html


$to=“”


$from=“helpdesk@frt.com”


Send-Mail $from $to $subject $body $style

Scriptimizi başarılı şekilde tamamladık. Scriptin tamamını makalenin sonuda da ekleyeceğim.

Şimdi son olarak bu scripti task scheduler’a nasıl bağlayacağımıza bir göz atalım.

Öncelikle Scriptimizi çalıştıracağımız dizini oluşturalım. Ben scripti C:\Scripts dizinine koydum.

Task scheduler’ı açıp bir adet basic task oluşturarak ilerleyelim.


Resim-2

İsim ve açıklama yazarak devam edelim.


Resim-3

Scriptimiz günlük çalışabilecek bir script o yüzden günlük olarak seçtim. Siz kendinize uygun periodu seçebilirsiniz.


Resim-4

Scriptin her sabah saat 9 da çalışacağını belirtip devam edelim.


Resim-5

“Start a program” seçeneğini seçip devam edelim.


Resim-6

Program script bölümünde aşağıdaki gibi powershel –file komutunun sonuna dizini ile birlikte scriptimizi yazalım.


Resim-7

Uyarı yes ile geçip devam edelim.


Resim-8

Finish ile wizard’ı sonlandıralım.


Resim-9

Son olarak security options’ını aşağıdaki gibi seçip yetkili kullanıcı password’ünü açılap kimlik doğrulama penceresine girelim.


Resim-10


Resim-11


Resim-12

Böylece oluşturduğumuz scripti task schedular’a bağlamış olduk. Her sabah 9’da script tetiklenecek ve ilgili kişilere belirtilen kriterdeki olay kayıtları mail yolu ile bildirilecektir.


Resim-13

Umarım faydalı bir anlatım olmuştur. Bir sonraki makalemde powershell task’lardan bahsedeceğim.

Scriptin tamamı aşağıdaki gibidir.

#=========================DEGISKENLER=======================================

Import-Module SMlets -force

$WorkItemCreatedBefore = 21600

$GetBeforeDate = (get-date).AddMinutes($WorkItemCreatedBefore).ToString(“MM/dd/yyy HH:mm:ss”)

$Closed = Get-SCSMEnumeration IncidentStatusEnum.Closed$

$Resolved = Get-SCSMEnumeration IncidentStatusEnum.Resolved$

$AssignedUserObjectRelClass = Get-SCSMRelationshipClass System.WorkItemAssignedToUser

$AffectedUserObjectRelClass = Get-SCSMRelationshipClass System.WorkItemAffectedUser

$IncidentClass = Get-SCSMClass -Name System.WorkItem.Incident$

$TierQueueName = Get-SCSMEnumeration -Name IncidentTierQueuesEnum.Tier1$

$smtphost=“mail.frt.com”

$html
=
“”

#==============================E-Mail HTML STYLE==============================

$style = “<style>BODY{font-family: Arial; font-size: 10pt;}”

$style = $style + “TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}”

$style = $style + “TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;}”

$style = $style + “TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;}”

$style = $style + “.odd { background-color:#ffffff; }”

$style = $style + “.even { background-color:#dddddd; }”

$style = $style + “</style>”

#=========================E_MAIL GONDERME FONKSIYONU==========================

function Send-Mail

{


param($From,$To,$Subject,$Body,$Style)


$smtp = new-object system.net.mail.smtpClient($smtphost)


$mail = new-object System.Net.Mail.MailMessage


$mail.from = $From


$mail.to.add($To)


$mail.subject= $Subject


$mail.body= $Body |select ID,Status,Title,SupportGroup,AssignedToUser,AffectedUser,CreatedDate | ConvertTo-Html -Head $Style | Set-AlternatingRows -CSSEvenClass even -CSSOddClass odd


$mail.isbodyhtml=$true


#$mail.CC.Add(“”)


$smtp.send($mail)

}

#=========================TABLO GORSELİ İÇİN CUSTOM FONKSIYON=================


Function Set-AlternatingRows {


[CmdletBinding()]

    Param(

    [Parameter(Mandatory,ValueFromPipeline)]


[string]$Line,

     [Parameter(Mandatory)]

    [string]$CSSEvenClass,


[Parameter(Mandatory)]

     [string]$CSSOddClass

    )

    Begin {

        $ClassName = $CSSEvenClass

    }

    Process {

        If ($Line.Contains(“<tr><td>”))

        {    $Line = $Line.Replace(“<tr>”,“<tr class=””$ClassName“”>”)

            If ($ClassName -eq $CSSEvenClass)

            {    $ClassName = $CSSOddClass

            }

            Else

            {    $ClassName = $CSSEvenClass

            }

        }

        Return $Line

    }

}

#===========================HTML Tabloya Satır ekleme Fonksiyonu==============

Function Add-Row {

param($table,$INCID,$INCStatus,$INCTitle,$INCSupportGroup,$INCAssignedToUser,$INCAffectedUser,$INCCreatedDate)

$row = $table.NewRow()


$row.ID = $INCID


$row.Status = $INCStatus


$row.Title = $INCTitle


$row.SupportGroup = $INCSupportGroup


$row.AssignedToUser = $INCAssignedToUser


$row.AffectedUser = $INCAffectedUser


$row.CreatedDate = $INCCreatedDate.ToString().Split(“”)[0]


$table.Rows.Add($row)

}

#=========================Tüm Client Systems Olaylarını AL===============================

$Incidents = @(Get-SCSMObject -Class $IncidentClass | where {($_.Status -ne $Closed -AND $_.Status -ne $Resolved -AND $_.TierQueue -eq $TierQueueName -And ($_.CreatedDate) -lt $GetBeforeDate)})

If ($Incidents.count -gt 0)

{

#Öncelikle bir adet tablo oluşturup olmasını istediğimiz stunları bu tablo ile ilişiklendirelim.

$table = New-Object system.Data.DataTable “TestTable”

$col1 = New-Object system.Data.DataColumn ID,([string])

$col2 = New-Object system.Data.DataColumn Status,([string])

$col3 = New-Object system.Data.DataColumn Title,([string])

$col4 = New-Object system.Data.DataColumn SupportGroup,([string])

$col5 = New-Object system.Data.DataColumn AssignedToUser,([string])

$col6 = New-Object system.Data.DataColumn AffectedUser,([string])

$col7 = New-Object system.Data.DataColumn CreatedDate,([string])

$table.columns.add($col1)

$table.columns.add($col2)

$table.columns.add($col3)

$table.columns.add($col4)

$table.columns.add($col5)

$table.columns.add($col6)

$table.columns.add($col7)

#==========================BELİRLİ SUPPORT GRUP İÇİN İŞLEM YAP================

#Olay Kayıtlarını içeren dizi(array) içerisindeki her bir olay objesi için tabloda satır oluşturalım. Bu amaçla foreach sorgusu ile Her olay kaydına ait ilgili

#attribute’ları elde edip “Add-Row” fonsiyonu ile tabloya ekleyelim.

foreach ($Incident in $Incidents)

{


#Etkilenen ve Atanan kullanıcı relationship class’larını belirlemiştik. Onları kullanıp Related Objeleri ilgili değişkenlere atayalım.


$AssignedUser = Get-SCSMRelatedObject -SMObject $Incident -Relationship $AssignedUserObjectRelClass


$AffectedUser = Get-SCSMRelatedObject -SMObject $Incident -Relationship $AffectedUserObjectRelClass


#Data TAble’a row ekle


Add-Row $table $Incident.ID $Incident.Status.DisplayName $Incident.Title $Incident.TierQueue.DisplayName $AssignedUser.DisplayName $AffectedUser.DisplayName $Incident.CreatedDate

}

#Foreach döngüsü taamlandıktan sonra boş olan html değişkenine önce Başlık Ataması yapalım. Başlığa Destek grubunun ismini ve tablodaki olay sayısını değişken olarak atayalım.


$html += “<h3>”+$TierQueueDisplayName+” – Open Incident Count : “+ $CSIncidents.Count +“</h3>”


#Son olarak oluşturduğumuz tabloyu belirttiğimiz attribute’ları ile html değişkenine aktaralım. Sonrasında değişkeni html’e dönüştürelim ve “Set-AlternatigRows” fonksiyonu ile tablonun satır


#renklerini sırası ile gri ve beyaz olacak şekilde ayarlayalım.


$html += $table |select ID,Status,Title,SupportGroup,AssignedToUser,AffectedUser,CreatedDate | ConvertTo-Html -Head $Style | Set-AlternatingRows -CSSEvenClass even -CSSOddClass odd

#============================Explorer’da Aç====================================


set-content C:\TEMP\test.htm $html


& ‘C:\Program Files\Internet Explorer\iexplore.exe’ C:\TEMP\test.htm

#==============================E-MAIL GÖNDER====================================


$subject = “Service Desk Open Incident Notification”


$body = $html


$to=“”


$from=“helpdesk@frt.com”


Send-Mail $from $to $subject $body $style

}

Remove-Module SMlets -force

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