In einem älteren Artikel habe ich mich schon einmal mit der Frage beschäftigt, wie man neue Genehmigungsanforderungen für Software (Anwendungen) in System Center Configuration Manager per Mail an den Admin melden kann.
Was aber, wenn nicht (nur) der Admin eine Mail erhalten soll, sondern z.B. auch der Vorgesetzte des jeweiligen Benutzers, der die Software angefordert hat? Und was ist mit dem Benutzer selbst? Es wäre doch gut, wenn dieser bei Genehmigung/Ablehnung auch informiert wird?!
Das Ganze lässt sich natürlich wunderbar per PowerShell lösen. Damit nun aber nicht ein Prozess o.ä. permanent laufen muss, wäre es sinnvoll, dieses Skript z.B. nur 1x pro Stunde (über den Taskplaner) automatisch laufen zu lassen. In sofern interessieren in jedem Durchlauf des Skriptes auch nur diejenigen Anforderungen, die
- In der letzten Stunde neu erstellt wurden (“CurrentState” ist 1)
- In der letzten Stunde abgelehnt wurden (“CurrentState” ist 3)
- In der letzten Stunde genehmigt wurden (“CurrentState” ist 4)
Aus dieser Überlegung und der Tatsache, dass sich sowohl der Vorgesetzte als auch die Mailadressen aus dem AD auslesen lassen, resultierte dieses einfache Script (Es ist nicht wirklich “schön” geschrieben, aber zumindest rudimentär kommentiert. Für einen produktiven Einsatz wird man es ohnehin nochmal an die eigenen Bedürfnisse anpassen müssen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | $SiteName = "PS0" $SiteName = "PS0" $AdminsMail = "helpdesk@kurs.intern" $Mailserver = "mail.kurs.intern" $Absender = "SCCM Application Request Admin" $MailAnAdmins = $True $MailAnVorgesetzten = $True function Send-MyEmail { Param( [string]$Sender, [string]$Empfaenger, [string]$Mailserver, [string]$Betreff, [string]$Mailtext, [Switch]$TestOnly ) try{ If(-not $TestOnly) { Send-MailMessage -From $Sender -To $Empfaenger -Subject $Betreff -Body $Mailtext -SmtpServer $Mailserver -ErrorAction Stop } else { Write-Host "E-Mail für '$Empfaenger' von '$Sender' über den Mailserver '$MailServer' `n mit dem Betreff '$Betreff' und dem Text:" Write-Host "$Mailtext `n" } } catch{ Write-Debug "Fehler beim Versand der E-Mail über den Mailserver $SmtpServer!" } } # PS-Modul für AD lasen Import-Module ActiveDirectory # PS-Module für SCCM laden Import-Module "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1" Set-Location "$($SiteName):\" # ApprovalRequests auslesen, die sich in der letzten Stunde geändert haben # (Script soll stündlich laufen) $OffeneRequests = Get-CMApprovalRequest | Where {$_.LastModifiedDate -gt (Get-Date).AddHours(-1)} ForEach($Request in $OffeneRequests) { # Anfordernder Benutzer $Benutzer = $Request.User $BenutzerLogin = Get-ADUser $($Benutzer.Substring(($Benutzer.IndexOf("\")+1), $Benutzer.Length-$Benutzer.IndexOf("\")-1)) $BenutzerName = ($BenutzerLogin | Get-ADUser).Name # Anwendung um die es geht $Anwendung = $Request.Application # Neue Anforderung If($Request.CurrentState -eq 1) { # E-Mail an Admin / Helpdeks senden If($MailAnAdmins) { Send-MyEmail -Sender $Absender -Empfaenger $AdminsMail -Mailserver $Mailserver -Betreff "Neue Softwareanforderung von $BenutzerName" -Mailtext "Blabla..." -TestOnly } # E-Mail an Vorgesetzten senden If($MailAnVorgesetzten) { # Vorgesetzter des anfordernden Benutzers $Vorgesetzter = ($BenutzerLogin | Get-ADObject -Properties Manager).Manager | Get-ADUser $VorgesetzterMail = (Get-ADObject $Vorgesetzter -Properties mail).Mail Send-MyEmail -Sender $Absender -Empfaenger $VorgesetzterMail -Mailserver $Mailserver -Betreff "Neue Softwareanforderung von $BenutzerName" -Mailtext "Blabla..." -TestOnly } } # Anforderung wurde durch einen Administrator im SCCM genehmigt If($Request.CurrentState -eq 4) { # Mail an den anfordernden User senden $BenutzerMail = (Get-ADObject $BenutzerLogin -Properties mail).Mail Send-MyEmail -Sender $Absender -Empfaenger $BenutzerMail -Mailserver $Mailserver -Betreff "Ihre Softwareanforderung für $Anwendung wurde genehmigt" -Mailtext "Blabla..." -TestOnly } # Anforderung wurde durch einen Administrator im SCCM abgelehnt If($Request.CurrentState -eq 3) { # Mail an den anfordernden User senden $BenutzerMail = (Get-ADObject $BenutzerLogin -Properties mail).Mail Send-MyEmail -Sender $Absender -Empfaenger $BenutzerMail -Mailserver $Mailserver -Betreff "Ihre Softwareanforderung für $Anwendung wurde abgelehnt" -Mailtext "Blabla..." -TestOnly } } |
In der Ausführung sieht das dann so aus:
Ausführen lässt sich das Skript via Taskplaner dann beispielsweise mit:
powershell.exe -ExecutionPolicy Bypass -file „SCCMMailsFuerApprovalRequests.ps1“
Das Skript lässt sich auch hier herunterladen:
Schreibe einen Kommentar...