Um dem vorzubeugen wollten wir eine Eskalation der Tickets einbauen, die unsere Mitarbeiter über das unbearbeitete Ticket informiert. Da der Service Manager leider über keine Eskalation in unserem Sinne verfügt, strickten wir uns eine mit Hilfe der SMLets.
Zunächst erstellen wir eine Funktion zum Auslesen der Mailvorlagen, die im Falle einer Eskalation an den PrimaryOwner versandt werden.In unserem Fall handelt es sich bei den PrimaryOwner um eine AD-Gruppe, in der alle Mitglieder der SupportGroup enthalten sind.
function get-MailContent ($templatename, $IR)
{
[String]$MailContent = [System.IO.File]::ReadAllText( "C:\Skripts\Mails\" + $templatename)
[string]$MailContent = $MailContent.Replace("#ID", $IR.Id)
[string]$MailContent = $MailContent.Replace("#TITLE", $IR.Title)
return $MailContent | Out-String;
echo "--get-MailContent geladen"
}
Als nächstes importieren wir die SMLets und binden die benötigten Klassen ein.
Import-Module smlets;
#benötigte Klassen
$classAnLog = Get-SCSMClass System.WorkItem.TroubleTicket.AnalystCommentLog;
$ClassIncident = Get-SCSMClass System.WorkItem.Incident$;
$AssignedToUserClass = Get-SCSMRelationshipClass System.WorkItemAssignedToUser;
$PrimaryOwnerClass = Get-SCSMRelationshipClass System.WorkItem.IncidentPrimaryOwner$
Hier muss die ID gewechselt werden. Es werden aussließlich die Incidents eskalaiert, die sich in diesen Status befinden.
#StatusID´s der Status New und InfoRecived
$IDNew = (Get-SCSMEnumeration -Name Enum.cfbcf3e99aaa4609a876f29bb138957a).id;
$IDInfoRecived = (Get-SCSMEnumeration -Name Enum.957065f4277a484794833985748bdc8a).id;
Wir laden uns die Incidents, die sich im Status "New" oder "InfoRecived" befinden.
#Incidents im Status New und InfoRecived auslesen
$IncidentswhichCouldEscalate = Get-SCSMObject -Class $ClassIncident -Filter "Status -eq $IDNew";
$IncidentswhichCouldEscalate = $IncidentswhichCouldEscalate + (Get-SCSMObject -Class $ClassIncident -Filter "Status -eq $IDInfoRecived");
Nun arbeiten wir alle zuvor gefiltererten Incidents ab.
ForEach($incident in $IncidentswhichCouldEscalate)
{
#AssignedUser auslesen
$User = Get-SCSMRelatedObject -SMObject $incident -Relationship $AssignedToUserClass;
#Nur wenn kein User zugewiesen ist
if(!$user)
{
#Nur, wenn der Incident noch nicht eskaliert ist
if($incident.Escalated -eq $false)
{
#Der Incident wurde innerhalb der letzten 4 Stunden nicht bearbeitet
if($incident.LastModified -lt (Get-Date).AddHours(-4))
{
#Eskalation auf true setzen und Eskalation I im Actionlog eintragen
$incident | Set-SCSMObject -Property Escalated -Value true;
$incident | Set-SCSMIncident -Comment "Eskalation I";
#PrimaryOwner raussuchen
$PrOwner = Get-SCSMRelatedObject -SMObject $incident -Relationship $PrimaryOwnerClass
[String]$Content = get-MailContent("EskalationI.txt") ($incident)
#Mail an PrimaryOwnerGroup
Send-MailMessage -SmtpServer "smtp.domain.de" -To ($PrOwner.UserName + "@domain.de") -From "Helpdesk
}
}
#Nur, wenn der Incident bereits eskaliert ist
elseif($incident.Escalated -eq $true)
{
#Für jedes Comment das zum Incident gehört durchführen
#Objekt der Klasse SCSMIncident des zZ zu bearbeitenden Incidents erstellen
$incdentDefInfos = Get-SCSMIncident -ID $incident.Id
#Bearbeiterkommentare des Incidents auslesen und nach Eintragungsdatum sortieren
$CommentList = $incdentDefInfos.AppliesToTroubleTicket | where {$_.Classname -eq "System.WorkItem.TroubleTicket.AnalystCommentLog" } | sort -Property EnteredDate
#Kommentarliste von hinten durcharbeiten
for($CountComments = $CommentList.Length; $CountComments -ge 0; $CountComments--)
{
#Kommentar von ServiceAccount erstellt
if($CommentList.EnteredBy[$CountComments] -eq 'domain\ServiceAccount')
{
#Ist das zuletzt erstellte Kommentar von ServiceAccount "Eskalation I", so darf der Incident ein zweites mal eskalieren
if($CommentList.Comment[$CountComments] -eq 'Eskalation I')
{
#Eskalation2 //Wenn Eskal I zutrifft und seither 4h vergangen sind
if($CommentList.EnteredDate[$CountComments] -lt (Get-Date).AddHours(-4))
{
#Eskalation auf true setzen und Eskalation I im Actionlog eintragen
$incident | Set-SCSMObject -Property Eskalated -Value true
$incident | Set-SCSMIncident -Comment "Eskalation II"
#PrimaryOwner raussuchen
$PrOwner = Get-SCSMRelatedObject -SMObject $incident -Relationship $PrimaryOwnerClass
[String]$Content = get-MailContent("EskalationII.txt") ($incident)
#Mail an PrimaryOwner Group
Send-MailMessage -SmtpServer "smtp.domain.de" -To ($PrOwner.UserName + "@domain.de") -From "Helpdesk
}
break;
}
#Kommt allerigns zuerst ein Kommentar mit "Eskalation II", so ist der Incident bereits 2* eskaliert und es muss abgebrochen werden
elseif($CommentList.Comment[$CountComments] -eq 'Eskalation II')
{
break;
}
}
}
}
}
}