Mit PowerShell Gruppenmitglieder eines E-Mail-Funktionspostfachs ermitteln und vollberechtigen

GroovyGrammer

Cadet 4th Year
Registriert
Dez. 2014
Beiträge
120
Servus miteinander,

wir haben in der neuen Exchange2016 Umgebung das Problem, dass wir der Outlook-Umgebung von AD-Nutzern nicht mehr wie bisher Funktionspostfächer über eine Gruppenzugehörigkeit dieser (Outlook-Umgebung) hinzufügen können (die Gruppe mit den enthaltenen AD-Objekten war bisher auf ein Funktionspostfach vollberechtigt (FullAccess + SendAs)), sodern es ist - zumindest momentan so - notwendig, die AD-Nutzerobjekte direkt auf ein Funktionspostfach zu berechtigen. Damit der Verwaltungsaufwand geringer bleibt und zur Kontrolle pflegen wir weiterhin Berechtigungsgruppen. Zudem hat es den Vorteil, dass beim direkten Berechtigen auf ein Funktionspostfach eines AD-Nutzers dieses Postfach in seiner Outlook-Umgebung automatisch eingebunden wird. Vor allem Letzteres ist momentan das größte Problem, da wir bei der Umstellung < 500 Kolleginnen und Kollegen das Postfach nicht jeweils einzeln mit Primatenarbeit hinzufügen können.

Zurzeit bastle ich an einem PowerShell-Skript, da Exchange gut mit dieser Skriptsprache zusammenarbeitet.

Z. B. habe ich es ohne Weiteres geschafft, Gruppenzugehörigenkeiten zu einer gegebenen Berechtigungsgruppe (Mail_*) auszulesen oder die Mitglieder einer Gruppe, die auf ein Postfach berechtigt sind - siehe B).

Im Großen benötige ich allerdings etwas Hilfe. Ich habe mir die Funktion des Skripts A) wie folgt gedacht:

1) Zuerst soll das Skript alle AD-Objekte mit dem Namen Postfach_ herauslesen. Das sind unsere AD-Objekte der Funktionspostfächer.
2) Aus den AD-Objekten soll das Property Mail ausgelesen werden.
3) Mit diesen Eigenschaften ("Properties"), die die E-Mail-Adresse enthalten, kann ich nun gegen den Exchange-Server ermitteln und die Gruppenmitglieder aus Gruppen, die auf das Postfach berechtigt sind, auslesen.
4) Im letzten Schritt möchte ich die jeweils ermittelten Mitglieder direkt auf das Funktionspostfach berechtigen mit "SendAs" und "FullAccess".

Danke vorab für eure Hilfe!
PowerShell:
# A)

Import-Module ActiveDirectory
$ErrorActionPreference = „Silentlycontinue“
clear


#---------------------------------
# 1) E-Mail als Property herauslesen aller AD-Objekte mit Namen Postfach_*

# Problem-Anfang
$postfach = Get-ADUser -Filter -Name -like "Postfach_" -Properties mail | Where{$_.mail -like "@ATV.Nordschleswig.den" }
# Problem-Ende

# --------------------------------------
# 2) Mitglieder direkt vollberechtigen auf das Postfach

write-host „“
write-host "D a s  S k r i p t  e x t r a h i e r t  d i e  G r u p p e n m i t g l i e d e r  e i n e s  F u n k t i o n s p o s t f a c h s  u n d  b e r e c h t i g t  d i e  g e f u n d e n e n  M i t g l i e d e r  d i r e k t  a u f  d a s  e r m i t t e l t e  P o s t f a c h ."
write-host „“

$zugriffssteuerungsliste = Get-MailboxPermission $postfach | where {$_.AccessRights -eq „FullAccess“}
$nutzer =@()

foreach ($eintrag in $zugriffssteuerungsliste)
{
[string]$gruppe= $eintrag.User
$gruppe = $gruppe.split(„\“)[1]
$mitglieder = Get-ADGroupMember „$gruppe“ -recursive

foreach ($mitglied in $mitglieder)
{
$benutzerkonto = $mitglied.SamAccountname
# Ab hier gibt's wieder Probleme
Set-MailboxFolderPermission $postfach -user $benutzerkonto -accessrights FullAccess -accessrights SendAs
# Problem-Ende
}
}

write-host  „“
write-host "S k r i p t  a b g e a r b e i t e t ."
write-host „“

____

Code:
# Auslesen von Gruppen anhand der E-Mail-Adresse - funktioniert gut :)
# B)

