diff --git a/Beispielprojekt/.gitkeep b/Beispielprojekt/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Beispielprojekt/Check-Invitations.ps1 b/Beispielprojekt/Check-Invitations.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..6d529b3e855793935fe8f42fa8d4afa57ffa4337 --- /dev/null +++ b/Beispielprojekt/Check-Invitations.ps1 @@ -0,0 +1,86 @@ +function Check-Invitations +{ + # Setzen der Parameter für die Funktionen + [CmdletBinding()] + param + ( + # Pfad zur Excel-Datei + $xlsxpath + ) + + # Importieren der Excel-Datei mit den Mailboxen + $File = Import-Excel -Path $xlsxpath + # Alt: $file = Import-CSV -Path "C:\Abschlussprojekt\Files\mai.rwth-aachen.de.csv" -Delimiter ";" + + # Importieren aller Mailboxen aus dem Mailsystem + $AllMbxsInMailsystem = $WS.GetMailboxList() | Select UPN,EMailaddress,GivenName,Sn,@{Name="QuotaInMB"; Expression = {$_.QuotaInB/1048576}},@{Name="TotalItemSizeInMB"; Expression = {$_.TotalItemsizeInB/1048576}},Mailboxtype + + # Importieren aller Invitations aus dem Mailsystem + $AllInvitations = $WS.GetInvitations() + + foreach($MbxinFile in $File) + { + if($MbxInFile.UPN -eq $null) + { + # Sucht nach dem jeweiligen Postfach im Mailsystem + $MbxInMailSystem = $AllMbxsInMailsystem | Where {$_.emailaddress -eq $MbxInFile.emailaddress} + + # Wenn das Postfach noch nicht existiert + if($MbxInMailSystem -eq $null) + { + # In allen vorhandenen Einladungen wird geprüft, ob das Postfach schon eingeladen wurde + $MbxInInvitations = $AllInvitations | Where {$_.EMailaddress -eq $MbxInFile.Emailaddress} + # Wenn kein Ergebnis zurückkommt, wird eine Einladung erstellt + if($MbxInInvitations -eq $null) + { + write-verbose "Das Postfach $($MbxInFile.Emailaddress) existiert noch nicht in der Domäne und wird nun eingeladen" + $quotaPools = $WS.GetQuotaPoolsForDomain($primaryDomain) + $QuotaPoolID = $quotapools[0].ID + $PrimaryEMailAddress = $MbxinFile.EMailaddress + $GivenName = $MbxinFile.GivenName + $Surname = $MbxinFile.Sn + $InitialQuotaINMB = $MbxinFile.InitialQuotaInMB + $Mailboxtype = 0 + + # QuotaPoolID,primaryEMailAddress,givenname,surname,quotaINMB,aliasadresses,Mailboxtype,deliverToMailboxAndForward,forwardingSmtpAddress,resourceOwner + $invitationResult = $WS.CreateMailaccountInvitation($quotaPools[0].ID, $PrimaryEMailAddress, $Surname, $GivenName, $InitialQuotaINMB, @(), $mailboxtype, $false, $null, $null) + } + # Wenn ein Ergebnis zurückkommt, kommt eine Statusmeldung der Einladung + else + { + write-verbose "Das Postfach $($MbxInFile.emailaddress) wurde am $(Get-Date $MbxInInvitations.Whencreated -Format "dd.MM.yyyy HH:mm") Uhr in die Domäne eingeladen, aber die Einladung wurde noch nicht angenommen (ActivationCode: $($MbxInInvitations.ActivationCode))" + #$MbxInFile.UPN = "TESTCODE@mai.rwth-aachen.de" + } + } + # Wenn das Postfach schon existiert, aber noch kein UPN in der Datei eingetragen ist. (Die Einladung wurde angenommen und die Datei wird nun bearbeitet) + else + { + write-verbose "Die Einladung für das Postfach $($MbxInFile.emailaddress) wurde nun angenommen. Excel-Datei wird nun mit dem UPN ergänzt" + + # Bearbeiten des Eintrags in der Variable zum späteren Exportieren + $MbxInFile.UPN = $MbxInMailSystem.UPN + # Setzen des Tags zum Überschreiben der Datei + $overwrite = 1 + } + } + # Wenn der UPN schon gesetzt ist + else + { + write-verbose "Der UPN des Accounts $($MbxInFile.Emailaddress) ist schon gesetzt und der Account existiert bereits in der Domäne." + } + } + + # Es wird geprüft, ob das Excelfile abgeändert wurde + if($overwrite -eq 1) + { + # Das abgeänderte Excelfile wird nun abgespeichert + # (da überschreiben nicht geht, wird das alte erst gelöscht und danach das neue erstellt) + write-verbose "Die Excel-Datei wird nun überschrieben mit den neuen Einträgen" + rm $xlsxpath + $File | Export-Excel -Path $xlsxpath -AutoFilter -AutoSize + } + else + { + write-verbose "Es mussten keine Änderungen am Excel-File vorgenommen werden. Excel File wird nicht überschrieben" + } +} #Ende der Funktion Check-Invitations \ No newline at end of file diff --git a/Beispielprojekt/Check-Mailinglists.ps1 b/Beispielprojekt/Check-Mailinglists.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..d0e1daff86d12f8f1b8d4d1dcebdd3a3ad8201e7 --- /dev/null +++ b/Beispielprojekt/Check-Mailinglists.ps1 @@ -0,0 +1,65 @@ +function Check-Mailinglists +{ + [CmdletBinding()] + param + ( + # Pfad zur Excel-Datei + $xlsxpath + ) + + # Importieren der Excel-Datei mit den Mailboxen + $File = Import-Excel -Path $xlsxpath + + # Importieren aller Postfächer aus dem Mailsystem + $AllMbxsInMailsystem = $WS.GetMailboxlist() + + # Importieren aller Mailinglisten aus dem Mailsystem + $AllMailingLists = $WS.getMailLists() + write-verbose "Es gibt folgende Mailinglists:" + + # Aufzählen aller Mailinglists untereinander (bei Write-Verbose "$AllMailingLists.Emailaddress" wäre die Anzeige nebeneinander, was nicht gut aussieht) + foreach($Mailinglist in $AllMailinglists) + { + write-verbose "$($Mailinglist.Emailaddress)" + } + + # ForEach-Schleife für die Überprüfung + foreach($MailingList in $AllMailinglists) + { + # Ausgabe für Verbose + write-verbose "`n --Die Mailingliste $($Mailinglist.emailaddress) wird nun überprüft" + + # Holen der gewünschten Subscriber der Mailingliste aus der Excel-Datei + $SupposedMembers = $File | Where {$_.UPN -ne $null -and $_.Mailinglists -like "*$($Mailinglist.EMailaddress)*"} + + # Holen der aktuellen Mitglieder der Mailingliste + $CurrentMembers = $WS.GetUsersInMaillist($Mailinglist.EMailAddress) + + foreach($SupposedMember in $SupposedMembers) + { + # Wenn der gewünschte Member in der Mailingliste enthalten ist, ist alles ok. + if($Currentmembers.Emailaddress -contains $SupposedMember.Emailaddress) + { + write-verbose "$($SupposedMember.Emailaddress) ist schon in der Mailingliste $($Mailinglist.Emailaddress) und auch ein gewünschter Member. Alles korrekt" + } + # Wenn der gewünschte Member noch KEIN Mitglied der Mailingliste ist, wird er hinzugefügt + elseif($CurrentMembers.Emailaddress -notcontains $SupposedMember.Emailaddress) + { + write-host "$($SupposedMember.Emailaddress) ist ein gewünschter Member der Mailingliste $($Mailinglist.Emailaddress), ist aber noch kein Mitglied. Wird nun hinzugefügt" -foreground yellow + $WS.AddMailboxToMaillist($Mailinglist.Emailaddress,$SupposedMember.UPN) + #$WebserviceConnection.addMailboxToMaillist($distributionlist, $mailbox.upn) + } + } + + # Testen in die andere Richtung nach nicht gewünschten Einträgen + foreach($CurrentMember in $CurrentMembers) + { + # Wenn der aktuelle Member NICHT in den gewünschten Membern vorhanden ist, wird er entfernt + if($SupposedMembers.Emailaddress -notcontains $CurrentMember.Emailaddress) + { + write-host "$($CurrentMember.Emailaddress) ist schon in der Mailingliste $($Mailinglist.Emailaddress), ist aber KEIN gewünschter Member. Wird nun entfernt" -foreground yellow + $ws.RemoveMailboxFromMaillist($Mailinglist.Emailaddress,$Currentmember.UPN) + } + } + } +} #Ende der Funktion Check-Mailinglists \ No newline at end of file diff --git a/Beispielprojekt/Check-Quota.ps1 b/Beispielprojekt/Check-Quota.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..b755c7a34a3e1a57d51e60b4876f60ddf945f720 --- /dev/null +++ b/Beispielprojekt/Check-Quota.ps1 @@ -0,0 +1,103 @@ +function Check-Quota +{ + [CmdletBinding()] + param + ( + # Pfad zur Excel-Datei + $xlsxpath, + # Threshold in %, ab wann das Postfach erhöht werden soll + $Threshold = 7, + # Wert in Prozentwert, wie viel das QUota immer erhöht werden soll + $Quotamultiplicator = 1.25 + ) + + # Die Funktion überprüft und vergleicht das Quota jeder Mailbox im Mailsystem mit dem gewünschten Quota aus + # der Excel-Datei und erhöht bei überschreiten des Schwellwertes das Quota der Mailbox. Den Schwellwert kann man im Skript anpassen + # und ist standardmäßig auf 75% gesetzt. Wenn der Schwellwert (Threshold) überschritten wird, wird standardmäßig um 25% erhöht. + # Bevor diese Funktion ausgeführt werden kann, muss erst Connect-Webservice ausgeführt werden. + + # Importieren der Excel-Datei mit den Mailboxen + $File = Import-Excel -Path $xlsxpath + + # Filtern der EInträge in der Excel-Datei, dass nur Einträge mit UPN genommen werden + $file = $file | Where {$_.UPN -ne $null} + + # Importieren aller Mailboxen aus dem Mailsystem und Formatieren der Spalten + $AllmbxsInMailsystem = $WS.GetMailboxList() | Select UPN,EMailaddress,GivenName,Sn,@{Name="QuotaInMB"; Expression = {$_.QuotaInB/1048576}},@{Name="TotalItemSizeInMB"; Expression = {$_.TotalItemsizeInB/1048576}},Mailboxtype + + # Geht jede Zeile in der Excel-Datei durch und vergleicht dann den Eintrag mit dem Ist-Zustand in dem Mailsystem + foreach($MbxinFile in $File) + { + # Bekommen des jeweiligen Postfaches im Mailsystem + $MbxInMailSystem = $AllmbxsInMailsystem | Where {$_.Emailaddress -eq $MbxInFile.EMailaddress} + + # Wenn ein Eintrag gefunden wird + if($MbxInMailsystem -ne $null) + { + # Bekommen des aktuellen Quotas + $CurrentQuota = $MbxInMailSystem.QuotaInMB + $CurrentUsage = $MbxInMailSystem.TotalItemSizeInMB #Muss gefragt werden, ob das die aktuelle Belegung des Postfaches ist + $Filledpercent = 100/$CurrentQuota*$CurrentUsage + + # Auflisten aller wichtigen Eigenschaften des Postfachs + write-verbose "Das Postfach $($MbxInMailsystem.UPN) hat aktuell folgende Eigenschaften + Current Quota: $CurrentQuota MB + Current Usage: $CurrentUsage MB + FilledPercent = $FilledPercent %" + + # Wenn der belegte Speicher über dem threshold liegt + if($filledPercent -gt $threshold) + { + # Neues Quota wird errechnet und aufgerundet auf ganze MB + $NewQuota = $CurrentQuota * $Quotamultiplicator + $newQuota = [Math]::ceiling($newQuota) + + # Wenn das Aktuelle Quota schon am festgelegten Maximum ist, wird nicht erhöht + if($CurrentQuota -eq $MbxinFile.MaxQuotaInMB) + { + # write-verbose info + write-host "Schwellwert überschritten! Die Mailbox würde nun ein erhöhtes Quota bekommen, hat aber bereits das Maximalquota ($($MbxinFile.MaxQuotaInMB)MB) erreicht. Es wird keine weitere Erhöhung vorgenommen. `n" -foreground yellow + } + # Wenn das Neue Quota nach Erhöhung größer als das festgelegte Maximum ist, wird nur bis zum festgelegten Maximum erhöht + elseif($newQuota -ge $MbxinFile.MaxQuotaInMB) + { + # write-verbose info + write-host "Schwellwert überschritten! Das Postfach wurde vergrößert und hat nun das Maximalquota von $($MbxinFile.MaxQuotaInMB)MB erreicht. Es wird nicht mehr weiter erhöht `n" -foreground yellow + + # Setzen des neuen Quotas + $newQuota = $mbxInFile.MaxQuotaInMB + $WS.SetQuota($($MbxinMailsystem.upn),$newQuota) + } + # Wenn das Neue Quota nach Erhöhung kleiner als das festgelegte Maximum ist, wird das Quota wie gewünscht erhöht + elseif($newQuota -lt $MbxinFile.MaxQuotaInMB) + { + # write-verbose info + write-host "Das Postfach hat das Margin für eine Quotaerhöhung erreicht. Das Postfach bekommt nun 25% mehr Quota (bis Maximal $($MbxinFile.MaxQuotaInMB)MB) + Altes Quota für $($MbxInMailsystem.UPN): $CurrentQuota MB + Neues Quota für $($MbxInMailsystem.UPN): $newQuota MB" -foreground yellow + + # Setzen des neuen Quotas + $WS.SetQuota($($MbxinMailsystem.upn),$newQuota) + } + else + { + write-host "Irgendwas geht nicht: Skriptbedingungen prüfen, Administrator benachrichtigen `n" + } + + # Entfernen der Variable newquota, um fehler auszuschließen + Remove-Variable newquota + } + # Wenn der Threshold für eine Quotaerhöhung noch nicht erreicht ist + else + { + # write-verbose info + write-verbose "Das Quota der Mailbox sieht gut aus. Quotaerhöhung wird nicht durchgeführt. `n" + } + + } + else + { + write-verbose "Die E-Mail-Adresse >$($MbxInFile.EMailaddress)< ist wahrscheinlich falsch konfiguriert, wurde sie vielleicht abgeändert?" + } + } #Ende foreach-Schleife +} #Ende Function Check-Quota \ No newline at end of file diff --git a/Beispielprojekt/Connect-Webservice.ps1 b/Beispielprojekt/Connect-Webservice.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..544e0cc3153f518c36833ade522c365e1332d90c --- /dev/null +++ b/Beispielprojekt/Connect-Webservice.ps1 @@ -0,0 +1,43 @@ +function Connect-WebService # Verbinden mit dem WebServices +{ + # Setzen der Parameter für die Funktionen + [CmdletBinding()] + param($global:primarydomain="URL der primäre Maildomäne, z.B. itc.rwth-aachen.de") + + # Get-Credentials + $username = "srv123456@rc.rwth-ad.de" + $CredentialPath = "C:\Pfad\Credentials" + $PwdSecureString = Get-Content "$CredentialPath\$Username.cred" | ConvertTo-SecureString + $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $PwdSecureString + + # Mit API verbinden + $uri = "https://ws.rc.rwth-ad.de/ex-cache-ws/APIv04.asmx?WSDL" + + + # Hier wird eine Do-Schleife verwendet, weil das verbinden mit dem ws.rwth-ad.de manchmal nicht klappt + $counter = 0 + do + { + $counter++ + write-verbose "Versuch $counter" + $error.clear() + $global:WS = New-WebServiceProxy -Uri $uri -Credential $cred + if($error.length -ne 0) + { + sleep 2 + } + } + until($error.length -le "0" -or $counter -eq 5) + + if($WS -eq $null -or $counter -eq 5) + { + write-host "Es konnte sich nicht mit dem Mailsystem verbunden werden, Skript wird nun abgebrochen; + Inhalt der Error-Variable: + $error" -foreground Red + break + } + else + { + write-verbose "Verbindungsversuch zum Mailsystem erfolgreich" + } +} diff --git a/Beispielprojekt/Files/.gitkeep b/Beispielprojekt/Files/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Beispielprojekt/Files/Beispiel-Exceldatei.xlsx b/Beispielprojekt/Files/Beispiel-Exceldatei.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fe5b9396fe3d6dd4e7f4c6783b846c80912a3beb Binary files /dev/null and b/Beispielprojekt/Files/Beispiel-Exceldatei.xlsx differ diff --git a/Beispielprojekt/Files/Logs/.gitkeep b/Beispielprojekt/Files/Logs/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Beispielprojekt/Initialize.ps1 b/Beispielprojekt/Initialize.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..e046813d167bf1825c2554900175a25db62d3805 --- /dev/null +++ b/Beispielprojekt/Initialize.ps1 @@ -0,0 +1,34 @@ +function Initialize +{ + [CmdletBinding()] + param() + + #Excel-Modul + write-verbose "Es werden die benötigten Module geladen und ggf. Installiert.." + $GetModule = Get-Module ImportExcel -ListAvailable -ErrorAction SilentlyContinue + if($GetModule -eq $null) + { + write-verbose "Modul existiert noch nicht und wird nun installiert" + Install-Module ImportExcel -Confirm:$false + write-verbose "Modul wurde installiert und wird nun importiert" + Import-Module ImportExcel + + } + else + { + write-verbose "Modul existiert schon und wird nun importiert" + Import-Module ImportExcel + } + write-verbose "Module geladen!" + + # Testen, ob das Excel-File existiert + if($(Test-Path -Path $xlsxpath) -eq $true) + { + write-verbose "Excel-Datei existiert bei >$xlsxpath< und wird im laufe des Skriptes benutzt" + } + else + { + write-host "Excel-Datei konnte bei >$xlsxpath< nicht gefunden werden. Bitte verschieben Sie das Excel-File oder ändern Sie den Dateipfad" + break; + } +} \ No newline at end of file diff --git a/Beispielprojekt/Run.ps1 b/Beispielprojekt/Run.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..fa200041c57cbecbb6c047ef22b4332234e3e334 --- /dev/null +++ b/Beispielprojekt/Run.ps1 @@ -0,0 +1,56 @@ +function Run +{ + # Setzen der Parameter für die Funktionen + [CmdletBinding()] + param + ( + # Pfad zur Excel-Datei (Inputdatei) + $xlsxpath = "C:\Verwaltungspfad\Files\Pfad zur Excel-Datei", + $Logpath = "C:\Verwaltungspfad\Files\Logs\$(Get-Date -format "yyyy_MM_dd__HH_mm")_Log.log" + ) + + #Starten des Loggings + Start-Transcript -Path $LogPath + + # Importieren der anderen Dateien + . .\Connect-Webservice.ps1 + . .\Initialize.ps1 + . .\Check-Invitations.ps1 + . .\Check-Quota.ps1 + . .\Check-Mailinglists.ps1 + + + # Diese funktion führt automatisch alle Schritte automatisch durch in folgender Reihenfolge: + + # Laden aller Module (Excel) + write-host "Die Funktion Load-Modules wird ausgeführt" -Foreground darkyellow + Initialize + write-host "Die Funktion Load-Modules ist durchgelaufen `n" -Foreground darkyellow + + + # Verbinden mit dem Webservice der RWTH Aachen + write-host "Die Funktion Connect-Webservice wird ausgeführt" -Foreground darkyellow + Connect-WebService + write-host "Die Funktion Connect-Webservice ist durchgelaufen `n" -Foreground darkyellow + + + # Überprüfung, ob neue Accounts existieren und ggf. Einladung erstellen + write-host "Die Funktion Check-Invitations wird ausgeführt" -Foreground darkyellow + Check-Invitations -xlsxpath $xlsxpath + write-host "Die Funktion Check-Invitations ist durchgelaufen `n" -Foreground darkyellow + + + # Überprüfung, ob das Quota der jeweiligen Accounts noch stimmt und anschließende Anpassung + write-host "Die Funktion Check-Quota wird ausgeführt" -Foreground darkyellow + Check-Quota -xlsxpath $xlsxpath + write-host "Die Funktion Check-Quota ist durchgelaufen `n" -Foreground darkyellow + + + # Überprüfung, ob alle Mailinglisten korrekt gesetzt sind und anschließende Anpassung + write-host "Die Funktion Check-Mailinglists wird ausgeführt" -Foreground darkyellow + Check-Mailinglists -xlsxpath $xlsxpath + write-host "Die Funktion Check-Mailinglists ist durchgelaufen `n" -Foreground darkyellow + + # Stoppen des Loggings + Stop-Transcript +} \ No newline at end of file diff --git a/Demo/MailAdm-Doku.Tests.ps1 b/PesterTests/MailAdm-Doku.Tests.ps1 similarity index 100% rename from Demo/MailAdm-Doku.Tests.ps1 rename to PesterTests/MailAdm-Doku.Tests.ps1 diff --git a/Demo/connect.ps1 b/PesterTests/connect.ps1 similarity index 100% rename from Demo/connect.ps1 rename to PesterTests/connect.ps1 diff --git a/Demo/distributionlist.ps1 b/PesterTests/distributionlist.ps1 similarity index 100% rename from Demo/distributionlist.ps1 rename to PesterTests/distributionlist.ps1 diff --git a/Demo/listquota.ps1 b/PesterTests/listquota.ps1 similarity index 100% rename from Demo/listquota.ps1 rename to PesterTests/listquota.ps1 diff --git a/Demo/mailaccounts.ps1 b/PesterTests/mailaccounts.ps1 similarity index 100% rename from Demo/mailaccounts.ps1 rename to PesterTests/mailaccounts.ps1 diff --git a/PesterTests/readme.md b/PesterTests/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..b59733da91abf1c34ef6efe6679a0b42dd7e0f43 --- /dev/null +++ b/PesterTests/readme.md @@ -0,0 +1,27 @@ +# Pester Tests für die MailAdm API + + +### Voraussetzungen + +Zur Nutzung der MailAdm API benötigen Sie einen Serviceaccount. Diesen können Sie anfordern, indem sie eine Mail an servicedesk@itc.rwth-aachen.de schicken. Derzeit ist unsere Schnittstelle mit der Windows Powershell 5.1 getestet. + +## Projektinhalt + +Das Projekt besteht aus dem Unerverzeichnis Demo, dass beispielhaft den in der API beritgestellten Funktionen zeigt. Hierbei beinhalten die einzelnen Datien folgende Themenblöcke: +1. connect.ps1 +- Verbindungsaufbau zur API +2. listquota.ps1 +- Funktionsaufrufe zur Verwaltung des Quotapool +3. mailaccounts.ps1 +- Funktionsaufrufe zur verwaltung von Mailadressen +4. distributionlist.ps1 +- Funktionsaufrufe zur Verwaltung von Verteilerlisten + +## Ausführung + +Im Verzeichnis PesterTests finden Sie entsprechende Unittests, um die Schnittstelle mit Ihrem Serviceaccount zu testen. Bitte passen Sie hierzu in der Datei MailAdm-Doku.Tests.ps1 den Bereich "connection settings" an. +Um die Tests zu starten, wechseln Sie mit in der Windows Powershell ins "Demo" Verzeichnis und starten Sie das Cmdlet invoke-pester + +## Autoren + +* **Thomas Pätzold** \ No newline at end of file diff --git a/readme.md b/readme.md index 77fd2f7d94aa3adacf60dfc98056e28b18586a85..9ffc69660150f230924ce1db04b33824851bd894 100644 --- a/readme.md +++ b/readme.md @@ -4,26 +4,15 @@ Das IT Center der RWTH Aachen stellt den zentralen Mailserver bereit. Die Verwaltung der Mailadressen wird durch registrierte Ansprechpartner für die jeweiligen Einrichtungen (Maildomänen) über eine Web Application (MailAdm) vorgenommen. Um die Prozesse zur Pflege von Mailadressen in die internen Abläufe automatisch integrieren zu können, wird neben dem MailAdm auch eine entsprechende, auf SOAP basierende, API angeboten, so dass die Pflege der Mailadressen in die vorhandenen lokalen Prozesse der jeweiligen Einrichtung integriert werden kann. -### Voraussetzungen +## Voraussetzungen Zur Nutzung der MailAdm API benötigen Sie einen Serviceaccount. Diesen können Sie anfordern, indem sie eine Mail an servicedesk@itc.rwth-aachen.de schicken. Derzeit ist unsere Schnittstelle mit der Windows Powershell 5.1 getestet. -## Projektinhalt -Das Projekt besteht aus dem Unerverzeichnis Demo, dass beispielhaft den in der API beritgestellten Funktionen zeigt. Hierbei beinhalten die einzelnen Datien folgende Themenblöcke: -1. connect.ps1 -- Verbindungsaufbau zur API -2. listquota.ps1 -- Funktionsaufrufe zur Verwaltung des Quotapool -3. mailaccounts.ps1 -- Funktionsaufrufe zur verwaltung von Mailadressen -4. distributionlist.ps1 -- Funktionsaufrufe zur Verwaltung von Verteilerlisten +## Inhalt +**PesterTests** - Dieses Verzeichnis beinhaltet die Wrapper Methoden der eigentlichen API Aufrufe die über ein zentrales Script verknüft sind, das entsprechende Unit Tests beinhaltet +**BeispielAnwendung** - Dieses Verzeichnis beinhalteet eine Demoanwendung, die die Stuerung der Maildomaenenkonfiguration über eine editierbare Excel Datei steuert. -## Ausführung - -Im Verzeichnis Demo finden Sie entsprechende Unittests, um die Schnittstelle mit Ihrem Serviceaccount zu testen. Bitte passen Sie hierzu in der Datei MailAdm-Doku.Tests.ps1 den Bereich "connection settings" an. -Um die Tests zu starten, wechseln Sie mit in der Windows Powershell ins "Demo" Verzeichnis und starten Sie das Cmdlet invoke-pester ## Autoren