Es gibt gute Gründe, im System Center Service Manager 2012, eine E-Mail Benachrichtigung an eine Supportgruppe versenden zu lassen, falls einem Vorfall (Incident) über einen gewissen Zeitraum hinweg kein Bearbeiter zugewiesen wurde. Diese Benachrichtigung lässt sich grundsätzlich zwar über Incident-Schwellenwerte über die Incident-Administration einstellen, allerdings wird dabei die Warnschwelle im SCSM 2012 verwendet und diese ist eigentlich für andere Dinge gedacht. Außerdem führt die Verwendung von Warnschwellen dazu, dass der Incident entsprechend markiert wird. Das ist aber nicht gewünscht, wenn ich nur eine „Erinnerungsmail“ versenden möchte.
Man muss also nach einer anderen Lösung suchen.
Andreas Baumgarten (MVP) hat zu genau diesem Zweck eine Lösung über ein PowerShell Skript bereit gestellt.
Ich habe das Skript wie beschrieben eingesetzt. Allerdings auf einem Windows Server 2012 R2 mit dem System Center Service Manager 2012 R2 eingesetzt. Es funktioniert wie beschrieben. Bitte seine Anleitung und die notwendigen Voraussetzungen beachten.
Das PowerShell Skript wird in der Lösung von Andreas Baumgarten in regelmäßigen Abständen, z.B. über die Windows Server Aufgabenplanung, ausgeführt. Dabei wird immer dann eine E-Mail an die Empfänger einer Supportgruppe gesendet, wenn es mindestens einen Incident aus Ihrer Supportgruppe gibt, der älter als eine konfigurierbare Zeitspanne ist und dem noch kein Bearbeiter zugewiesen worden ist. Es wird also in regelmäßigen Abständen eine E-Mail versendet mit der Information darüber, welche Incidents betroffen sind. Unter Umständen werden identische E-Mails mehrfach versendet; vor allem dann, wenn man das Intervall sehr kurz wählt in dem das PowerShell Skript wiederholt ausgeführt wird.
Meine Anforderungen waren bei einem Kunden etwas abweichend:
- E-Mails sollen an eine Supportgruppe gesendet werden, wenn diese seit 30 Minuten nicht zugewiesen wurden.
- E-Mails sollen für jeden Vorfall einzeln versendet werden, nicht gemeinsam in einer Sammel-E-Mail.
- Die Überprüfung soll alle 5 Minuten stattfinden.
- Eine E-Mail für einen Incident soll nur ein einziges Mal versendet werden, nicht jedes Mal wenn das Skript ausgeführt wird.
Als Basis verwende ich das Skript von Andreas Baumgarten (Danke für die Veröffentlichung) und habe es für meine Zwecke verändert:
- Die Angabe der Supportgruppe im SCSM erfolgt wie im Original-Skript.
- Die Angabe des Zeitraumes, nachdem die E-Mail gesendet werden soll, erfolgt ebenfalls wie im Original-Skript.
- Die Überprüfung alle 5 Minuten realisiere ich über einen Windows Server Task in der Aufgabenplanung. Den Task lasse ich mit den Anmeldeinformationen des Service Manager Dienstkontos ausführen.
- Der Einzelversand wird über eine Umstrukturierung innerhalb des Skriptes erreicht.
- Das Skript, bzw. die Skripte (für mehrere Supportgruppen jeweils ein eigenes Skript) speichere ich auf dem SCSM Management Server im Pfad: c:\SCSMSkripte
- Das Ziel, jede E-Mail nur ein einziges Mal zu versenden habe ich darüber realisiert, dass ich in einen Ordner eine Datei schreiben lasse wenn eine Mail versendet wurde. Diese bekommt als Dateinamen die Incident-Nummer. Die Existenz der Datei wird vorher geprüft und nur dann eine E-Mail versendet, wenn sie nicht existiert.
Hier mein abgeändertes Skript:
# Configure your mail server, the recipient and the sender of the mail # $smtphost=”mailserver.yourdomain.local” # $to=”administrator@yourdomain.local” # $from=”mail@yourdomain.local” $smtphost=”yourmailserver.domain.intern” $to=”analyst1@domain.intern, analyst2@domain.intern” $from=”systemcenter@domain.intern” # Configure time value Incident is created before xy minutes $CreatedBefore = 30 #Configure Support GroupTier Queue Friendly Name (Displayname) $DisplayNSupportGrp = 'System Center Gruppe' # Send-Mail function function Send-Mail { param($From,$To,$Subject,$Body) $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 $mail.isbodyhtml=$true $smtp.send($mail) } # Some other variables $TierQueue = Get-SCSMEnumeration|?{$_.DisplayName -eq $DisplayNSupportGrp} $BeforeDate = (get-date).AddMinutes(-$CreatedBefore).ToString("MM/dd/yyy HH:mm:ss") $Active = Get-SCSMEnumeration IncidentStatusEnum.Active$ $TierDisplayname = $TierQueue.Displayname $AssignedUserObjectRelClass = Get-SCSMRelationshipClass System.WorkItemAssignedToUser $IncidentClass = Get-SCSMClass -Name System.WorkItem.Incident$ #Get all acitiv incidents from a tier Queue created xy minutes before $Incidents = @(Get-SCSMObject -Class $IncidentClass | where {($_.Status -eq $Active -AND $_.TierQueue -eq $TierQueue -AND ($_.CreatedDate) -lt $BeforeDate)}) If ($Incidents.count -gt 0) { #Get all unassigned incidents from list foreach ($Incident in $Incidents) { #Dateiname $filename = $incident.Id $AssignedUser = Get-SCSMRelatedObject -SMObject $Incident -Relationship $AssignedUserObjectRelClass If ($AssignedUser.Displayname -eq $NULL) { $AssignedUser If (!(Test-Path -Path "c:\SCSMSkripte\Temp\$filename")) { $Mailtext = " Sehr geehrte Damen und Herren, <br><br> Das Ticket mit der Nummer<b> "+ $Incident.Id +"</b> wurde Ihrer Supportgruppe <b>$DisplayNSupportGrp</b> zugeordnet, jedoch noch keinem Mitarbeiter zugewiesen. <br> <br>Das Ticket wurde erstellt am: "+ $Incident.CreatedDate +"<br> <br><b>Ticketpriorität: </b>"+ $Incident.Priority +"<br> <br><b>Ticketbeschreibung:</b><br> "+ $Incident.Description +"<br> <br><br><br> ----------------------------------------------------------------------------------------------------<br> Diese E-Mail wurde von System Center Service Manager automatisch generiert.<br> <br> Mit freundlichen Grüßen,<br> Ihr Team vom IT Service<br>" #Datei schreiben new-item c:\SCSMSkripte\Temp\$filename -Type File #Mail versenden $subject = “Nichtzugewiesener Incident: “+ $TierQueue.Displayname + “, ” + $Incident.Id $body = $Mailtext Send-Mail $from $to $subject $body } } } }
Die Ergebnis E-Mail sieht dann beispielsweise so aus:
Durch den Aufgabenplaner wird der Scheduled-Task alle 5 Minuten ausgeführt:
In einem Einzigen Task kann man viele Skripte für viele Supportgruppen abarbeiten lassen:
Die Dateien die in meinem Ordner C:\SCSMSkripte\Temp abgelegt werden sehen folgendermaßen aus:
Dieses Skript bzw. diese Vorgehensweise wurde vom Autor auf den hier beschriebenen Plattformen unter den angegebenen Rahmenbedingungen erfolgreich getestet. Wenn Sie eigene Erfahrungen oder Fragen zum Einsatz haben, freuen wir uns über Ihre Kommentare.
Haftungsausschluss: Die hier beschriebenen Scripts und Vorgehensweisen werden im gegenwärtigen Zustand und ohne jegliche Gewährleistung zur Verfügung gestellt. Alle Risiken, die aus der Verwendung oder Ausführung der hier beschriebenen Scripts und Vorgehensweisen entstehen, unterliegen vollständig Ihrer Verantwortung. In keinem Fall kann der Autor des Blog-Beitrages oder andere an der Bereitstellung der Inhalte Beteiligte im Zusammenhang mit den hier beschriebenen Scripts und Vorgehensweisen irgendwelchen Support leisten, noch für irgendwelche Schäden haftbar gemacht werden (einschließlich und ohne Einschränkung aller Schäden durch Geschäftsverluste, Geschäftsausfälle, den Verlust von Geschäftsinformationen oder andere finanzielle Verluste), die aus der Verwendung oder der Nichteignung zur Verwendung der hier beschriebenen Scripts und Vorgehensweisen entstehen.
Schreibe einen Kommentar