dani
Goto Top

Exchange 2016 - Stellvertretung via Powershell konfigurieren

Guten Abend Kolleginnen und Kollegen,
ich benötige einen Denkanstoß / Lösung(sansatz) für folgendes Problem:
Wie kann ich die gelbmarkierte Option mit Powershell setzen?

2016-12-11 19_12_30-posteingang outlook

Den Stellvertreter und die Berechtigungen kann ich bereits via Powershell problemlos setzen.


Schönen Sonntagabend,
Dani

Content-ID: 323569

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

131381
Lösung 131381 11.12.2016 aktualisiert um 19:53:15 Uhr
Goto Top
https://www.experts-exchange.com/questions/27463437/Give-rights-to-see-p ...
Entweder FullAccess geben oder so gewünschten Ordner mit Owner-Rechten für den Stellvertreter kennzeichnen.

Oder mit EWS arbeiten:
http://gsexdev.blogspot.com/2009/04/add-delegates-to-mailbox-with.html? ...
http://www.flobee.net/powershell-module-for-managing-exchange-2010-mail ...

und ViewPrivateItems = $true

setzen.

Gruß
Dani
Dani 11.12.2016 um 19:53:07 Uhr
Goto Top
Hi @131381
Entweder FullAccess geben oder so gewünschten Ordner mit Owner-Rechten für den Stellvertreter kennzeichnen.
es sollen alle E-Mails im Posteigang von Shared Mailboxen, welche als privat markiert wurden, so für die Benutzer sichtbar gemacht werden. Soweit ich weiß, hilft da weder FullAccess noch Owner-Rechte?!


Gruß,
Dani
131381
131381 11.12.2016 aktualisiert um 19:53:59 Uhr
Goto Top
s. EWS Ergänzung oben. Damit kann man es setzen.
Dani
Dani 12.12.2016 um 09:23:35 Uhr
Goto Top
Moin,
weißt du zufällig ob man im EWS auch mit DistinguishedName arbeiten kann?
In allen Beispielen wird immer die E-Mailadresse genutzt.


Gruß,
Dani
131381
131381 12.12.2016 aktualisiert um 10:04:44 Uhr
Goto Top
Zitat von @Dani:
weißt du zufällig ob man im EWS auch mit DistinguishedName arbeiten kann?
In allen Beispielen wird immer die E-Mailadresse genutzt.
https://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices. ...

Aber das kannst du ja einfach umsetzen... Mit Get-AdUser kommst du ja an alle Eigenschaften eines Users und kannst sie entsprechend zuordnen.

Gruß
colinardo
Lösung colinardo 12.12.2016 um 19:04:11 Uhr
Goto Top
Servus Dani,
machst du z.B. hiermit. Detaillierte Kommentare siehe Code.
Auszuführen in einer normalen Powershell-Konsole die mit den Rechten eines Users ausgeführt wird der über Impersonation-Rechte auf dem Exchange verfügt. Benötigt wird zusätzlich die EWS-API-DLL im selben Verzeichnis des Scripts.
# Primary SMTP Addresses der Delegates im Array angeben
$delegateUsers = @('delegate1@testlab.intern','delegate2@testlab.intern')  

if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}  

# Active Directory Modul laden
Import-Module ActiveDirectory

# EWS DLL aus dem gleichen Verzeichnis des Scripts laden
Add-Type -Path "$(Split-Path $MyInvocation.MyCommand.Definition -Parent)\Microsoft.Exchange.WebServices.dll"  

