Check-CalPermission

Wenn Benutzer per Outlook andere Anwender zu Terminen einladen, dann kann Outlook über die Free/Busy-Zeiten (Public Folder) oder die Exchange Web Services (EWS) eine Liste der Frei/Belegt-Zeiten aufbauen und anzeigen.

Der Anwender sieht aber nur die Informationen die der eingeladene Benutzer "frei" gegeben hat. Dazu kann er in Outlook die Rechte auf dem Kalender oder über die Stellvertreter-Einstellungen steuern.

Und was ein Anwender einstellen kann, kann auch falsch sein. Oder durch eine Migration falsch gesetzt worden sein. Entsprechend habe ich schon viele Umgebungen gesehen, in denen "Standard" nicht nur das Recht "Frei/Gebucht-Zeit" hatte, sondern deutlich mehr. Es gab aber auch Fälle, in denen "Standard" gar keine Rechte hatte und der Helpdesk lange auf dem Server oder dem anderen Client gesucht hat, warum die Frei/belegt-Zeiten nicht abgerufen werden konnten.

Check per Skript

Aus dem Grund gibt es das folgende Skript, das einfach von den Postfächern den Status der Rechte von "Standard" ermittelt und ausgibt. Natürlich können Sie das Skript gerne anpassen und z.B.: auch gleich eine "KorrektURLogik" mit einbringen. Knifflig war am Anfang die Ermittlung des korrekten Pfads des Kalenders, der ja in unterschiedlichen Sprachen erscheinen kann. Daher musste das Skript eine Extrarunde über Get-MailboxFolderStatistics gehen.

Achtung
Ich vergleiche hier "Strings" und die sind leider sprachabhängig. Je nach Exchange Sprache müssen Sie das Skript eventuell anpassen für die Bezeichnung der Rechte aber sich für den "acluser". Auf Deutsch steht dort dann nämlich "Standard" statt "Default".

# check-calperm.ps1
#
# Check und Fix der Kalender Standardrechte

param (
	[string]$user = "Default",
	[string]$mailbox = "*"
)

#
Write-host "Loading Mailboxlist"
#$mblist= get-mailbox -resultsize 100
$mblist= get-mailbox $mailbox -resultsize unlimited
Write-host " Total Mailboxes" $mblist.count

foreach ($mbox in $mblist) {
	write-host "Processing:"$mbox.alias

	$calfolder = Get-MailboxFolderStatistics `
		-Identity $mbox.alias `
		-FolderScope calendar | where {$_.foldertype -eq "Calendar"}
	$folderpath = ($calfolder.Folderpath).replace("/","\")
	write-host " Kalenderfolder:" $folderpath 


	if ($calfolder -eq "") {
		write-host "  No Calendar found" -backgroundcolor yellow
	}
	else {
		write-host "  Loading non standard Permissions für user Standard für Folder" $folderpath 
		$perm = Get-MailboxFolderPermission `
			-identity ($mbox.alias+":"+$folderpath) `
			-User $username
		$result = ("" | select Mailbox,AccessRights)
		$result.Mailbox = $mbox.alias 

		if ( $perm -eq $null) {
			$result.AccessRights = "None"
		}
		elseif ($perm.AccessRights -contains "None") {
			$result.AccessRights = "None"
		}
		elseif ($perm.AccessRights -contains "FolderVisible"){
			$result.AccessRights = "FolderVisible"
		}
		elseif ($perm.AccessRights -contains "AvailabilityOnly"){
			$result.AccessRights = "AvailabilityOnly"
		}
		elseif ($perm.AccessRights -contains "LimitedDetails"){
			$result.AccessRights = "LimitedDetails"
		}
		elseif ($perm.AccessRights -contains "Reviewer"){
			$result.AccessRights = "AllDetails"
#			set-MailboxFolderPermission `
#				-identity ($mbox.alias+":"+$folderpath) `
#				-User standard `
#				-AccessRights "AvailabilityOnly"
		}
		else {
			$result.AccessRights = "Custom"
		}
		$result
	}
}

Am Ende sehen Sie die 4 kommentierte Zeilen, die dann auch eine "Korrektur" aktivieren können.

Ausgabe

Durch die Ausgabe als "Objekte" mit der Variable $result" gibt die normale PowerShell einfach eine Liste der Mailboxen mit der Angabe zum ACL-Eintrag für "Standard" aus.

Die "Debug-Ausgaben" stören später aber nicht, wenn Sie die STDOUT-Pipeline mit Export-CSV in eine für Excel nutzbare Datei speichern, mit "Where" filtern oder anderweitig weiter verarbeiten wollen.

Weitere Links