diff --git a/Beispielprojekt/Check-Invitations b/Beispielprojekt/Check-Invitations.ps1 similarity index 100% rename from Beispielprojekt/Check-Invitations rename to Beispielprojekt/Check-Invitations.ps1 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/Load-Modules.ps1 b/Beispielprojekt/Load-Modules.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..c9f3520b165fb2941c9d4f074f656a2f5867402b --- /dev/null +++ b/Beispielprojekt/Load-Modules.ps1 @@ -0,0 +1,23 @@ +function Load-Modules +{ + [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!" +} \ No newline at end of file