violak
Goto Top

Powershell Get-Mailboxpermission mit Benutzer vor und nachname

Guten Morgen,

ich muss bei SharedMailboxen regelmäßig die "FullAccess" Berechtigungen auslesen und diese dann per Excel an die jeweilige Abteilung mailen.

Dazu nutze ich folgendes Skript

$user = Get-Mailbox "mailbox" | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and  -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")}  

Das geht soweit auch ganz sauber.

Mein Problem ist nur, dass die Spalte User, dann den Anmeldenamen enthält, welcher aber eine fordlaufende Nummer ist Domain\123456

Damit kann derjenige, welcher die Berechtigungen prüfen soll nicht so wirklich viel machen.

Ich muss irgendwie den Usernamen gegen den User selbst abprüfen und eine Spalte mit Vor und Nachname mit reinbekommen.

Ich weiß aber nicht wie ich das da rein bekomme.

Hat da jemand von Euch eine Idee zu?

Vielen Dank

Content-ID: 657746

Url: https://administrator.de/forum/powershell-get-mailboxpermission-mit-benutzer-vor-und-nachname-657746.html

Ausgedruckt am: 24.12.2024 um 14:12 Uhr

Doskias
Doskias 01.03.2021 aktualisiert um 12:17:07 Uhr
Goto Top
Moin

get-aduser 123456 
gibt dir die hinterlegten Daten des User aus dem AD wieder, darunter auch Vor und Nachname. Der ausführende Rechner braucht allerdings die PS Befehle für den DC. Sollte auf dem Exchange problemlos möglich sein

Gruß
Doskias

Nachtrag: Grade getestet. Die Exchange-Console lädt die DC Plugins bei Anwendung des Befehls automatisch nach.
violak
violak 01.03.2021 um 12:58:23 Uhr
Goto Top
Hi, vielen Dank für deine Rückmeldung.

Das beringt mich aber nicht weiter.

Ich brauche das komplett in einem Array oder in einer CSV Datei.

So habe ich jetzt einmal meine Abfrage und einmal deine aber keine Zusammenführung.
Doskias
Doskias 01.03.2021 um 15:48:50 Uhr
Goto Top
Doch bringt es, aber ich mach nicht die Arbeit für dich ;)

ich helfe dir aber gerne weiter. Mit einem
$aktueller_User=get-aduser "123456" | select-objekt Name  
erhältst du den Namen des Users (mit entsprechen anderen Variablen halt nur den Nachnamen, je nach Bedarf).

Du musst dann nur noch in deinem Abfrageergebnis prüfen wo in der Spalter User 123456 steht und dies dann mit $aktueller_User ersetzen. Das kannst du theoretisch auch machen nachdem du deine CSV-Datei erzeugt hast und dann in der CSV 123456 durch den jeweiligen Benutzer ersetzen.
violak
violak 03.03.2021 um 14:12:23 Uhr
Goto Top
ja aber ich möchte dich die Spalten erweitern.

Habe es schon mit ADD-Member probiert, dann wird das aber nur darunter aber nicht direkt daneben geschrieben.

Was mache ich denn falsch?
violak
violak 03.03.2021 um 14:15:51 Uhr
Goto Top
was zudem nicht funktioniert, der User wird ja mit domain\usernamen ausgegeben, dass kann ich dann nicht mit einem Get-Aduser abfangen.

Sorry aber ich weiß nach wie vor nicht wie ich deine Tipps umsetzen soll.
Doskias
Doskias 03.03.2021 um 15:52:39 Uhr
Goto Top
Also ich hab jetzt mal n kleines Skript nebenbei für dich geschrieben face-smile

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; 

cls
$userliste=@()
$Postfach="Postfach"  
$nbdomain="Domäne"  
$user = Get-Mailbox "$Postfach" | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and  -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")}  

