Haikos Blog Blog von Haiko Hertes zu allen Themen rund um Microsoft und Datacenter

5Feb/160

SCCM 2012 R2 – E-Mails für Softwareanforderungen (Umfangreicher)

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:

Approval2

Approval1

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:

Downloadlink über OneDrive

4Nov/141

SCCM 2012 R2: Neue Anwendungsanforderungen automatisch melden

Der System Center Configuration Manager (SCCM) 2012 R2 bietet die Möglichkeit, Anwendungen für Benutzer als “verfügbar” bereitzustellen. In dieser Kombination (und nur dort) lässt sich auch eine Genehmigungsanforderung einschalten:

approv1

Der Benutzer hat nun die Möglichkeit, die Software über den Application Catalog (Anwendungskatalog) anzufordern:

approv2

Wurde die Anforderung vom Benutzer ausgelöst, so taucht sie dann in der SCCM-Konsole auf:

approv3

Leider ist es nicht vorgesehen, dass man das Eintreffen einer neuen Anforderung per E-Mail o.ä. meldet und in der Regel sitzt kein Admin den ganzen Tag vor der GUI und wartet auf neue Anforderungen. Also muss man eine andere Lösung schaffen, dies weitgehend zu automatisieren.

Eine Variante wäre, bei Eintreffen eben eine E-Mail zu versenden. Dazu muss man das Eintreffen einer Anforderung automatisiert feststellen können. Und dazu ist die PowerShell sehr gut geeignet:

approv4

Der Aufruf dazu lautet:

Get-CMApprovalRequest | Where-Object {$_.CurrentState -eq 1}

(CurrentState ist der Zustand der Anfroderung; “1” bedeutet, sie ist neu und unbearbeitet, “4” bedeutet z.B., sie ist bereits genehmigt)

Mittels Format-Table o.ä. könnte man die Ausgabe noch aufbereiten:

approv5

Nun lässt sich diese Ausgabe z.B. in eine E-Mail verpacken. Ein komplettes Skript könnte dann so aussehen:

1
2
3
4
5
6
7
8
9
10
$FromAdr = admin@abc.de
$ToAdr = receiver@abc.de
$SMTPSrv = send.abc.de
$MailSubject = "New SCCM Application Approval Request"
 
If((Get-CMApprovalRequest | Where-Object {$_.CurrentState -eq 1} | Measure-Object).Count -gt 0)
{
    $Mailtext = Get-CMApprovalRequest | Where-Object {$_.CurrentState -eq 1} | ft Application,User,Comments -Auto
    Send-MailMessage -from $FromAdr -to $ToAdr -subject $MailSubject -body $Mailtext -smtpServer $SMTPSrv
}
28Okt/130

SCCM: Deinstallation von Anwendungen – die einfache Variante

Seit Configuration Manager 2012 gibt es neben den “Paketen” auch die “Anwendungen”, die bei denen man zusätzlich zur Installation auch gleich die Möglichkeit der Deinstallation integrieren kann. Will man nun beide Wege sinnvoll “automatisieren”, ergibt sich häufig, dass es eine Installations- und eine Deinstallations-Sammlung gibt. Wenn man nun einen Computer in die Installations-Sammlung aufnimmt, wird die entsprechende Software auf dem Gerät installiert. Entfernt man den Client aus der Installations-Sammlung, so wird die Anwendung aber nicht automatisch deinstalliert, man müsste nun erst den CLient in die Deinstallations-Sammlung aufnehmen. Diesen Prozess kann man etwas vereinfachen:

Die Software “Adobe Reader” wurde 2x bereitgestellt – einmal für die Installation und einmal für die Deinstallation:

sccm_uninstall1

Der Trick ist nun, die Deinstallations-Sammlung über Mitgliedschaftsregeln automatisch befüllen zu lassen, und zwar so, dass das gewünschte Gerät, sobald man es aus der Installations-Sammlung entfernt hat, in die Deinstallations-Sammlung wandert – und das automatisch.

Dazu hinterlegt man an der Deinstallations-Sammlung Mitgliedschaftsregeln nach dieser Form:

sccm_uninstall2

Nun wird die Software also auf allen Geräten entfernt, die nicht in der Installations-Sammlung enthalten sind. Dadurch wird das Handling vereinfacht:

  • Gerät in Installations-Sammlung: Installation wird durchgeführt, wenn Software noch nicht vorhanden ist
  • Gerät NICHT in Installations-Sammlung: Deinstallation wird durchgeführt, falls Software vorhanden ist