Skip to main content

Exchange Kalenderberechtigungen via PowerShell verteilen

Mit diesem Skript werden bei allen Usern mit einem bestimmten CustomAttribute1 die Kalenderberechtigungen untereinander auf Editor gesetzt (jeder ist bei jedem Editor).


Folgende Punkte müssen angepasst werden:

  1. Zeile 12: 'customattribute1 -eq "CUSTOMATTRIBUTE1"'
    • customattribute1 = Filter
    • "CUSTOMATTRIBUTE1" = String, nach dem gefiltert wird
  2. Zeile 12: Where-Object {$_.alias -notlike "*ALIAS*" -and $_.alias -notlike "*ALIAS*"} → Dies sind Ausnahmen (Konten mit dem gleichen CustomAttribute1, welche nicht berücksichtigt werden sollen).
    • "ALIAS" = String nach dem gefiltert wird
  3. Zeile 26: Start-Sleep -s 10
    • 10 ist die Zeit in Sekunden, die gewartet wird, bevor Add und Set ausgeführt werden, damit man die aktuellen Berechtigungen prüfen kann
  4. Zeile 30: Add-MailboxFolderPermission -Identity $identity -User $user -AccessRights Editor -Confirm:$false
    • -AccessRights Editor = Level der Zugriffsrechte
  5. Zeile 32: Set-MailboxFolderPermission -Identity $identity -User $user -AccessRights Editor -Confirm:$false
    • -AccessRights Editor = Level der Zugriffsrechte

    function Start-Sleep($seconds) {
        $doneDT = (Get-Date).AddSeconds($seconds)
        while($doneDT -gt (Get-Date)) {
            $secondsLeft = $doneDT.Subtract((Get-Date)).TotalSeconds
            $percent = ($seconds - $secondsLeft) / $seconds * 100
            Write-Progress -Activity "Warten" -Status "Warte..." -SecondsRemaining $secondsLeft -PercentComplete $percent
            [System.Threading.Thread]::Sleep(500)
        }
        Write-Progress -Activity "Warten" -Status "Warte..." -SecondsRemaining 0 -Completed
    }
     
    $mailboxes = Get-Mailbox -filter 'customattribute1 -eq "CUSTOMATTRIBUTE1"' | Where-Object {$_.alias -notlike "*ALIAS*" -and $_.alias -notlike "*ALIAS*"}
    $count = $mailboxes.Count
    $counter = 1
     
    foreach($mailbox in $mailboxes){
    $user = "$($mailbox.Alias)"
    $account = "$($mailbox.SamAccountName):\Kalender"
     
    $calendarperms = Get-MailboxFolderPermission -Identity "$($mailbox.SamAccountName):\Kalender"
    Write-Host "---> User " $counter " von " $count " wird bearbeitet <---"
    Write-Host "---> $($mailbox.SamAccountName) <---"
    Write-Host ($calendarperms | Out-String)
     
    $counter ++
    Start-Sleep -s 10
         
        foreach($user in $mailboxes){
        Write-Host "Berechtigungen für den Benutzer" $user "für den Ordner" $account "werden hinzugefügt."
        Add-MailboxFolderPermission -Identity $account -User $user -AccessRights Editor -Confirm:$false -ErrorAction SilentlyContinue ; Write-Host -ForegroundColor Red "Achtung: Berechtigungen für "$user " auf account von " $account " existieren bereits oder account wurde nicht gefunden."
        Write-Host "Berechtigungen für den Benutzer" $user "für den Ordner" $account "werden geändert."
        Set-MailboxFolderPermission -Identity $account -User $user -AccessRights Editor -Confirm:$false -ErrorAction SilentlyContinue
        }
    }