Hallo,

direkt nach dem Veröffentlichen meines letzten Beitrags hab ich mich nochmal an den Programmcode meines Out of Office Tools gesetzt. Zudem habe ich dem Tool eine eigene kleine Seite auf meinem Blog gegönnt. Dort steht das Tool zum Download bereit, ich habe dort alle Informationen zusammengefasst und das Change Log veröffentlicht.

Hier gehe ich nochmal auf die neue Version ein. Wie in dem Titel des Posts schon zu lesen ist, habe ich nun eine Grafische Oberfläche zu meinem Script hinzugefügt. Die Oberfläche ich relativ einfach gehalten aber tut was es soll: die Benutzung vereinfacht.

Einige Bilder der neuen Version:

Hier nun erstmal der Quell Code:

#===========================================================#
# Exchange Server 2010 Out of Office Tool 1.0.0.1           #
# © Andres Sichel // blog.asichel.de // blog@asichel.de     #
# Hilft bei der Konfiguration von Abwesenheitsnachrichten   #
# für Benutzer mit Mailboxen auf einem Exchange Server      #
# 2010 oder 2013                                            #
#                                                           #        
#===========================================================#

#Systembibliotheken laden
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#Hauptfensterfenster erstellen
$Fenster1 = New-Object System.Windows.Forms.Form
$Fenster1.Size = New-Object System.Drawing.Size(800,600)
$Fenster1.Text = "Exchange Server 2010 / 2013 Out of Office Tool Version 1.0.0.1 © Andres Sichel"
$Fenster1.StartPosition = "CenterScreen"