# Mit Exchange verbinden
try{
    $exchange_server = Get-ADObject -LDAPFilter 'objectClass=msExchExchangeServer' -SearchBase (([ADSI]"LDAP://RootDse").configurationNamingContext.ToString()) -Properties networkaddress | select -Expand networkaddress | ?{$_ -match 'ncacn_ip_tcp'} | %{$_.split(":")[1]} | select -First 1  
    if (!$exchange_server){Write-Host "Could not determine Exchange-Server FQDN from AD" -ForegroundColor Red; return}  
    write-host "Creating connection to Exchange-Server '$exchange_server' ..." -ForegroundColor Green  
    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$exchange_server/powershell" -Authentication Kerberos  
    Import-PSSession $session -DisableNameChecking -AllowClobber | out-null
}catch{
    throw $_
    return
}
# Allen Zertifikaten vertrauen
Add-Type @"  
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@  
# Trust all certs policy dem ServicePointManager zuweisen
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

# EWS Objekt erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService
$ews.Url = [string](Get-WebServicesVirtualDirectory).InternalURL
# Benutze die Credentials mit dem das Skript ausgeführt wird
$ews.UseDefaultCredentials = $true

# Delegates-Array erzeugen
$dgArray = new-Object Microsoft.Exchange.WebServices.Data.DelegateUser $delegateUsers.Count
0..($delegateUsers.Count-1) | %{
    try{
        $dgUser = new-object Microsoft.Exchange.WebServices.Data.DelegateUser($delegateUsers[$_])
        $dgUser.ViewPrivateItems = $true
        $dgUser.Permissions.InboxFolderPermissionLevel = [Microsoft.Exchange.WebServices.Data.DelegateFolderPermissionLevel]::Editor
        $dgArray[$_] = $dgUser
    }catch{
        write-host $_ -F Red
    }
}

# Deegates in allen aktivierten "Shared-Mailboxes" hinzufügen 
Get-Mailbox -RecipientTypeDetails SharedMailbox -Filter "IsMailBoxEnabled -eq 'True'" | %{  
    write-host "Processing Delegates in Mailbox '$($_.Name)'." -ForegroundColor Blue -BackgroundColor White  
    $ews.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, [string]$_.PrimarySmtpAddress)
    try{
        # Mailbox-Objekt erzeugen
        $mbox = New-Object Microsoft.Exchange.WebServices.Data.Mailbox ($_.PrimarySmtpAddress)
        # Vorhandene Delegates abfragen
        $delegates = $ews.GetDelegates($mbox,$true)
        # Flag bei den vorhandenen Delegates setzen
        $updatelist = $delegates.DelegateUserResponses | ?{!$_.DelegateUser.ViewPrivateItems}
        if ($updatelist){
            write-host "Updating existing Delegates properties..." -F Green  
            # Eigenschaften für den Delegaten ändern (hier ViewPrivateItems erlauben)
            $updatelist | %{$_.DelegateUser.ViewPrivateItems = $true}
            # Update der vorhandenen Delegaten durchführen
            $ews.UpdateDelegates($mbox,$null,$updatelist.DelegateUser)
        }
        
        # Noch nicht vorhandene Delegates ermitteln und hinzufügen
        $addlist = $dgArray | ?{$_.UserId.PrimarySmtpAddress -notin $delegates.DelegateUserResponses.DelegateUser.UserId.PrimarySmtpAddress}
        if ($addlist){
            write-host "Adding Delegates ..." -F Green  
            $ews.AddDelegates($mbox, [Microsoft.Exchange.WebServices.Data.MeetingRequestsDeliveryScope]::NoForward,$addlist)
        }
    }catch{
        write-host $_ -F Red
        return
    }
}

# Exchange Session beenden
Remove-PSSession $session
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Dani
Dani 16.12.2016 um 09:09:52 Uhr
Goto Top
Guten Morgen ihr zwei,
vielen Dank erstmal... leider waren die letzten Tage anstregend und daher bin ich nicht dazu gekommen hier zu antworten.
Ich werde mich heute Nachmittag ans Werk machen.


Gruß,
Dani
Dani
Dani 22.12.2016 um 10:02:24 Uhr
Goto Top
Moin ihr zwei,
es läuft wie es soll... ich habe das Skript von @colinardo als Grundlage hergenommen und entsprechend in eine bestehende Funktion eingebettet.
Danke euch beiden!


Gruß,
Dani