jens.w
Goto Top

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

Content-ID: 614286

Url: https://administrator.de/contentid/614286

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

sabines
sabines 19.10.2020 um 15:01:24 Uhr
Goto Top
Moin,

ja ist möglich, per PS kannst Du den Ordner erstellen, wobei sich das bei drei, vier Usern nicht lohnt -> Rechtsklick und Ordner anlegen.

Gruss
Tommsen99
Tommsen99 19.10.2020 um 15:03:03 Uhr
Goto Top
Hi Jens,

ja und ja, du bist auf dem richtigen Weg. Trau dich, es wird funktioneren.


Grüße
Jens.W
Jens.W 19.10.2020 um 15:11:33 Uhr
Goto Top
Danke für die schnelle Antwort.

Gibt es hierfür ein PS-Lösungsbeispiel?
sabines
sabines 19.10.2020 um 15:15:11 Uhr
Goto Top
Google mal danach, oder die SuFu hier nutzen, da findest Du sicher was passendes.
NordicMike
NordicMike 19.10.2020 aktualisiert um 15:45:11 Uhr
Goto Top
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.
colinardo
colinardo 19.10.2020 aktualisiert um 18:44:00 Uhr
Goto Top
Servus @Jens.W,
Ist sowas umsetzbar? Wen ja wie?
Aber immer doch, wenn man das denn so lösen möchte face-smile. 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  
    }
}
Viel Spaß damit
Grüße Uwe
Jens.W
Jens.W 19.10.2020 um 17:52:10 Uhr
Goto Top
Vielen Dank für die schnelle Hilfe.
Ich werde es morgen gleich testen.

LG Jens