image2

You Are here: Start Kategorie als Blog Scriptgesteuerte Vergabe von Rechten auf Standardordner unabhängig von der Sprache

Scriptgesteuerte Vergabe von Rechten auf Standardordner unabhängig von der Sprache PDF Drucken E-Mail
Freitag, den 20. Januar 2012 um 14:45 Uhr

Ziele und Allgemeines

Vergabe von Rechten auf Systemordner (Posteingang, gesendete Objekte, etc.) mittels einer Gruppe (Gruppe1) auf Mitglieder einer definierten Gruppe (Zugriffsgruppe). Dabei sollen verschiedene Sprachen für Standordner berücksichtigt werden. Weiterhin müssen die Rechte bei Usern wieder gelöscht werden, die nicht mehr Mitglied einer Zugriffsgruppe sind.


WICHTIG: Standardmäßig cached Exchange frühere Rechte-Anfragen für bis zu 2 Stunden. Dies kann durch den Wert "Mailbox Cache Age Limit" angepasst werden. Es sollte aber vermieden werden, da es zu einer höheren Belastung der Domaincontroller führt.
Exchange 2007: http://technet.microsoft.com/en-us/library/bb684892.aspx

Struktogramm


Übersicht über das Script:

Abbildung 1: Struktogramm - Übersicht des Ablaufs

Gruppe anlegen

Bei der Nutzung einer Gruppe ist darauf zu achten, dass es sich dabei um eine eMail-aktivierte Sicherheitsgruppe handelt, die geschlossen ist.
1. Erstellen einer Sicherheitsgruppe:

 

Abbildung 2: Erstellen einer Sicherheitsgruppe


Versucht man eine offene Gruppe zur Verwaltung von Rechten zu nutzen, bekommt man einen Fehler.

Abbildung 3: Neue Gruppe kann nicht zur Vergabe von Rechten genutzt werde (Symbol)


2. Die Gruppe kann noch nicht für die Vergabe von Rechten genutzt werden. Zunächst müssen die Eigenschaften aktualisiert werden und die Gruppe geschlossen werden: Set-Distributiongroup –identity Gruppe1 –MemberDepartRestriction Closed

Weitere Informationen zum Umwandeln von Gruppen:
http://blogs.msdn.com/b/pepeedu/archive/2010/08/26/how-to-upgrade-a-universal-distribution-group-to-a-universal-security-group.aspx

Variablen

Im Folgenden werden die primären Variablen näher beschrieben.

Scope
Im Scope wird definiert, auf welche Mailboxen die Rechte vergeben werden sollen. Das Script kann auf alle Mailboxen angewendet oder entsprechend gefiltert werden. Im Folgenden wird das Script nur für User der Gruppe „Zugriffsgruppe“ angewendet:
$Scope = Get-Mailbox -Filter {MemberOfGroup -eq "CN=Zugriffsgruppe,OU=IT,DC=weihs,DC=local" }

Weitere Informationen zu den Filtern findet man im Technet:
http://technet.microsoft.com/en-us/library/bb738155%28EXCHG.80%29.aspx

AccessRight
Als Nächstes werden die Rechte definiert, die eingerichtet werden sollen. Dieses kann einzeln erfolgen (ReadItems, CreateItems) oder über Gruppen, die diese Rechte zusammenfassen.

Owner

CreateItems, ReadItems, CreateSubfolders, FolderOwner, FolderContact, FolderVisible, EditOwnedItems, EditAllItems, DeleteOwnedItems, DeleteAllItems

Editor

CreateItems, ReadItems, FolderVisible, EditOwnedItems, EditAllItems, DeleteOwnedItems, DeleteAllItems

Reviewer

ReadItems, FolderVisible

In unserem Beispiel wird zunächst nur Lesezugriff gewährt:
$AccessRights = "Reviewer"

Weitere Informationen zu den verschiedenen Rechten findet man im Technet:
http://technet.microsoft.com/en-us/library/ff522363.aspx

FolderScope
Über den FolderScope wird definiert, für welche Standardordner Rechte vergeben werden. Über diesen Weg werden die verschiedenen Sprachen berücksichtigt. Folgende Einträge stehen u. a. zur Auswahl:

Calendar, Contacts, DeletedItems, Drafts, Inbox, JunkEmail, Journal, Notes, Outbox, Personal, RecoverableItems, SentItems, Tasks

In unserem Beispiel wird der Posteingang berücksichtigt:
$FolderScope = "Inbox"

Weitere Informationen zu Get-MailboxFolderStatistic findet man im Technet:
http://technet.microsoft.com/en-us/library/aa996762.aspx

GroupPerm
In dieser Variable muss der Name der Gruppe angegeben werden, die Rechte bekommen soll.
$GroupPerm = "Gruppe1"

Log
Die Variablen definieren Namen und Pfad des Logs, das während Ausführung des Scripts generiert wird.
$log="Permission{0:yyyyMMdd-HHmm}" -f (Get-Date)
$logfile = 'C:\'+$log+'.txt'