#Funktionen hinterlegen, erst fuer die Anmeldung

      function Anmelden {       
             #Am Exchange Server anmelden
             #Zertifikatsprüfungen abschalten
             $SkipCertificate = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck

                #Anmeldedaten erfragen
                $cred = Get-Credential

                #PS-Session starten --> Bei connection URI den korrekten Exchange 2010 oder 2013 Servernamen eingeben, vorzugsweise CAS-Server
                $Session = New-PSSession `
                                 -ConfigurationName Microsoft.Exchange `
                                 -ConnectionUri http://app1.sichel.loc/PowerShell/ `
                                 -Authentication Kerberos `
                                 -SessionOption $SkipCertificate  `
                                 -credential $cred `
                                 -Name Exchange 

                #Importieren der erzeugten Session in die aktuelle Session, lokal gleichlautende Befehle werden ersetzen
                Import-PSSession -Session $Session -AllowClobber
                $Ausgabe1.text ="Erfolgreich angemeldet, los gehts!"
       } #Beende Funktion Anmelden         

#Nun die Funktionen hinterlegen, jetzt fuer den Text der hinterlegt werden soll

   function Text {

           function OoO {

                        #Informationen aus dem Textfeld laden
                        $MailboxAlias1 = $Postfach2.text;
                        $Intern = $Intern2.text;
                        $Extern = $extern2.text;
                        Set-MailboxAutoReplyConfiguration $MailboxAlias1 -AutoReplyState enabled -InternalMessage "$intern" -ExternalMessage "$extern"                        
                        $Fenster2.Close()
                        $Ausgabe1.text = "Die Abwesenheistnotiz fuer das Konto $MailboxAlias1 wurde gesetzt."
                        } #Beende Funktion OoO    

                #Das Sekundäre Fenster für den 2. menuepunkt erstellen
                $Fenster2 = New-Object System.Windows.Forms.Form
                $Fenster2.Size =New-Object System.Drawing.Size (800,250)
                $Fenster2.StartPosition = "CenterScreen"

                #Den Button erstellen der den Text hinterlegt
                $Button3 = New-Object System.Windows.Forms.Button
                $Button3.Location = New-Object System.Drawing.Size(500,10)
                $Button3.Size = New-Object System.Drawing.Size(150,50)
                $Button3.Text = "4. Out of Office fuer diesen Benutzer hinterlegen"
                $Button3.Add_Click({OoO})
                $Fenster2.Controls.Add($Button3)

                #Textfeld beschreibung fuer die Abfrage des Postfachs
                $Postfach1 = New-Object System.Windows.Forms.Label
                $Postfach1.Location = New-Object System.Drawing.Size(10,10)
                $Postfach1.Size = New-Object System.Drawing.Size(150,30)
                $Postfach1.Text = "1. Das Postfach bitte:"
                $Fenster2.Controls.Add($Postfach1)

                #Textfeld fuer die Abfrage des Postfachs
                $Postfach2 = New-Object System.Windows.Forms.Textbox
                $Postfach2.Location = New-Object System.Drawing.Size(10,40)
                $Postfach2.Size =New-Object System.Drawing.Size(150,30)
                $Fenster2.Controls.Add($Postfach2)

                #Textfeld beschreibung fuer Interne Nachrichten
                $Intern1 = New-Object System.Windows.Forms.Label
                $Intern1.Location = New-Object System.Drawing.Size(10,70)
                $Intern1.Size = New-Object System.Drawing.Size(400,30)
                $Intern1.Text = "2. Die Abwesenheitsnachricht fuer Interne bitte:"
                $Fenster2.Controls.Add($Intern1)

                #Textfeld fuer Interne Nachrichten
                $Intern2 = New-Object System.Windows.Forms.Textbox
                $Intern2.Location = New-Object System.Drawing.Size(10,100)
                $Intern2.Size =New-Object System.Drawing.Size(700,30)
                $Fenster2.Controls.Add($Intern2)

                #Textfeld beschreibung fuer Externe Nachrichten
                $Extern1 = New-Object System.Windows.Forms.Label
                $Extern1.Location = New-Object System.Drawing.Size(10,130)
                $Extern1.Size = New-Object System.Drawing.Size(400,30)
                $Extern1.Text = "3. Die Abwesenheitsnachricht fuer Externe bitte:"
                $Fenster2.Controls.Add($Extern1)

                #Textfeld fuer Interne Nachrichten
                $Extern2 = New-Object System.Windows.Forms.Textbox
                $Extern2.Location = New-Object System.Drawing.Size(10,160)
                $Extern2.Size =New-Object System.Drawing.Size(700,30)
                $Fenster2.Controls.Add($Extern2)

                #Zweites Fenster anzeigen lassen
                $Fenster2.Add_Shown({$Fenster1.Activate()})
                [void] $Fenster2.ShowDialog()

           } #Beendet die Funktion Text

      function aktivieren {

                $MailboxAlias2 = $Feld1.text
                if (($Feld1.text.Length -eq 0) -or (!(Get-Recipient $Feld1.text -ErrorAction SilentlyContinue))) 
                        { 
                        $Ausgabe1.text = "Es wurde kein Benutzer eingetragen oder der Benutzer existiert nicht."
                        }
                else {

                Set-MailboxAutoReplyConfiguration $MailboxAlias2 -AutoReplyState enabled
                $Ausgabe1.text = "Die Abwesenheistnotiz fuer das Konto $MailboxAlias2 wurde aktiviert."
                }

         } #Beendet die Funktion Aktivieren         

     function deaktivieren {

                $MailboxAlias3 = $Feld1.text
                if (($Feld1.text.Length -eq 0) -or (!(Get-Recipient $Feld1.text -ErrorAction SilentlyContinue))) 
                        { 
                        $Ausgabe1.text = "Es wurde kein Benutzer eingetragen oder der Benutzer existiert nicht."
                        }
                else {
                Set-MailboxAutoReplyConfiguration $MailboxAlias3 -AutoReplyState disabled
                $Ausgabe1.text = "Die Abwesenheistnotiz fuer das Konto $MailboxAlias3 wurde deaktiviert."
                }
         } #Beendet die Funktion Deaktivieren

     function status {

                $MailboxAlias4 = $Feld1.text
                 if (($Feld1.text.Length -eq 0) -or (!(Get-Recipient $Feld1.text -ErrorAction SilentlyContinue))) 
                        { 
                        $Ausgabe1.text = "Es wurde kein Benutzer eingetragen oder der Benutzer existiert nicht."
                        }
                else {                
                $Info = Get-MailboxAutoReplyConfiguration -Identity $MailboxAlias4 | fl | Out-String;
                $Ausgabe1.text = $Info
                }
         } #Beendet die Funktion status     

     function Abmelden {

                Remove-PSSession -Name Exchange               
                $Ausgabe1.text = "Erfolgreich abgemeldet"
                $Fenster1.Close()

         } #Beendet die Funktion Abmelden                        

#Info-Text Anzeigen lassen
$About1 = New-Object System.Windows.Forms.Label
$About1.Location = New-Object System.Drawing.Size(10,10)
$About1.Size =New-Object System.Drawing.Size(400,80)
$About1.Text = "Exchange Server 2010 /2013 Out of Office Tool Version 1.0.0.1  `
© Andres Sichel // blog.asichel.de // blog@asichel.de `n 
Hilft bei der Konfiguration von Abwesenheitsnachrichten `
für Benutzer mit Mailboxen auf einem Exchange Server 2010 und 2013"
$Fenster1.Controls.Add($About1)

#Eingabefeld beschreiben
$Feld1Name = New-Object System.Windows.Forms.Label
$Feld1Name.Location = New-Object System.Drawing.Size(10,100)
$Feld1Name.Size =New-Object System.Drawing.Size(150,30)
$Feld1Name.Text = "Den Benutzernamen fuer die Aktionen 3,4 und 5 bitte:"
$Fenster1.Controls.Add($Feld1Name)

#Eingabefeld für Mailboxnamen bauen
$Feld1 = New-Object System.Windows.Forms.Textbox
$Feld1.Location = New-Object System.Drawing.Size(10,130)
$Feld1.Size = New-Object System.Drawing.Size(150,20)
#Eingabefeld in Fenster1 anzeigen lassen
$Fenster1.Controls.Add($Feld1)

#Anmeldebutton bauen
$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size(200,100)
$Button1.Size = New-Object System.Drawing.Size(80,50)
$Button1.Text = "1. Anmelden"
$Button1.Add_Click({Anmelden})
$Fenster1.Controls.Add($Button1)

#Button fuer die Aktion "Out of Office Text"
$Button2 = New-Object System.Windows.Forms.Button
$Button2.Location = New-Object System.Drawing.Size(290,100)
$Button2.Size = New-Object System.Drawing.Size(80,50)
$Button2.Text = "2. Out of Office Text"
$Button2.Add_Click({text})
$Fenster1.Controls.Add($Button2)

#Button fuer die Aktion "Out of Office aktivieren"
$Button4 = New-Object System.Windows.Forms.Button
$Button4.Location = New-Object System.Drawing.Size(380,100)
$Button4.Size = New-Object System.Drawing.Size(80,50)
$Button4.Text = "3. Out of Office aktivieren"
$Button4.Add_Click({aktivieren})
$Fenster1.Controls.Add($Button4)

#Button fuer die Aktion "Out of Office deaktivieren"
$Button5 = New-Object System.Windows.Forms.Button
$Button5.Location = New-Object System.Drawing.Size(470,100)
$Button5.Size = New-Object System.Drawing.Size(80,50)
$Button5.Text = "4. Out of Office deaktivieren"
$Button5.Add_Click({deaktivieren})
$Fenster1.Controls.Add($Button5)

#Button fuer die Aktion "Out of Office status"
$Button6 = New-Object System.Windows.Forms.Button
$Button6.Location = New-Object System.Drawing.Size(560,100)
$Button6.Size = New-Object System.Drawing.Size(80,50)
$Button6.Text = "5. Out of Office status"
$Button6.Add_Click({Status})
$Fenster1.Controls.Add($Button6)

#Button fuer die Aktion "Abmelden und Beenden"
$Button7 = New-Object System.Windows.Forms.Button
$Button7.Location = New-Object System.Drawing.Size(650,100)
$Button7.Size = New-Object System.Drawing.Size(80,50)
$Button7.Text = "6. Abmelden und Beenden"
$Button7.Add_Click({Abmelden})
$Fenster1.Controls.Add($Button7)

#Ausgabetextfeld bauen
$Ausgabe1 = New-Object System.Windows.Forms.Textbox
$Ausgabe1.Location = New-Object System.Drawing.Size(10,160)
$Ausgabe1.Size = New-Object System.Drawing.Size(730,400)
$Ausgabe1.MultiLine = $true
$Ausgabe1.ScrollBars = "Vertical"
$Fenster1.Controls.Add($Ausgabe1)

#Fenster anzeigen lassen
$Fenster1.Add_Shown({$Fenster1.Activate()})
[void] $Fenster1.ShowDialog()

 

Wichtig auch hier ist es den Servernamen einzutragen, wie in version 1.0.0.0 auch schon.

 

Das Tool lässt sich über den Downloadbereich herunterladen

Ich hoffe es gefällt und nimmt einiges an Arbeit ab … bsi zum nächsten mal.

Andi