Simpelste fake hybride Office 365 on premise constructie

Wij werden recent door een klant benaderd met het probleem dat zij eigenlijk een on-premise omgeving wilde combineren met een Office 365 omgeving. Normaliter zijn hiervoor wel wat routes maar deze vereisen aardig wat complexe configuratie en afstemming. Microsoft heeft hier diverse routes en plannen voor (zie ook de Microsoft site hierover) maar dit gaat veel te diep.

Inleiding

Met on-premise bedoeld Microsoft een omgeving die lokaal draait. In de meest ideale situatie is dit een Exchange platform waarmee een naadloze integratie op te zetten is. Hebben we het echter over een shared hosting server dan wordt het een heel ander verhaal. Waarom zou je dit überhaupt willen?

Stel dat je een organisatie hebt met een tiental mailboxen waarvan er maar 1 of 2 in de cloud terecht hoeven te komen (bijvoorbeeld om licentiekosten te sparen of omdat het gewoon geen zin heeft qua implementatie). Je zou dit liefst natuurlijk naast elkaar doen maar hierover is maar weinig te vinden.

De oplossing

Wij kwamen uiteindelijk na wat gestoei met de volgende oplossing;
Er wordt een regulier Office 365 account aangemaakt conform de normale regels behalve dat de mail primair bij de on-premise locatie blijft binnenkomen. Voor de 1 of 2 gewenste boxen zetten we een forward op naar het @onmicrosoftonline.com adres. Hierdoor komt deze mail daar binnen terwijl de rest bij de primaire server blijft binnenkomen. Uiteraard niet de mooiste oplossing en er zitten best een paar haken en ogen aan.

Zo is het niet mogelijk vanuit de boxen naar andere mailboxen intern te mailen omdat deze, logisch ook, door Microsoft gepoogd worden intern te bezorgen wat niet gaat. Daarnaast geeft deze constructie soms wat verwarring qua waar mail vandaan komt en naartoe moet (spamfilters, reply’s etc.). Echter is het de meest platte oplossing en zeker als het om één box gaat wat ons betreft een prima oplossing.

Zo creëer je eigenlijk heel snel en simpel een fake hybride Office 365 on premise oplossing.

Office 365: Shared calendar (no licence)

Vandaag een leuke vraag gekregen waar ik nog niet direct het antwoord op had. Dit ging om het opzetten van een gedeelde agenda zonder echte ‘gebruiker’ dus bijvoorbeeld een algemene agenda voor een kantoor of iets. Dacht eerst dat ik het moest zoeken in de richting van distribution- of securitygroups maar dit was te diep gedacht. Al snel realiseerde ik me dat dit gewoon eenvoudig te realiseren was met een gedeelde mailbox.

Als eerste maak je via de powershell een gedeelde mailbox aan (in dit geval noemen we hem kantooragenda@bedrijf.nl):


New-Mailbox -Name "kantooragenda@bedrijf.nl" -Alias "kantooragenda" -Shared -primarysmtpaddress "kantooragenda@bedrijf.nl"

Daarna geef je de gewenste gebruikers maximale rechten op deze mailbox. Stel dat de gebruikers met de aliasen ‘henk’ en ‘annie’ toegang moeten krijgen tot deze agenda dan configureer je dit met:


Add-MailboxPermission "kantooragenda" -User "henk" -AccessRights FullAccess
Add-MailboxPermission "kantooragenda" -User "annie" -AccessRights FullAccess

Office 365: Retention policy wijzigen

Retention policy is een hele coole feature in Exchange waarmee je e-mails en complete mappen een retentie periode kan geven. Stel je hebt een project wat nu loopt tot eind deze maand dan zou je er bijvoorbeeld voor kunnen kiezen om de documentatie van dit project over 2 jaar na nu automatisch te laten verwijderen.

Soorten retention tags

Standaard krijgt iedere mail de “Default Policy Tag”, daarnaast zijn er “Retention Policy Tags” die standaard op mappen zoals je inbox, prullenbank etc van toepassing zijn, als laatste zijn er de “Personal Tags” die een gebruiker zelf kan maken. Via de Powershell kun je van diverse tags de eigenschappen instellen. De onderstaande diagram van de Microsoft site geeft wel een aardig beeld van de verschillende tags en hun rol in het gehele plaatje:

Bron: http://technet.microsoft.com/en-us/library/dd297955.aspx

De tags tweaken

Standaard staat bijvoorbeeld de tag voor de prullenbak op iets van 30 dagen. Superleuk voor je hotmail account maar niet voor een productieomgeving in een bedrijf (of in ons bedrijf in iedere geval). Wil je dit wijzigen dan moet je even inloggen op de powershell. Met het volgende commando haal je de huidige tag informatie op:

get-RetentionPolicyTag "deleted items" | fl name,type,AgelimitForRetention,RetentionAction

Als je deze nu bijvoorbeeld wilt wijzigen in 5 jaar dan kun je dit doen met het volgende commando:

set-RetentionPolicyTag "deleted items" -AgeLimitForRetention 1825

De wijzigingen zullen in de loop van de komende uren bij alle gebruikers zichtbaar worden via de Outlook Web Access en de eventuele lokale Office installatie. Dit komt omdat het hele retention policy tag deel in handen is van de “Managed Folder Assistant”. Dit is een mailbox-hulpje die om de zoveel tijd de mailboxen naloopt en alle retention policies naloopt, bijstelt etc.

Op vakantie en nu?