$postfach = read-host „Postfach angeben (z. B. Cert@ATV.Nordschleswig.den)“
$zugriffssteuerungsliste = Get-MailboxPermission $postfach | where {$_.AccessRights -eq „FullAccess“}
$nutzer =@()

foreach ($eintrag in $zugriffssteuerungsliste)
{
[string]$gruppe= $eintrag.User
$gruppe = $gruppe.split(„\“)[1]
$mitglieder = Get-ADGroupMember „$gruppe“ -recursive
foreach ($mitglied in $mitglieder)
{
$name = $mitglied.name
$sam = $mitglied.SamAccountname
$dn = $mitglied.distinguishedName
$nutzer += new-object PSObject -property @{Name=“$name“;sAMAccountName=“$sam“;distinguishedName=“$dn“}
}
}

$nutzer | sort-object Name -unique | ft -autosize > ./Gruppenmitglieder.txt
write-host  „“
write-host "D a t e i  e r z e u g t . S k r i p t  a b g e a r b e i t e t ."
 
Zum ersten Problem:
Du verwendest:
$postfach = Get-ADUser -Filter -Name -like "Postfach_" -Properties mail | Where{$_.mail -like "@ATV.Nordschleswig.den" }

Versuch es mal so:
$postfach = Get-ADUser -Filter {name -like "Postfach_"} -Properties mail | Where{$_.mail -like "@ATV.Nordschleswig.den" }



Zum zweiten Problem:
Set-MailboxFolderPermission $postfach -user $benutzerkonto -accessrights FullAccess -accessrights SendAs

Führst Du das in der Exchange-Shell aus? Ansonsten musst Du das Exchange-Modul importieren. (wäre jetzt meine erste Vermutung)
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;
 
Servus Rego!
Herzlichen Dank schon mal für deine Hilfe - ich werde es die Tage ausprobieren! War jetzt einige Tage nicht im Dienst. Erhältst Rückmeldung. :-)

VG
GG
 
Rego schrieb:
Servus!

Meldest Dich dann einfach :-)

Sehr freundlich von dir! :-) Ich diskutiere das Thema auch noch anderweitig, komme aber nicht so ganz auf einen Nenner.

Ich habe inzwischen einen etwas anderen Ansatz gewählt: Mittlerweile filtere ich nicht mehr über alle Funktionspostfächer, sondern werde die überschaubare Anzahl an solchen Funktionspostfächern per Hand einklopfen mittels

$postfach = read-host "Eingabe".

Die Hautaufgabe des Skripts liegt in der Berechtigung der vorher über die E-Mail-Adresse ermittelter Nutzer aus den bestehenden Berechtigungsgruppen - und das funktioniert. Das Problem besteht jetzt noch darin, dass wenn ich das Skript in der Exchange-PowerShell-Konsole ausführe, Fehler geworfen werden. Vermutlich liegt es daran, dass PowerShell nicht weiß, welches Postfach er berechtigen soll mit den ermittelten AD-Objekten. Das Hauptstück des Skripts ist:
PowerShell:
$postfach = read-host „Postfach angeben (z. B. Cert@Firma.de)“
$zugriffssteuerungsliste = Get-MailboxPermission $postfach | where {$_.AccessRights -eq „FullAccess“}
$nutzer =@()

foreach ($eintrag in $zugriffssteuerungsliste)
{
[string]$gruppe= $eintrag.User
$gruppe = $gruppe.split(„\“)[1]
$mitglieder = Get-ADGroupMember „$gruppe“ -recursive
foreach ($mitglied in $mitglieder)
{

$name = $mitglied.name
$benutzerkonto = $mitglied.SamAccountname
$dn = $mitglied.distinguishedName
$nutzer += new-object PSObject -property @{Name=“$name“;sAMAccountName=“$benutzerkonto“;distinguishedName=“$dn“}

# Berechtigung "Senden als"
Add-ADPermission -Identity $dn -User $benutzerkonto -AccessRights 'ExtendedRight' -ExtendedRights 'send as'

# Berechtigung "FullAccess"
Add-MailboxPermission -Identity $dn -User $benutzerkonto -AccessRights 'FullAccess' -InheritanceType 'All'

}
}

Wahrscheinlich weiß er an dieser Stelle nicht, welches Postfach gemeint ist, also ist sowas in der Art nötig wie:
Add-MailboxPermission TO CERT@FIRMA.DE -Identity $dn -User $benutzerkonto -AccessRights 'FullAccess' -InheritanceType 'All'

🤔
 
Zurück
Oben