Das Skript


#Exchange Server 2010 Management Shell laden
if (-not (Get-PSSnapin | Where-Object {$_.Name -like "Microsoft.Exchange.Management.PowerShell.E2010"})){Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010}

#Variablen
$Scope = Get-Mailbox -Filter {MemberOfGroup -eq "CN=Zugriffsgruppe,OU=IT,DC=weihs,DC=local"}
$AccessRights = "Reviewer"
$FolderScope = "Inbox"
$GroupSet = "Gruppe1"
$log="Permission{0:yyyyMMdd-HHmm}" -f (Get-Date)
$logfile = 'C:\Scripts\Permission\Logs'+$log+'.txt'

#Ausführliches Logging
Start-Transcript -Path $logfile -Append
$found = $false

# Alle Mailboxen werden geprüft
foreach ($mailbox in Get-Mailbox) {

#Pürfen, ob Mailbox in der zu verwalteten Gruppe ist
foreach ($mailboxmember in $Scope) {
if($mailboxmember -like $mailbox){$found = $true;Write-output "Mitglied"}
}

#Abfragen des Ordnernamens
$Folder = (($mailbox.SamAccountName)+ ":\" + (Get-MailboxFolderStatistics -Identity $mailbox.SamAccountName -FolderScope $FolderScope | Select-Object -First 1).Name)

#Wenn in der zu verwalteten Gruppe ist > Rechte setzen
if($found){
#Prüfen, ob der User schon Rechte hat
if ((Get-MailboxFolderPermission $Folder|Where-Object {$_.User -like $GroupSet})) {
# Wenn ja > Aktualisierung der Rechte
Write-output "Updating $Folder permission $AccessRights for $GroupSet..."
Set-MailboxFolderPermission -User $GroupSet -AccessRights $AccessRights -Identity $Folder
}
else {
# Wenn nein > Vergeben der Rechte
Write-Output "Set $Folder permission $AccessRights for $GroupSet..."
Add-MailboxFolderPermission -User $GroupSet -AccessRights $AccessRights -Identity $Folder
}
}
#Wenn nicht in der zu verwalteten Gruppe ist > Rechte entfernet
else
# Prüfen, ob noch Rechte gesetzt sind und ggf. löschen
if ((Get-MailboxFolderPermission $Folder|Where-Object {$_.User -like $GroupSet})) {
Write-output "Remove $Folder permission $AccessRights for $GroupSet..."
Remove-MailboxFolderPermission -User $GroupSet -Identity $Folder -Confirm:$false
}
}
# Zurücksetzen der Mitgliedsvariable
$found = $false
}

# Stoppen des Logging
Stop-Transcript

# Senden des Reports

$smtpServer = “localhost”
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($logfile)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = "administrator@weihs.local"
$msg.To.Add("administrator@weihs.local")
$msg.Subject = "Bericht: Setzen von Berechtigung"
$msg.Body = "Bericht über das scriptgesteuerte Setzen von Berichten."
$msg.Attachments.Add($att)

# Sollte ein bestimmter Port oder eine Authentifizierung benötigt werden, kann es hier aktiviert werden
#$smtp.EnableSsl = $true
#$smtp.Port = 587
#$smtp.Credentials = New-Object System.Net.NetworkCredential("administrator@weihs.local", "+++++++");
$smtp.Send($msg)

Logging

Über Start-/Stop-Transcript werden alle zurückgegebenen Informationen eines Befehles mitgeschrieben, wodurch ein ausführliches Log mit Datum und Uhrzeit unter C:\Scripts\Permission\Logs abgelegt wird.

Dieses Log kann dann direkt versendet werden. Im Script müssen hierfür die entsprechenden Variablen gesetzt, die im Folgenden aufgeführt sind und  die selbsterklärend sind:

# Senden des Reports
$smtpServer = “localhost”
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($logfile)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = "administrator@weihs.local"
$msg.To.Add("administrator@weihs.local")
$msg.Subject = "Bericht: Setzen von Berechtigung"
$msg.Body = "Bericht über das scriptgesteuerte Setzen von Berichten."
$msg.Attachments.Add($att)

Sollte zum Versand eine Authentifizierung durchgeführt werden müssen oder ist ein bestimmter Port nötig, muss das an folgender Stelle aktiviert werden:

# Sollte ein bestimmter Port oder eine Authentifizierung benötigt werden, kann es hier aktiviert werden
#$smtp.EnableSsl = $true
#$smtp.Port = 587
#$smtp.Credentials = New-Object System.Net.NetworkCredential("administrator@weihs.local", "+++++++");
$smtp.Send($msg)

 

Der Administrator findet in seinem Postfach den entsprechenden Bericht vor:

Abbildung 4: Bericht über die durchgeführten Änderungen

 

Ergebnis

In Outlook kann man die nun vergebenen Rechte gegenprüfen:

Abbildung 5: Rechte im Outlook