foreach ($anwender in $user)
{
if ($anwender.IsInherited -eq 0)
{
    $aktueller_User=$anwender.user
    $korrigiere_user= $aktueller_user -replace $nbdomain -replace '\\'  
    $Anwender_Name=Get-ADUser $korrigiere_user | select-object SAMAccountName
    $userliste=$userliste+$Anwender_Name
}
}
write-host "Folgende user haben Vollzugriff auf das Postfach" $Postfach >c:\temp\$postfach.txt  
$userliste 
echo $userliste >> c:\temp\$postfach.txt

In Zeile 5 trägst du dein Postfach ein, welches du testen willst
In Zeile 6 deine Domäne

Zeile 11 ignoriert die Schleife die für jeden Eintrag durchgegangen wird, wenn die Rechte vererbt sind. Das war nötig, da nach deiner Abfrage noch Exchange Domain Servers und Exchange Services unter $user abgefragt wurden. Das kann theoretisch weg, wenn deine Abfrage sauber ist face-smile

Zeile 13 wandelt den Eintrag unter User in einen String um
Zeile 14 ersetzt dann in diesem String die Domäne und den \ durch nichts. Wird praktisch entfernt. Das kann zu Problemen führen, wenn dein Domänname im Benutzernamen enthalten ist. Je nachdem wie deine Domäne heißt. Würde sie zum Beispiel DOS heißen, würde bei mir neben der Domäne auch das DOS aus dem Namen verfallen. Die Aufgabe das zu korrigieren überlass ich dir face-wink

Zeile 15 führt dann den get-aduser aus und holt sich nur den SamAccountName
Zeile 16 Packt das ganze in ein neues array

Zeile 19 erstellt eine leere Textdatei unter c:\temp mit dem Namen des Postfaches und löscht eine ggf. vorhandene
Zeile 20 Zeigt dir die User an, die Vollzugriff auf dein ausgewähltes Postfach haben
Zeile 21 fügt die User in die Datei in Zeile 19 ein

Und ja, das ginge sicherlich auch kürzer, aber ich habe lieber ein Skript was ein paar Zeilen länger ist, denn das lässt sich leichter erklären face-wink

Noch Fragen?

Gruß
Doskias
violak
violak 04.03.2021 um 13:10:58 Uhr
Goto Top
mein Versuch hätte nun wie folgt ausgesehen, hatte nicht mehr mit Dir gerechnet ;)

$user = Get-Mailbox "name" | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")}   

$u3 = foreach($u in $user){
$u.User.RawIdentity.Remove(0,5)}


$u5 = foreach($u4 in $u3){
Get-ADuser $u4 | select GivenName,Surname,Name,Samaccountname}


$u5 | Export-csv C:\Temp\test.csv

Ich glaube das Ergebnis ist das gleiche.

Jetzt versuche ich gerade, dass automatisiert für alle Sharedpostfächer durchlaufen zu lassen ohne, dass ich da eine Eingabe tätigen muss.
Doskias
Doskias 04.03.2021 um 13:52:47 Uhr
Goto Top
das ist das schöne an powershell. es gibt immer mehrere Lösungen. wenn es klappt, ist doch schön.

Get-Mailbox -OrganizationalUnit Users

gibt dir alle Postfächer der OU Users. An deine Umgebung anpassen und noch eine foreach Schleife um das was du hast. und immer den Namen des Postfaches ersetzen. dann läuft es für alle Postfächer durch.
violak
violak 04.03.2021 um 15:37:47 Uhr
Goto Top
habe mir jetzt sowas gebaut

$u0 = Get-Mailbox -identity *G100*

Foreach($u1 in $u0){

$u2 = Get-Mailbox -identity $u1.Alias | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")}   

$u4 = foreach($u3 in $u2){
$u3.User.RawIdentity.Remove(0,5)}

$u6 = foreach($u5 in $u4){
Get-ADuser $u5 | select GivenName,Surname,Name,Samaccountname

$exportpath = "C:\Temp\" + $u1.Alias + ".txt"  

$u6 | Export-csv $exportpath -Encoding UTF8
}
Write-Host "$u1"  

}


Nur die Ausgabe geht nicht richtig.

Sprich die Dateien der Postfächer, da sind dann nicht die richtigen Mitglieder drin.