Stel je hebt een policy die redelijk strict is (bijvoorbeeld mails van organisatie X of box Y max 14 dagen bewaren) en je bent een maand op vakantie dan wil je natuurlijk dat deze fanatieke mailboxhulp even rustig blijft en niet mails gaat lopen opruimen voor je. Hierin is gelukkig voorzien al is dit op dit moment niet mogelijk om door de gebruiker zelf in te stellen. Je zult dus als admin zelf via de commandline dit moeten plaatsen.

Set-Mailbox <name> -RetentionHoldEnabled $true

En om hem weer uit te schakelen:

Set-Mailbox <name> -RetentionHoldEnabled $false

Om het nog informatiever voor de gebruiker (en jezelf te houden) kun je ook nog een comment toevoegen aan de retention hold:

Set-Mailbox <name> -RetentionHoldEnabled $true -RetentionComment <comment>

Office 365: Shared mailbox aanmaken via Powershell

Binnen Office 365 zijn twee manieren op gedeelde postvakken aan te maken.

Je maakt er een user-account voor aan met licentie
Deze mailbox heeft, dankzij zijn gebruikersaccount en licentie, dezelfde mogelijkheden als een gewone gebruiker. Denk aan zaken als archief-postvak, 25 GB opslag etc.

Je maakt alleen een gedeelde mailbox aan zonder user en licentie
Deze maak je vanuit de Shell aan en heeft beperkingen omdat er ook niet direct voor betaald wordt. Er is geen gebruiker om mee in te loggen, geen archief-postvak en een max van 5 GB mailboxruimte. Voor de meeste bedrijven zijn deze concessies echter geen probleem en dan heb je in principe geen kosten aan je gedeelde mailbox. Zeker voor kleinere organisaties niet onprettig.

Configuratie shared mailbox via shell

In dit geval ga ik uit van een mailbox zonder licentie maar een mailbox met licentie is niet veel anders. De eerste stap, connectie maken via de powershell, sla ik over. Het stelt eigenlijk niet veel voor. Eerst maken we een nieuwe gedeelde mailbox aan met het commando:

New-Mailbox -Name "info@websitenaam.tld" -Alias info -Shared -primarysmtpaddress "info@websitenaam.tld"

De nieuwe mailbox is nu een feit. Nu willen we bepaalde andere mailboxen rechten geven om deze mailbox te openen, mails te versturen namens etc. Dit doen we met het volgende commando:

Add-MailboxPermission "info" -User "gebruikersalias" -AccessRights FullAccess
Add-RecipientPermission "info" -Trustee "gebruikersalias" -AccessRights SendAs

Note: De parameter -user is trouwens een beetje gemeen want dit kan zowel een individuele gebruiker als een groep zijn dus is een beetje misleidende benaming.

Optioneel kun je bijvoorbeeld ook alleen de rechten geven om te verzenden namens door de -accessRights parameter te veranderen. De volledige lijst met functies krijg je met get-help:

get-help Add-MailboxPermission

of

get-help Add-MailboxPermission -examples

bijvoorbeeld.

Als je nu wilt kijken of de rechten  op de mailbox naar wens zijn kun je dit doen met het volgende commando:

get-mailboxpermission info

En om te kijken of de recipient rechten naar wens zijn:

get-recipientPermission info

Als je trouwens echt alles over een mailbox in 1x wilt zien kun je ook nog het volgende commando uitvoeren (let op! veel informatie zal tot u komen):

get-mailbox info | fl

Office 365 shell gebruiken

Sinds enige tijd bieden wij onze klanten de mogelijkheid Office 365 te configureren en implementeren. Standaard kun je via de Office 365 portal als administrator diverse basisinstellingen doen zoals licenties beheren, gebruikers aanmaken etc. Tevens krijg je vanuit de portal de mogelijkheid naar Outlook Web Access te gaan op admin niveau om vanuit daar bepaalde Exchange configuratiezaken te regelen. Als je echter meer wilt is de exchange shell de plek om te zijn.

Net als in een “normale” exchange installatie biedt de GUI je wat basics maar kun je het snelst en leukst configureren via de shell. In deze post leg ik in het kort uit hoe je hiermee aan de slag gaat voor jouw Office 365 omgeving. Allereerst: Vergeet Office 365 als je op zoek bent naar documentatie en functionaliteiten en zoek naar exchange 2010. Office 365 is namelijk een visuele verzamelplaats en naam voor exchange online (exchange 2010), sharepoint en office web apps.

Connectie maken met je exchange server

Als je op je lokale windows Powershell start krijg je het volgende scherm:

Voer dan het volgende commando in:

$LiveCred = Get-Credential

Waarna je een prompt krijgt om je inloggegevens in te voeren:

Als je ingelogd bent voer je onderstaand command in:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection

He krijgt dan onderstaand scherm te zien:

Als laatste geef je een commando mee om de powershell opdracht te geven alle ingevoerde commando’s aan deze sessie te koppelen:

Import-PSSession $Session

De verbinding is nu gelegd en je kunt via de shell je exchange gaan beheren. Type bijvoorbeeld onderstaande code om een overzicht van alle mailboxen te krijgen inclusief wat simpele statistische data:

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName,StorageLimitStatus,@{name="TotalItemSize (MB)";expression={[math]::Round(($_.TotalItemSize.Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},@{name="TotalDeletedItemSize (MB)";expression={[math]::Round(($_.TotalDeletedItemSize.Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}},ItemCount,DeletedItemCount | Sort "TotalItemSize (MB)" -Descending

 

Mocht je bepaalde “krachtigere” commando’s willen gaan uitvoeren dan kan het nodig zijn om de executionPolicy aan te passen. Dit doe je met onderstaand commando:

set-ExecutionPolicy unrestricted