Exchange rechten op mailboxen

Door Oogje op dinsdag 21 april 2015 10:05 - Reacties (9)
Categorie: Powershell, Views: 3.420

Laat ik beginnen met het feit dat ik een Powershell beginneling ben die een beetje aanrommelt om het dagelijkse leven als sysadmin wat aangenamer te maken.

Onderstaande script heb ik gemaakt om snel op een aantal mailboxen de send as/send on behalf en full mailbox access uit te kunnen lezen.
Voor versie 2 staat het netter maken van de output en het omzetten van de loginnaam naar de displaynaam op het programma.

Mocht iemand daar al wat voor hebben houd ik me natuurlijk ook aanbevolen ;)

Onderstaande code opslaan in een Powershell bestand en aanroepen vanaf de PS-prompt. Daarbij aangeven welke csv er gebruikt moet worden, bv .\script.PS1 .\input.csv

Opzet van de CSV is vrij eenvoudig:

code:
1
2
3
4
Mailbox
mailbox1@domein.nl
mailbox2@domein.nl
mailbox3@domein.nl



De ps-code:

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
param(
  [string]$file
)

import-csv $file | ForEach { 

$SendAs = Get-mailbox $_.Mailbox |Get-ADPermission | ? {$_.ExtendedRights -like "Send-As" -and $_.User -notlike "NT AUTHORITY\SELF" -and !$_.IsInherited} | select user |fl
$FullAccess = Get-MailboxPermission $_.Mailbox | ? {$_.AccessRights -eq "FullAccess" -and !$_.IsInherited} | select user |fl
$SendOnBehalf = Get-mailbox $_.Mailbox | select -ExpandProperty GrantSendOnBehalfTo | select name |fl

Echo "Mailbox:"
$_.Mailbox
Echo "Send As:"
$SendAs
Echo "Full Access:"
$FullAccess
Echo "Send on Behalf:"
$SendOnBehalf

}

Volgende: Renamen edb files 06-'15 Renamen edb files
Volgende: VDP bug? 04-'15 VDP bug?

Reacties


Door Tweakers user G.Scholtens, dinsdag 21 april 2015 11:00

Leuk om e volgen, was net naar zoiets op zoek. Voor V2 klinkt veel belovend.
Echter krijg ik deze versie ook niet aan de praat.

Wil de output van dit script exporteren naar een .txt bestand, maar bestand blijft leeg qua inhoud

Door Tweakers user Oogje, dinsdag 21 april 2015 11:05

Als je het script draait zoals het hier staat krijg je wel output op het scherm?

Door Tweakers user G.Scholtens, dinsdag 21 april 2015 11:37

Oogje schreef op dinsdag 21 april 2015 @ 11:05:
Als je het script draait zoals het hier staat krijg je wel output op het scherm?
Nog niet, kan dat het even duurt, hebben nogal wat mailboxen in onze omgeving

Door Tweakers user G.Scholtens, dinsdag 21 april 2015 11:39

Import-Csv : Cannot validate argument on parameter 'Path'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.
At line:5 char:12
+ import-csv $file | ForEach {
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Import-Csv], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.ImportCsvCommand

Door Tweakers user Oogje, dinsdag 21 april 2015 11:52

Ik zal mn post ff updaten ;) Het gaat mis bij de CSV import.

edit: eea ff wat duidelijk neergezet, thnx :)

[Reactie gewijzigd op dinsdag 21 april 2015 11:56]


Door Tweakers user mhoogendam, dinsdag 21 april 2015 12:14

G.Scholtens schreef op dinsdag 21 april 2015 @ 11:39:
Import-Csv : Cannot validate argument on parameter 'Path'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.
At line:5 char:12
+ import-csv $file | ForEach {
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Import-Csv], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.ImportCsvCommand
Je moet dit script draaien met als de CSV file argument, bijvoorbeeld:

PowerShell:
1
c:\test\SendAs.ps1 c:\test\SendAsMailbox.csv


Mocht je deze wijze niet prettig vinden kan je regel 1t/m3 vervangen voor:

PowerShell:
1
$file = "c:\test\SendAsMailbox.csv"



@Oogje
:wub:
Je kan er ook nog voor kiezen om de modules voor de AD en Exchange te importeren in je script. Het maakt dan niet meer uit of je het gewoon vanuit een "normale" powershell window start of vanuit een Exchange Management Powershell.

PowerShell:
1
2
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ea SilentlyContinue
Import-Module ActiveDirectory -ea SilentlyContinue

[Reactie gewijzigd op dinsdag 21 april 2015 12:19]


Door Tweakers user Morphogenesis, woensdag 22 april 2015 11:50

Leuk bezig. :)

Een paar tips:


PowerShell:
1
2
$SendAs = Get-mailbox $_.Mailbox
$SendOnBehalf = Get-mailbox $_.Mailbox


Je vraagt hier twee keer dezelfde mailbox op. Je kan de mailbox ook in een variabele zetten en daar verder uit werken.

Verder maak je gebruik van het vraagteken als alias voor where-object. Als jij de enige bent die het script gebruikt is het natuurlijk super, maar als anderen het moeten lezen kan het onduidelijkheid scheppen. Om die reden laat ik het zelf altijd weg.

Voor je output:
Je kan gebruik maken van een PSObject om het in een hashtable te zetten: http://blogs.msdn.com/b/p...t-property-hashtable.aspx

Exporteert uitstekend naar een csv en leest lekker van het scherm :)

Door Tweakers user Oogje, woensdag 22 april 2015 12:38

Thnx voor de tips _/-\o_

Door Tweakers user Mental, woensdag 22 april 2015 20:07


PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
param(
  [string]$file
)

$mailboxes = import-csv $file
ForEach ($mailbox in $mailboxes) { 

"Mailbox:"
$mailbox.Mailbox
"Send As:"
$mailbox.Mailbox |Get-ADPermission | ? {$_.ExtendedRights -like "Send-As" -and $_.User -notlike "NT AUTHORITY\SELF" -and !$_.IsInherited} | select user |fl
"Full Access:"
Get-MailboxPermission $mailbox.Mailbox | ? {$_.AccessRights -eq "FullAccess" -and !$_.IsInherited} | select user |fl
"Send on Behalf:"
$mailbox.Mailbox | select -ExpandProperty GrantSendOnBehalfTo | select name |fl

}



Zoiets dan maar, scheelt inderdaad nogal wat Get-Mailbox statements, maar wel handig script verder :)

[Reactie gewijzigd op woensdag 22 april 2015 20:08]


Reageren is niet meer mogelijk