Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Exchange Management Shell variabele nodig in script

Pagina: 1
Acties:

Vraag


  • rookie no. 1
  • Registratie: Juni 2004
  • Laatst online: 27-11 12:46
Hoi,
We hebben hier een Exchange 2010 SP3 rollup 11 mailserver en willen graag via een script user accounts die lid zijn van een distributiegroep 'full mailbox access' rechten geven, zodat automapping goed werkt in Outlook/webmail.

Voor Exchange 2013/Exchange Online is de onderstaande regel perfect, maar die werkt niet voor Exchange 2010.

$DL = Get-DistributionGroupMember "[distribution group name]" | Select-Object -ExpandProperty Name ForEach ($Member in $DL) { Add-MailboxPermission -Identity "[mailbox name]" -User $Member -AccessRights ‘FullAccess’ -InheritanceType All }

Voor Exchange 2010 gebruiken we de onderstaande regel, maar dan krijgen we regelmatig foutmeldingen wat nogal vervelend is.

Get-DistributionGroupMember “[group name]” | foreach-Object { Add-MailboxPermission “[mailbox name]” –AccessRights FullAccess –user $_.Name}

De foutmelding is zoals onderstaand en komt er op neer dat de taak nog bezig is bij het uitvoeren van de vorige actie.

Pipeline not executed because a pipeline is already executing. Pipelines cannot
be executed concurrently.


Als ik het goed begrijp kan dat opgelost worden door een variabele in het script, maar geen idee hoe ik het script goed werkend moet krijgen.

Is er een Exchange guru hier die me daarbij kan helpen?

Alle reacties


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Waarom knip het je dan niet in twee stukken op:

code:
1
2
$DL=Get-DistributionGroupMember "[distribution group name]"
foreach-Object {Add-MailboxPermission Add-MailboxPermission -Identity "[mailbox name]" -AccessRights FullAccess -user $DL.name}

Nu wordt eerst de variable $DL gevuld met alle leden, en daarna pas de mailboxpermissie aangepast.

compleet ongetest trouwens

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • rookie no. 1
  • Registratie: Juni 2004
  • Laatst online: 27-11 12:46
Dank voor de tip. Heb hem geprobeerd, maar krijg dan een regel met >> en verder niets. Mist er een actie in het commando o.i.d.?

Ik weet wel wat er bij mij mist: Exchange powershell kennis ;)

  • @r!k
  • Registratie: April 2000
  • Laatst online: 28-11 23:19

@r!k

It is I, Leclerq

Het commando dat Question mark aangeeft mist de afsluitend "}". Zet die er eens achter en kijk of het dan werkt?

Edit, nee ik kijk verkeerd. Probeer dit eens (eveneens ongetest overigens)

PowerShell:
1
2
$DL=Get-DistributionGroupMember "[distribution group name]"
foreach ($i in $DL) {Add-MailboxPermission -Identity "[mailbox name]" -AccessRights FullAccess -User $i}

[ Voor 58% gewijzigd door @r!k op 07-01-2016 15:10 ]

Een hele rij microsoft certificeringen.


  • rookie no. 1
  • Registratie: Juni 2004
  • Laatst online: 27-11 12:46
Goed gezien. Nu de onderstaande melding:

Cannot bind argument to parameter 'User' because it is null.

Bij de $DL.name hoeft toch niets ingevuld te worden? Dat lijkt me al te verwijzen naar die variabele de regel daarvoor toch?

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik gok dat $i in het voorbeeld van @r!k een compleet mailboxobject is, terwijl het "add-mailboxpermission" cmdlet enkel een mailboxname als parameter accepteerd.

Vervang de eerste regel eens door:

code:
1
$DL = Get-DistributionGroupMember "[distribution group name]" | Select-Object -ExpandProperty Name

Nu worden alleen de namen van de mailboxen in het object $DL opgeslagen, ipv de complete userobjecten.

(overigens is dit ook de syntax die in je Exchange 2013 voorbeeld gebruikt wordt).

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • rookie no. 1
  • Registratie: Juni 2004
  • Laatst online: 27-11 12:46
Ga ik maandag testen (kan helaas niet eerder). Dank je wel.

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
rookie no. 1 schreef op donderdag 07 januari 2016 @ 15:02:
Dank voor de tip. Heb hem geprobeerd, maar krijg dan een regel met >> en verder niets. Mist er een actie in het commando o.i.d.?

Ik weet wel wat er bij mij mist: Exchange powershell kennis ;)
In dat geval : werk aan je powershell kennis. Ipv simpelweg regels te copy/pasten kun je beter proberen te leren wat een commando doet, hoe de pipeline werkt, het verschil tussen het keyword foreach en de cmdlet Foreach-Object.

Exchange is vrijwel niet meer te beheren zonder powershell tegenwoordig. Ik merk zelf dat ik tegenwoordig zeker 90% van de tijd in de shell aan het werken ben ipv in de gui (Enable-mailbox met de samaccountname is bv tien keer zo snel als vanuit de gui een mailbox aanmaken. Ook is het makkelijk om altijd een remote shell met een AD en een Exchange sessie open te hebben tijdens het werken voor het standaard beheer)

  • rookie no. 1
  • Registratie: Juni 2004
  • Laatst online: 27-11 12:46
Klopt Killah_Priest. Dat is voor kleinere omgevingen zonder management servers niet altijd even snel, maar bij de grotere waar ik nu voor bezig zeker wel inderdaad.

Overigens krijg ik de foutmelding:

Cannot bind argument to parameter 'User' because it is null.
+ CategoryInfo : InvalidData: (:) [Add-MailboxPermission], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Add-MailboxPermission


Er zitten wel users in de distributielijst groep.

  • ralpje
  • Registratie: November 2003
  • Laatst online: 10:08

ralpje

Deugpopje

Vul eerst $DL met de eerste regel, en kijk daarna wat de inhoud is. Je hebt kans dat je expliciet moet specificeren welke value je in je loop voor die betreffende user ($i) wilt gebruiken, bijvoorbeeld met iets als $i.user of $i.alias ofzo. Maar daarvoor zul je dus even de inhoud van $DL moeten checken :)

Verder met Killah_Priest: Powershell is the way to go, of het nu Exchange, AD, Azure, System Center of iets anders is. Koop http://www.bol.com/nl/p/l..._all&originalSection=main, werk die door en je bent een heel eind verder ;)

Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
rookie no. 1 schreef op maandag 11 januari 2016 @ 13:22:
Klopt Killah_Priest. Dat is voor kleinere omgevingen zonder management servers niet altijd even snel, maar bij de grotere waar ik nu voor bezig zeker wel inderdaad.

Overigens krijg ik de foutmelding:

Cannot bind argument to parameter 'User' because it is null.
+ CategoryInfo : InvalidData: (:) [Add-MailboxPermission], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Add-MailboxPermission


Er zitten wel users in de distributielijst groep.
Wat betreft je foutmelding :
Een groot deel van de exchange cmdlets accepteren geen pipeline input : een Foreach-Object loop zou echter wel moeten werken.
Pagina: 1