image2

You Are here: Start Kategorie als Blog Exchange: Scriptgesteuerte Vergabe von Rechten

Exchange: Scriptgesteuerte Vergabe von Rechten PDF Drucken E-Mail
Dienstag, den 17. September 2013 um 05:26 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.

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)


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.

Variable

Beschreibung

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 Script

#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


Planen des Powershell-Scriptes


Ablegen des Scripts als PS1-Script und Erstellen eines Batch-Files, das darauf verweist:

Abbildung 5: Batch-File

Über den Taskplaner wird die Aufgabe zu den definierten Zeiten geplant:

Abbildung 6: geplanter Task

Ergebnis


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

Abbildung 7: Rechte im Outlook