Skip to content
Snippets Groups Projects
Commit 4751e4ba authored by Thomas Pätzold's avatar Thomas Pätzold
Browse files

Merge branch 'dev' of https://git-ce.rwth-aachen.de/wba/mailadm-api into dev

parents b53febad 17d2dee8
Branches
No related tags found
1 merge request!5Reorganisation und Erweiterung um eine Beispielanwendung
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
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"
}
}
# These are the Pester Tests in order to demonstrate how the API works # These are the Pester Tests in order to demonstrate how the API works and
# reflects the following versions API04 MailADM 3.0.3
# If you need further documentation please check our doku-portal [0]
# or contact our IT-ServiceDesk (servicedesk@itc.rwth-aachen.de)
# [0] https://doc.itc.rwth-aachen.de/dosearchsite.action?queryString=MailAdm
# initializing # initializing
# connection settings # connection settings
$user = "<MailAdm Serviceaccount>" $user = "<Service Account>" # e.g. srv123456@rwth-ad.de
$password = "<password>" $password = "<Password>"
$uri = "https://ws.rwth-ad.de/ex-cache-ws/APIv04.asmx?wsDL" $uri = "https://ws.rwth-ad.de/ex-cache-ws/APIv04.asmx?wsDL"
# import functions
. .\connect.ps1
. .\listquota.ps1
. .\mailaccounts.ps1
. .\distributionlist.ps1
# set variables # set variables
# please change the following variables
$existingUPN = "<existing user logon name>" # e.g. ab123456@mustereinrichtung.rwth-aachen.de
# these variables should work
$Primarydomain = "mustereinrichtung.rwth-aachen.de" $Primarydomain = "mustereinrichtung.rwth-aachen.de"
$SecondaryDomain = "" $SecondaryDomain = ""
$existingPersonalMailaccount = "paetzold@mustereinrichtung.rwth-aachen.de" $existingPersonalMailaccount = "paetzold@mustereinrichtung.rwth-aachen.de"
...@@ -23,6 +25,15 @@ $distributionlist = "zoo@mustereinrichtung.rwth-aachen.de" ...@@ -23,6 +25,15 @@ $distributionlist = "zoo@mustereinrichtung.rwth-aachen.de"
$newdistributionmailaddress = "alletiere2@mustereinrichtung.rwth-aachen.de" $newdistributionmailaddress = "alletiere2@mustereinrichtung.rwth-aachen.de"
$newmailaddress = "zebra@mustereinrichtung.rwth-aachen.de" $newmailaddress = "zebra@mustereinrichtung.rwth-aachen.de"
# import functions
. .\connect.ps1
. .\listquota.ps1
. .\mailaccounts.ps1
. .\distributionlist.ps1
Describe "MailAdm-Doku" { Describe "MailAdm-Doku" {
It "Connection: Establish a connection with Webservice" { It "Connection: Establish a connection with Webservice" {
$global:ws = new-mailadmconnection -user $user -password $password -uri $uri $global:ws = new-mailadmconnection -user $user -password $password -uri $uri
...@@ -48,6 +59,11 @@ Describe "MailAdm-Doku" { ...@@ -48,6 +59,11 @@ Describe "MailAdm-Doku" {
$mailaccounts.count | should -BeGreaterOrEqual 0 $mailaccounts.count | should -BeGreaterOrEqual 0
} }
It "get-mailbox: check for existing Logon Credentials and returns the corresponding Mailboxinformation" {
$mailaccount = get-mailbox -webserviceConnection $global:ws -upn $existingUPN
$mailaccount.count | should -Be 1
}
It "Remove-Mailboxinvitation: dummy test in order to remove all invitations to get a defined infrastructure" { It "Remove-Mailboxinvitation: dummy test in order to remove all invitations to get a defined infrastructure" {
$result = remove-allmailboxinvitation -webserviceconnection $global:ws $result = remove-allmailboxinvitation -webserviceconnection $global:ws
# check if alll invitations could be deleted # check if alll invitations could be deleted
...@@ -240,6 +256,48 @@ Describe "MailAdm-Doku" { ...@@ -240,6 +256,48 @@ Describe "MailAdm-Doku" {
$result | should -Be $true $result | should -Be $true
} }
It "change: Mailboxtype functional mailbox -> room mailbox" {
# 0 UserMailbox
# 1 Funktionsaccount (in Exchange: UserMailbox)
# 2 RoomMailbox
# 3 EquipmentMailbox
$upn = "fkt_$existingfunctionalmailbox"
$result = change-mailboxtype -webserviceConnection $global:ws -upn $upn -newmailboxtype 2
$result | should -Be $true
}
It "change: Mailboxtype room mailbox -> equipment mailbox" {
# 0 UserMailbox
# 1 Funktionsaccount (in Exchange: UserMailbox)
# 2 RoomMailbox
# 3 EquipmentMailbox
$upn = "fkt_$existingfunctionalmailbox"
$result = change-mailboxtype -webserviceConnection $global:ws -upn $upn -newmailboxtype 3
$result | should -Be $true
}
It "change: Mailboxtype equipment mailbox -> functional Mailbox" {
# 0 UserMailbox
# 1 Funktionsaccount (in Exchange: UserMailbox)
# 2 RoomMailbox
# 3 EquipmentMailbox
$upn = "fkt_$existingfunctionalmailbox"
$result = change-mailboxtype -webserviceConnection $global:ws -upn $upn -newmailboxtype 1
$result | should -Be $true
}
It "change: Mailboxtype functional mailbox -> personal Mailbox -->> Error" {
# 0 UserMailbox
# 1 Funktionsaccount (in Exchange: UserMailbox)
# 2 RoomMailbox
# 3 EquipmentMailbox
$upn = "fkt_$existingfunctionalmailbox"
$result = change-mailboxtype -webserviceConnection $global:ws -upn $upn -newmailboxtype 0
$result | should -Be $false
}
It "create: distribution list" { It "create: distribution list" {
$displayname = "Zoo" $displayname = "Zoo"
$distributionlist = create-distributionlist -WebserviceConnection $global:ws -displayname $displayname -mailaddress $distributionlist $distributionlist = create-distributionlist -WebserviceConnection $global:ws -displayname $displayname -mailaddress $distributionlist
......
...@@ -8,6 +8,14 @@ function get-mailaccounts { ...@@ -8,6 +8,14 @@ function get-mailaccounts {
$mailaccounts $mailaccounts
} }
function get-mailbox {
[CmdletBinding()]
param ($webserviceconnection,$upn)
$mailbox = $webserviceconnection.getMailbox($upn)
$mailbox
}
function add-mailboxinvitation { function add-mailboxinvitation {
[CmdletBinding()] [CmdletBinding()]
param ($webserviceconnection, $quotaPoolID, $primaryEMailAddress, $givenname, $Surname, $QuotaInMB, $Aliasaddresses, $Mailboxtype, $DeliverToMailBoxAndforward, $ForwardingEmailaddress, $Owner) param ($webserviceconnection, $quotaPoolID, $primaryEMailAddress, $givenname, $Surname, $QuotaInMB, $Aliasaddresses, $Mailboxtype, $DeliverToMailBoxAndforward, $ForwardingEmailaddress, $Owner)
...@@ -66,7 +74,6 @@ function change-mailboxforwardingaddress { ...@@ -66,7 +74,6 @@ function change-mailboxforwardingaddress {
$result $result
} }
function chaange-emailaddresses { }
function change-mailboxquota { function change-mailboxquota {
[CmdletBinding()] [CmdletBinding()]
...@@ -147,3 +154,11 @@ function change-removesendaspermission { ...@@ -147,3 +154,11 @@ function change-removesendaspermission {
$result = $webserviceconnection.RemoveSendAsPermission($mailboxtochange.upn, $user) $result = $webserviceconnection.RemoveSendAsPermission($mailboxtochange.upn, $user)
$result $result
} }
function change-mailboxtype {
[cmdletBinding()]
param ($webserviceconnection, $upn, $newmailboxtype)
$result = $webserviceconnection.changemailboxtype($upn,$newmailboxtype)
$result
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment