lordofremixes
Goto Top

Resourcenpostfächer per Powershell auslesen

Hallo zusammen,

ich würde gerne auf einem Exchange Server 2019 per Powershell alle Resourcenpostfächer auslesen und in eine .csv exportieren, d.h. Email Adresse, "Senden als" Mitglieder und "Vollzugriff" Mitglieder.

Da das etwas eilt, hat das schon mal jemand gemacht und hat eventuell ein fertiges Script?
Ansonsten muss ich das heute noch manuell machen face-sad

Danke euch, falls jemand helfen kann.

Gruß
lordofremixes

Content-ID: 7974618736

Url: https://administrator.de/forum/resourcenpostfaecher-per-powershell-auslesen-7974618736.html

Ausgedruckt am: 23.12.2024 um 02:12 Uhr

erikro
erikro 17.10.2023 aktualisiert um 16:25:31 Uhr
Goto Top
Moin,

get-mailbox | ?{($_.resourcetype -eq "room") -or ($_.resourcetype -eq "equipment")} | Get-MailboxPermission | export-csv c:\copy\out.csv -NoTypeInformation -encoding utf8 -delimiter ";"  

hth

Erik
lordofremixes
lordofremixes 17.10.2023 um 16:26:13 Uhr
Goto Top
Anders gefragt:

Get-Mailbox -RecipientTypeDetails RoomMailbox

wie bekomme ich da noch die Vollzugriff und Senden als User dazu?
erikro
erikro 17.10.2023 um 16:33:48 Uhr
Goto Top
Zitat von @lordofremixes:

Anders gefragt:

Get-Mailbox -RecipientTypeDetails RoomMailbox

wie bekomme ich da noch die Vollzugriff und Senden als User dazu?

Na so, wie ich das geschrieben habe. In der CSV steht alles drin.
lordofremixes
lordofremixes 17.10.2023 um 16:39:47 Uhr
Goto Top
Zitat von @erikro:

Moin,

get-mailbox | ?{($_.resourcetype -eq "room") -or ($_.resourcetype -eq "equipment")} | Get-MailboxPermission | export-csv c:\copy\out.csv -NoTypeInformation -encoding utf8 -delimiter ";"  

hth

Erik

Hallo Erik,

schon mal Top, aber wie bekomme ich das hin, dass die CSV nur je 1x Email der Resource, die dazugehörigen User mit Vollzugriff und die dazugehörigen Senden Als User auflistet?

Es sind knapp 50 Resourcen, die CSV hat aber ca. 500 Zeilen mit den ganzen NT AUTHORITY Einträgen etc..

Gruß
lordofremixes
7907292512
Lösung 7907292512 17.10.2023 aktualisiert um 17:46:40 Uhr
Goto Top
Moin.
$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails EquipmentMailbox,RoomMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
        FullAccess = (Get-MailboxPermission $mailbox -ResultSize unlimited | ?{($_.AccessRights -match "FullAccess" -and !$_.Deny -and !$_.IsInherited -and $_.User -notmatch "\\(SELBST|SELF)$")}).User -join ','  
        SendAs = (Get-ADPermission -Identity $mailbox.DistinguishedName | ?{$_.ExtendedRights -like "Send-As" -and !$_.Deny -and $_.User -notmatch '\\(SELBST|SELF)$'}).User -join ','  
    }
}
$data | export-csv .\permissions.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Gruß sid
lordofremixes
lordofremixes 17.10.2023 um 17:10:19 Uhr
Goto Top
Zitat von @erikro:

Zitat von @lordofremixes:

Anders gefragt:

Get-Mailbox -RecipientTypeDetails RoomMailbox

wie bekomme ich da noch die Vollzugriff und Senden als User dazu?

Na so, wie ich das geschrieben habe. In der CSV steht alles drin.

Hallo Erik,

Was hältst du davon wenn ich noch diese Parameter einbaue?

get-mailbox | ?{($_.resourcetype -eq "room")} | 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")} | ft -AutoSize | export-csv c:\copy\out.csv -NoTypeInformation -encoding utf8 -delimiter ";"    

Gruß
lordofremixes
erikro
erikro 17.10.2023 um 17:38:54 Uhr
Goto Top
Zitat von @lordofremixes:

Zitat von @erikro:

Zitat von @lordofremixes:

Anders gefragt:

Get-Mailbox -RecipientTypeDetails RoomMailbox

wie bekomme ich da noch die Vollzugriff und Senden als User dazu?

Na so, wie ich das geschrieben habe. In der CSV steht alles drin.

Hallo Erik,

Was hältst du davon wenn ich noch diese Parameter einbaue?

get-mailbox | ?{($_.resourcetype -eq "room")} | 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")} | ft -AutoSize | export-csv c:\copy\out.csv -NoTypeInformation -encoding utf8 -delimiter ";"    

Gruß
lordofremixes

OK, wenn Du das so filtern willst, sollte es das sein. Eine Zeile pro Adresse wird leider nichts.
lordofremixes
lordofremixes 17.10.2023 um 19:59:27 Uhr
Goto Top
Zitat von @7907292512:

Moin.
$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails EquipmentMailbox,RoomMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
        FullAccess = (Get-MailboxPermission $mailbox -ResultSize unlimited | ?{($_.AccessRights -match "FullAccess" -and !$_.Deny -and !$_.IsInherited -and $_.User -notmatch "\\(SELBST|SELF)$")}).User -join ','  
        SendAs = (Get-ADPermission -Identity $mailbox.DistinguishedName | ?{$_.ExtendedRights -like "Send-As" -and !$_.Deny -and $_.User -notmatch '\\(SELBST|SELF)$'}).User -join ','  
    }
}
$data | export-csv .\permissions.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Gruß sid

Vielen vielen Dank !!!!!
Das ist genau das, wonach ich gesucht hab face-smile
lordofremixes
lordofremixes 19.10.2023 um 14:28:03 Uhr
Goto Top
Zitat von @7907292512:

Moin.
$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails EquipmentMailbox,RoomMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
        FullAccess = (Get-MailboxPermission $mailbox -ResultSize unlimited | ?{($_.AccessRights -match "FullAccess" -and !$_.Deny -and !$_.IsInherited -and $_.User -notmatch "\\(SELBST|SELF)$")}).User -join ','  
        SendAs = (Get-ADPermission -Identity $mailbox.DistinguishedName | ?{$_.ExtendedRights -like "Send-As" -and !$_.Deny -and $_.User -notmatch '\\(SELBST|SELF)$'}).User -join ','  
    }
}
$data | export-csv .\permissions.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Gruß sid

Sorry dass ich da noch mal nachfrage, aber das Script ist so perfekt, diese Leichen S-15-.. habe ich manuell rausgelöscht..

Kannst du das auch anpassen für die Gruppenpostfächer sprich Verteiler? Bzw. was muss ich da anpassen?
Send As und Vollzugriff würde ja rausfallen.

Also nur Email Adresse und wer dort Mitglied ist.

Sorry für deine Zeit..

Gruß
lordofremixes
7907292512
7907292512 19.10.2023 aktualisiert um 14:48:41 Uhr
Goto Top
Kannst du das auch anpassen für die Gruppenpostfächer sprich Verteiler?
Der Parameter
-RecipientTypeDetails
ist dein Freund, damit kannst du die Typen der Mailboxen angeben die du ausgeben willst.
https://learn.microsoft.com/de-de/powershell/module/exchange/get-mailbox ...

-RecipientTypeDetails

Der Parameter RecipientTypeDetails filtert die Ergebnisse nach dem angegebenen Postfachuntertyp. Gültige Werte sind:

    DiscoveryMailbox
    EquipmentMailbox
    GroupMailbox (Exchange 2013 oder höher und Cloud)
    LegacyMailbox
    LinkedMailbox
    LinkedRoomMailbox (Exchange 2013 oder höher und Cloud)
    RoomMailbox
    SchedulingMailbox (Exchange 2016 oder höher und Cloud)
    SharedMailbox
    TeamMailbox (Exchange 2013 oder höher und Cloud)
    UserMailbox
lordofremixes
lordofremixes 19.10.2023 um 15:42:56 Uhr
Goto Top
Zitat von @7907292512:

Kannst du das auch anpassen für die Gruppenpostfächer sprich Verteiler?
Der Parameter
-RecipientTypeDetails
ist dein Freund, damit kannst du die Typen der Mailboxen angeben die du ausgeben willst.
https://learn.microsoft.com/de-de/powershell/module/exchange/get-mailbox ...

-RecipientTypeDetails

Der Parameter RecipientTypeDetails filtert die Ergebnisse nach dem angegebenen Postfachuntertyp. Gültige Werte sind:

    DiscoveryMailbox
    EquipmentMailbox
    GroupMailbox (Exchange 2013 oder höher und Cloud)
    LegacyMailbox
    LinkedMailbox
    LinkedRoomMailbox (Exchange 2013 oder höher und Cloud)
    RoomMailbox
    SchedulingMailbox (Exchange 2016 oder höher und Cloud)
    SharedMailbox
    TeamMailbox (Exchange 2013 oder höher und Cloud)
    UserMailbox

Lieber Siddius,

ich habe ja schon versucht,

$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
    }
}
$data | export-csv "C:\copy\\permissions.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8    
zu versuchen,

ich scheitere aber daran, den Parameter für die Members für den Verteiler hinzuzufügen..
7907292512
7907292512 19.10.2023 aktualisiert um 16:01:50 Uhr
Goto Top
Du sprichst in Rätseln, UserMailbox filtert doch nur "Benutzermailboxen" keine Gruppenpostfächer, siehe Enumeration oben ... Es ist mir nicht klar was du überhaupt willst. 🤔
lordofremixes
lordofremixes 19.10.2023 aktualisiert um 16:13:22 Uhr
Goto Top
Zitat von @7907292512:

Du sprichst in Rätseln, UserMailbox filtert doch nur "Benutzermailboxen" keine Gruppenpostfächer, siehe Enumeration oben ... Es ist mir nicht klar was du überhaupt willst. 🤔

Ich hatte tatsächlich den Fehler drin mit dem Parameter UserMailbox, total falsch..

Ich würde gerne wie in deinem Script

$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails EquipmentMailbox,RoomMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
        FullAccess = (Get-MailboxPermission $mailbox -ResultSize unlimited | ?{($_.AccessRights -match "FullAccess" -and !$_.Deny -and !$_.IsInherited -and $_.User -notmatch "\\(SELBST|SELF)$")}).User -join ','    
        SendAs = (Get-ADPermission -Identity $mailbox.DistinguishedName | ?{$_.ExtendedRights -like "Send-As" -and !$_.Deny -and $_.User -notmatch '\\(SELBST|SELF)$'}).User -join ','    
    }
}
$data | export-csv .\permissions.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8    

Das ganze nur für die Verteiler anpassen, ohne Vollzugriff und ohne Send As ...ALso nur die Member
lordofremixes
lordofremixes 19.10.2023 um 16:16:38 Uhr
Goto Top
Zitat von @7907292512:

Kannst du das auch anpassen für die Gruppenpostfächer sprich Verteiler?
Der Parameter
-RecipientTypeDetails
ist dein Freund, damit kannst du die Typen der Mailboxen angeben die du ausgeben willst.
https://learn.microsoft.com/de-de/powershell/module/exchange/get-mailbox ...

-RecipientTypeDetails

Der Parameter RecipientTypeDetails filtert die Ergebnisse nach dem angegebenen Postfachuntertyp. Gültige Werte sind:

    DiscoveryMailbox
    EquipmentMailbox
    GroupMailbox (Exchange 2013 oder höher und Cloud)
    LegacyMailbox
    LinkedMailbox
    LinkedRoomMailbox (Exchange 2013 oder höher und Cloud)
    RoomMailbox
    SchedulingMailbox (Exchange 2016 oder höher und Cloud)
    SharedMailbox
    TeamMailbox (Exchange 2013 oder höher und Cloud)
    UserMailbox

Schau,

$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails GroupMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
         }
}
$data | export-csv "C:\copy\\permissions.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8    

Aber wie bekomme ich die members da rein wie in deinem Script von gestern?

Gruß
Lordofremixes
7907292512
7907292512 19.10.2023 um 16:16:43 Uhr
Goto Top
Und die "Verteiler" sind nun was für Mailboxen ????
Und an Rechten alle explizit zugewiesenen Rechte?? Dir muss man echt alles aus der Nase ziehen 🤨
lordofremixes
lordofremixes 19.10.2023 um 16:18:56 Uhr
Goto Top
Zitat von @7907292512:

Und die "Verteiler" sind nun was für Mailboxen ????
Und an Rechten alle explizit zugewiesenen Rechte?? Dir muss man echt alles aus der Nase ziehen 🤨

Sorry für die Nachfragen, aber es sind Gruppenpostfächer --> sprich Verteiler (Email Verteiler) auf dem Exchange angelegt... Und ich weiß nicht welchen Parameter ich da verwenden soll....
7907292512
7907292512 19.10.2023 aktualisiert um 16:20:12 Uhr
Goto Top
lordofremixes
lordofremixes 19.10.2023 um 16:22:01 Uhr
Goto Top
Zitat von @7907292512:

Get-DustributionGroupMember

Das meinte ich ja, ich habe den Code so angepasst:

$data = foreach($mailbox in Get-Mailbox -RecipientTypeDetails GroupMailbox -ResultSize unlimited){
    [pscustomobject]@{
        Mailbox = $mailbox.PrimarySmtpAddress
         }
}

aber ich hab einen Fehler drin und weiß nicht wo ich die Members da einfügen soll
$data | export-csv "C:\copy\\permissions.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8
7907292512
7907292512 19.10.2023 aktualisiert um 16:26:45 Uhr
Goto Top
Mailboxen selbst haben keinen Member, Gruppen haben Member.
lordofremixes
lordofremixes 19.10.2023 um 16:29:35 Uhr
Goto Top
Zitat von @7907292512:

Mailboxen selbst haben keinen Member, Gruppen haben Member.

Und wie bekomme ich die dann raus?

Du Siddius, du hast mir gestern schon mehrere Stunden Arbeit erspart, und ich will dich jetzt nicht nerven...

Ich dachte das sei leicht, dein Script für die Gruppen kurzerhand anzupassen...
7907292512
7907292512 19.10.2023 aktualisiert um 16:35:25 Uhr
Goto Top
Zitat von @lordofremixes:

Zitat von @7907292512:

Mailboxen selbst haben keinen Member, Gruppen haben Member.

Und wie bekomme ich die dann raus?
Was "raus"? Mailboxen haben zugewiesene Rechte keine Member , du musst hier schon die richtigen Begriffe verwenden das man es verstehen kann was du willst.
Du Siddius, du hast mir gestern schon mehrere Stunden Arbeit erspart, und ich will dich jetzt nicht nerven...

Ich dachte das sei leicht, dein Script für die Gruppen kurzerhand anzupassen...
Klar kann ich alles anpassen, aber wenn man in Rätseln spricht und immer nur in zwei Zeilen beschreibt und den Zusammenhang nicht erfassen kann weil du die falschen Begriffe benutzt, tja was soll man da machen ...?!
Wenn man etwas mehr in eine Beschreibung packt so dass es alle verstehen dann ist auch dir geholfen ansonsten hast du halt Pech.
lordofremixes
lordofremixes 19.10.2023 um 16:36:55 Uhr
Goto Top
Zitat von @7907292512:

Zitat von @lordofremixes:

Zitat von @7907292512:

Mailboxen selbst haben keinen Member, Gruppen haben Member.

Und wie bekomme ich die dann raus?
Was raus? Mailboxen haben zugewiesene Rechte keine Member , du musst hier schon die richtigen Begriffe verwenden das man es verstehen kann was du willst.
Du Siddius, du hast mir gestern schon mehrere Stunden Arbeit erspart, und ich will dich jetzt nicht nerven...

Ich dachte das sei leicht, dein Script für die Gruppen kurzerhand anzupassen...
Wenn man in Rätseln spricht und immer nur in zwei Zeilen beschreibt und den Zusammenhang nicht erfassen kann, tja was soll man da machen ...


Also, ich habe mehrere Verteiler auf einem Exchange 2019 (Gruppen), jetzt würde ich gerne eine .csv generieren à la
Mail Adresse des Verteilers --> smtp Email Adresse
Anzeigeanadresse diesen Verteilers?
Welche Members hat der?

Äquivalent zu deinem Script mit den Resourcen, nur für Gruppenpostfächer, sprich Exchange Email Verteiler
7907292512
7907292512 19.10.2023 aktualisiert um 17:15:13 Uhr
Goto Top
Na endlich, warum nicht gleich so ...
Get-DistributionGroup | select @{n='Group';e={$_.PrimarySmtpAddress}},@{n='Member';e={(Get-DistributionGroupMember $_.Alias | select -Expand PrimarySmtpAddress) -join ','}} | export-csv .\verteiler.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Tschö. 🖖
lordofremixes
lordofremixes 19.10.2023 um 17:03:36 Uhr
Goto Top
Zitat von @7907292512:

Na endlich, warum nicht gleich so ...
Get-DistributionGroup | select @{n='Group';e={$_.PrimarySmtpAddress}},@{n='Member';e={(Get-DistributionGroupMember $_.Alias | select -Expand PrimarySmtpAddress) -join ','}} | export-csv .\verteiler.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Tschö. 🖖

Tatsächlich ist die csv mal wieder perfekt, aber, es stehen tatsächlcih keine Member in der Liste, sprich, nach dem Semikolon kommt nichts mehr
7907292512
7907292512 19.10.2023 um 17:06:34 Uhr
Goto Top
Klappt hier problemlos ...
lordofremixes
lordofremixes 19.10.2023 um 17:07:26 Uhr
Goto Top
Zitat von @7907292512:

Klappt hier problemlos ...

Nach dem Semikolon stehen bei dir User?
7907292512
7907292512 19.10.2023 aktualisiert um 17:11:45 Uhr
Goto Top
Sicher, die E-MailAdresse dieser, wenn du stattdessen die Namen willst das zweite PrimarySMTPAddress in Name ändern und schon hast du die Namen statt der E-Mail.

screenshot
lordofremixes
lordofremixes 19.10.2023 aktualisiert um 17:12:25 Uhr
Goto Top
Zitat von @7907292512:

Sicher

Hmmm, ich hab das nochmal ausgeführt. Management Shell als Admin ausgeführt...

<Get-DistributionGroup | select @{n='Group';e={$_.PrimarySmtpAddress}},@{n='Member';e={(Get-DistributionGroupMember $_.Alias | select -Expand PrimarySmtpAddress) -join ','}} | export-csv .\verteiler.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8    

SMTP Email Adresse wird angezeigt, aber nach dem Semikolon stehen keine User, bei keiner Zeile...
lordofremixes
lordofremixes 19.10.2023 um 17:19:31 Uhr
Goto Top
Zitat von @7907292512:

Sicher, die E-MailAdresse dieser, wenn du stattdessen die Namen willst das zweite PrimarySMTPAddress in Name ändern und schon hast du die Namen statt der E-Mail.

screenshot

Denke das ist ja nicht mal das Problem. Der Name wird ja angezeigt, nur die Members erscheinen nicht, nach dem Semikolon nichts mehr, in keiner Zeile... Mich wundert es auch dass Powershell nach deinem gestrigen Befehl schon 2 Minuten brauchte, aber hier jetzt nur wenige Sekunden..
lordofremixes
lordofremixes 19.10.2023 um 17:21:25 Uhr
Goto Top
Zitat von @7907292512:

Sicher, die E-MailAdresse dieser, wenn du stattdessen die Namen willst das zweite PrimarySMTPAddress in Name ändern und schon hast du die Namen statt der E-Mail.

screenshot

Get-DistributionGroup | select PrimarySmtpAddress,@{n='Member';e={($_ | Get-DistributionGroupMember | select -Expand PrimarySmtpAddress) -join ','}} | export-csv "C:\copy\Verteiler.csv"" -Delimiter ";" -NoTypeInformation -Encoding UTF8    

Das ist der Code den ich verwende
7907292512
7907292512 19.10.2023 aktualisiert um 17:23:49 Uhr
Goto Top
Tja klappt hier ja fehlerfrei, ohne Umgebungsbedingungen keine Hilfe, wie immer ...

Einfach die Befehle manuell ausführen und RTFM dann löst du es bei dir selbst ...
https://learn.microsoft.com/de-de/powershell/module/exchange/get-distrib ...
lordofremixes
lordofremixes 19.10.2023 um 17:24:01 Uhr
Goto Top
Zitat von @7907292512:

Tja klappt hier ja fehlerfrei, ohne Umgebungsbedingungen keine Hilfe, wie immer ...

Einfach manuell debuggen und RTFM ...
https://learn.microsoft.com/de-de/powershell/module/exchange/get-distrib ...

Ich sehe es ja face-sad
7907292512
7907292512 19.10.2023 aktualisiert um 17:25:52 Uhr
Goto Top
Zitat von @lordofremixes:
Ich sehe es ja face-sad
Nee export in CSV weglassen und die Eigenschaften von Get-DistributionGroupMember zu Fuß mittels Format-List ansehen...

Grundlagen anlesen
Powershell Leitfaden für Anfänger

I'm out.