Exchange 2016: Postfach-Ordner für ausgewählte User erstellen
Hallo Leute
Ich habe folgendes Problem.
Wir haben einen Exchange Server 2016 im Einsatz.
Jetzt wurde der Wunsch geäußert das ausgewählte User einen zusätzlichen Ordner
in ihr Exchange-Postfach bekommen sollen.
Hierzu soll ein Ad-Gruppe erstellt werden wo diese User hinzugefügt werden.
Die Mitglieder dieser Gruppe sollen dann einen Ordner mit dem Namen „Outl2Elo“
in das Root-Verzeichnis ihres Postfachs bekommen.
Ist sowas umsetzbar? Wen ja wie?
Über Lösungsvorschläge wäre ich dankbar.
Ich bedanke mich im Voraus.
Liebe Grüße
Ich habe folgendes Problem.
Wir haben einen Exchange Server 2016 im Einsatz.
Jetzt wurde der Wunsch geäußert das ausgewählte User einen zusätzlichen Ordner
in ihr Exchange-Postfach bekommen sollen.
Hierzu soll ein Ad-Gruppe erstellt werden wo diese User hinzugefügt werden.
Die Mitglieder dieser Gruppe sollen dann einen Ordner mit dem Namen „Outl2Elo“
in das Root-Verzeichnis ihres Postfachs bekommen.
Ist sowas umsetzbar? Wen ja wie?
Über Lösungsvorschläge wäre ich dankbar.
Ich bedanke mich im Voraus.
Liebe Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 614286
Url: https://administrator.de/contentid/614286
Ausgedruckt am: 24.11.2024 um 08:11 Uhr
7 Kommentare
Neuester Kommentar
Ich denke mit dem Ordner anlegen alleine ist es nicht getan. Das wäre zu einfach einfach im Postfach der Benutzer einen Ordner anzulegen. Der Ordnername „Outl2Elo“ suggeriert dazu, dass ein vermutlich serverbasiertes ELO die Daten erhalten soll. Dafür reicht ein angelegter Ordner nicht, evtl soll es ein Ordner in einem gemeinsamen ELO Postfach werden.
Servus @Jens.W,
(Bisschen länger da eine Funktion zum Nachladen und importieren der benötigten EWS-DLL aus dem Netz integriert ist, dafür kann es hier jeder selbst ausprobieren ohne erst das Assembly manuell runterladen zu müssen)
Bitte Hinweis zur "Impersonation" lesen die für den User der das Skript ausführt nötig ist, denn der User muss ja alle Mailboxen beschreiben können.
Viel Spaß damit
Grüße Uwe
Ist sowas umsetzbar? Wen ja wie?
Aber immer doch, wenn man das denn so lösen möchte . Bisschen EWS und Schleife über die Gruppen-Member:(Bisschen länger da eine Funktion zum Nachladen und importieren der benötigten EWS-DLL aus dem Netz integriert ist, dafür kann es hier jeder selbst ausprobieren ohne erst das Assembly manuell runterladen zu müssen)
Bitte Hinweis zur "Impersonation" lesen die für den User der das Skript ausführt nötig ist, denn der User muss ja alle Mailboxen beschreiben können.
<#
Für jedes Mitglied einer AD-Gruppe einen Ordner im Root seiner Mailbox erstellen
(via "Impersonation"-Right
Bsp: New-ManagementRoleAssignment -Name:impersonationAssignmentName -Role:ApplicationImpersonation -User:Administrator
)
#>
# Exchange Server FQDN
$EXFQDN = 'mail.domain.tld'
# AD Gruppe
$GRUPPE = 'Testgruppe'
# Ordnername
$FOLDERNAME = 'Outl2Elo'
# ------------------------
# Funktion zum Laden des EWS Assemblies
function Load-EWSLibrary {
if ($psscriptroot -eq ''){
$localpath = Join-Path $env:TEMP "Microsoft.Exchange.WebServices.dll"
}else{
$localpath = Join-Path $PSScriptRoot "Microsoft.Exchange.WebServices.dll"
}
$zip = $null; $tmp= ""
try{
if(!(Test-Path $localpath )){
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
Add-Type -A System.IO.Compression.FileSystem
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
write-host "Downloading and extracting required 'Microsoft.Exchange.WebServices.dll' ... " -F Green -NoNewline
(New-Object System.Net.WebClient).DownloadFile('https://www.nuget.org/api/v2/package/Exchange.WebServices.Managed.Api/2.2.1.2', $tmp)
$zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$zip.Entries | ?{$_.Fullname -eq 'lib/net35/Microsoft.Exchange.WebServices.dll'} | %{
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
}
Unblock-File $localpath
write-host "OK" -F Green
}
Add-Type -Path $localpath -EA Stop
}catch{
throw "Error: $($_.Exception.Message)"
}finally{
if ($zip){$zip.Dispose()}
del $tmp -Force -EA SilentlyContinue
}
}
# EWS DLL laden
Load-EWSLibrary
# EWS Objekt erstellen
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
$service.Url = "https://$EXFQDN/ews/exchange.asmx"
Get-ADGroupMember $GRUPPE -Recursive | %{
# get SID of User
$SID = (Get-ADUser $_.SamAccountName -Properties SID).SID
# Impersonation benutzen um die Mailbox anzusprechen
$service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SID, $SID)
# Public Folder Root referenzieren
$mailboxroot = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot)
# prüfen ob Ordner existiert
$view = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1)
$view.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Shallow
$f = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$FOLDERNAME)
$result = $service.FindFolders($mailboxroot.id,$f,$view)
# Wenn Ordner nicht gefunden wurde ...
if ($result.TotalCount -eq 0){
write-host "Erstelle Ordner '$FOLDERNAME' für User $($_.Name)." -F Green
# neuen Ordner erstellen
$newfolder = New-Object Microsoft.Exchange.WebServices.Data.Folder $service -Property @{DisplayName = $FOLDERNAME}
# und im Root der Mailbox abspeichern
$newfolder.Save($mailboxroot.Id)
}else{
write-host "Ordner '$FOLDERNAME' existiert bereits für den User '$($_.Name)'" -F Cyan
}
}
Grüße Uwe