Azure Office 365

Hoe automatiseer je het beheer van Office 365 Groups?

10 februari 2017

Veel organisaties maken gebruik van Office 365 Groups. Het is de ideale tool om snel een werkplek te creëren waar een team kan samenwerken.
Met het aanmaken van een Group krijg je een werkplek met de volgende onderdelen:

  • Conversaties: een plek waar je als team gesprekken met elkaar kunt voeren;
  • Bestanden: een bibliotheek waarin samengewerkt kan worden aan documenten;
  • Agenda: een gedeelde agenda voor bijvoorbeeld de vergaderingen van het team;
  • Notebook: een OneNote-notitieblok voor aantekeningen;
  • Planner: een tool om taken aan te maken en toe te wijzen aan leden van het team.

Sinds kort krijgt elke groep ook een eigen Team-site, die nog meer mogelijkheden geeft. Hier kunnen teams hun eigen dashboard maken of zelf lijsten aanmaken, waarmee de kracht van een Group wordt gecombineerd met die van een Team-site.

Groups kunnen een krachtig middel zijn voor effectieve samenwerking. In deze blog laat ik zien hoe je het beheer van de Groups goed kunt aanpakken.

Wanneer Office 365 Groups is geactiveerd in de tenant, kun je de rechten om Groups aan te maken geven aan iedereen of alleen aan een beperkte groep. Beide opties hebben een nadeel. In het eerste geval is er totaal geen controle op welke groepen er worden aangemaakt binnen de organisatie en ontstaat er vaak een wildgroei aan groepen. In de tweede situatie is er meer controle op de aangemaakte groepen, maar is de aanvrager wel steeds afhankelijk van het uitvoeren van de actie door de beheerafdeling. Wat als dit proces geautomatiseerd kan worden, waarbij beheer met een simpele goedkeuringsstap een Group automatisch kan laten aanmaken?

Een aandachtspunt bij het gebruik van Groups is het opruimen ervan. Er worden vaak veel groepen aangemaakt, soms voor een kortlopend project of voor het organiseren van een event. Een aantal van deze groepen zou na het project of event opgeruimd kunnen worden. In de praktijk gebeurt dit niet. Om te voorkomen dat inactieve groepen oneindig blijven bestaan en onnodig data in beslag nemen binnen de tenant, is het verstandig om beheer uit te voeren over inactieve groepen.
Op de Office 365-roadmap van Microsoft staat al enige tijd Office 365 Groups: Expiring groups, dat een oplossing moet bieden voor inactieve groepen. Vooralsnog is echter onduidelijk wanneer dit beschikbaar komt en wat deze functionaliteit gaat bieden. Tot die tijd kun je een eigen oplossing inzetten. Daarvoor moeten eerst de inactieve groepen worden geïnventariseerd, waarna bij de eigenaar wordt gecheckt of de Group verwijderd mag worden. Deze oplossing is echter intensief voor beheer en daarom is het goed om dit proces te automatiseren.
Hieronder worden beide scenario’s, ‘Aanmaken Office 365 Group met goedkeuring’ en ‘Opruimen inactieve Office 365 Groups’, verder uitgewerkt.

Scenario 1: Aanmaken Office 365 Group met goedkeuring

Voor het automatisch aanmaken van een Office 365 Group met goedkeuring kan onderstaande flow worden doorlopen:

  1. Een gebruiker kan in een SharePoint-lijst een aanvraag doen voor een Office 365 Group.
  2. Bij het aanmaken van een item wordt automatisch Microsoft Flow gestart, dat een mail verstuurt met een goedkeuringsverzoek naar één of meerdere Office 365-beheerders.
    a. Wanneer een Office 365-beheerder de aanvraag afkeurt, wordt de aanvrager hiervan via e-mail op de hoogte gesteld.
    b. Wanneer een Office 365-beheerder de aanvraag goedkeurt, wordt een Azure Function gestart.
  3. De aangeroepen Azure Function zorgt ervoor dat de Group wordt aangemaakt met behulp van de Microsoft Graph.
  4. Wanneer de Group is aangemaakt, krijgt de eigenaar automatisch een e-mail vanuit Office 365.

Het voordeel van dit scenario is dat er meer controle is op de Office 365 Groups die worden aangemaakt. Daarnaast hoeft een beheerder maar één handeling uit te voeren om de Group aan te maken, namelijk één klik op de ‘Goedkeuren’-knop in de e-mail.

Hieronder ga ik verder in op de gebruikte technieken.

1.1 SharePoint-lijst
Voor het aanvragen van een Office 365 Group is een SharePoint-lijst aangemaakt. Ten behoeve van het Proof of Concept is een aantal eigenschappen van een Office 365 Group meegenomen. In onderstaand formulier kan de gebruiker de naam van de Group, eigenaar, privacy (Private/Public) en een omschrijving opgeven.

1.2 Microsoft Flow

Na het invullen van het formulier wordt Microsoft Flow gestart. Microsoft Flow is vergelijkbaar met IFTTT (If This, Than That), dat al enkele jaren bestaat. Met deze tool kun je dagelijks terugkerende processen eenvoudig automatiseren. Ook kun je hiermee verschillende services aan elkaar koppelen. Flow is Microsofts eigen oplossing hiervoor.
Met Flow kun je ervoor zorgen dat wanneer je iets tweet, dit ook automatisch op Facebook wordt geplaatst. Of je kunt een e-mail laten versturen met daarin informatie over een document wanneer dat wordt geüpload in een bibliotheek.

Zoals onderstaande screenshot laat zien, wordt de Flow gestart wanneer een item wordt aangemaakt in de SharePoint-lijst. Vervolgens wordt er een goedkeuringse-mail verstuurd. Bij goedkeuring wordt een http-request uitgevoerd naar de Azure Function, bij afkeuring een e-mail naar de aanvrager.

 

Vanuit Flow wordt een goedkeuringsverzoek per e-mail gestuurd naar één of meerdere Office 365-beheerders. Wanneer een beheerder op ‘Approve’ of ‘Reject’ klikt, wordt de vervolgactie uitgevoerd.

Goedkeuringsverzoek

Microsoft Flow is gratis beschikbaar, maar daarbij horen slechts 750 ‘uitvoeringen’ per maand. Binnen Business Essentials, Business Premium, E1, E3 en E5 is Microsoft Flow ook opgenomen met daarbij 2000 ‘uitvoeringen’ per maand per gebruiker. Het is mogelijk om extra ‘uitvoeringen’ te kopen.

Voor meer informatie: https://flow.microsoft.com/en-us/pricing/

1.3 Azure Functions
Als de beheerder het verzoek heeft goedgekeurd, wordt een Azure Function gestart. Met Azure Functions kunnen kleine stukken code (functies) worden uitgevoerd. Hiermee kun je zeer snel een klein stukje functionaliteit schrijven, zoals het aanmaken van een Office 365 Group, zonder dat je een complete toepassing of bijbehorende infrastructuur hoeft op te zetten. Azure Functions kun je onder meer schrijven in de talen C#, Node.js, Python en PowerShell.

Voor de Proof of Concept is een Azure Functions gemaakt met Node.js. Met behulp van de OAuth2 Client Credential Flow wordt een App-Only-token opgehaald, om vervolgens met de Microsoft Graph de Office 365 Group aan te maken.

De input van de Azure Function is een http-request die wordt aangeroepen met de onderstaande URL:

https://***.azurewebsites.net/api/O365GroupsHttpTrigger?code=

 

Vervolgens wordt onderstaand stuk functionaliteit uitgevoerd:

var request = require('request');
var Q = require('q');
var http = require('http');
var auth = require('./auth');
var graph = require('./graph');
 
module.exports = function (context, req) {
var client_ID = process.env.CLIENT_ID;
var client_secret = process.env.CLIENT_SECRET;
var token_endpoint = process.env.TOKEN_ENDPOINT;
 
…
if (req.body) {
auth.getAccessToken().then(function (token) {
graph.createGroup(token, req.body, context);
}, function (error) {
context.log('Error getting accessToken: ' + error);
});
}
…
 
context.done();
};

De kosten van Azure Functions worden berekend op basis van uitvoertijd en het aantal uitvoeringen. Per maand wordt een uitvoertijd van 400.000 GB en 1 miljoen uitvoeringen gratis toegekend.

Voor meer informatie: https://azure.microsoft.com/nl-nl/pricing/details/functions/

1.4 Group aangemaakt
Na het aanmaken van de Group wordt de automatische e-mail verstuurd vanuit Office 365.

1.5 PowerApps
Als alternatief voor het invoerformulier binnen SharePoint kun je het aanvragen van een Office 365 Group beschikbaar maken met behulp van PowerApps. Met PowerApps kan een gebruiker zonder één regel code te programmeren een mobiele app maken die beschikbaar is voor zowel IOS, Android, Windows Phone als het web. Deze kan eenvoudig binnen de organisatie worden gedistribueerd.

SCENARIO 2: OPRUIMEN INACTIEVE OFFICE 365 GROUPS

Het tweede scenario betreft het automatisch opruimen van inactieve groepen met goedkeuring. Dit is daarvan een visuele weergave:

  1. Met behulp van Azure Automation wordt een PowerShell-script uitgevoerd dat de inactieve Office 365 Groups verzamelt.
  2. De inactieve Groups worden opgeslagen in een SharePoint-lijst, waarmee er een overzicht is dat ook later kan worden benaderd.
  3. Wanneer een nieuw item wordt aangemaakt of bewerkt in de lijst, wordt Microsoft Flow gestart. Deze verstuurt een goedkeuringsverzoek naar de Group-eigenaar.
    a. Wanneer een Group-eigenaar de aanvraag afkeurt, wordt het SharePoint-item geüpdatet. Het is dan bekend dat de Group nog niet mag worden verwijderd.
    b. Wanneer een Group-eigenaar de aanvraag goedkeurt, wordt een Azure Function aangeroepen.
  4. De aangeroepen Azure Function zorgt ervoor dat de Group wordt verwijderd met behulp van PowerShell. Als Proof of Concept is in dit scenario gebruikgemaakt van Powershell in plaats van bijvoorbeeld Node.js of C#.

2.1 Azure Automation
Met Azure Automation kunnen PowerShell-scripts worden geconfigureerd die doorgaans worden uitgevoerd als ‘Scheduled Task’ op een on-premise server. Azure Automation kan echter ook worden ingezet voor het automatisch opstarten en stoppen van Azure Virtual Machines, zodat er geen onnodige kosten worden gemaakt voor Virtual Machines die zelden worden gebruikt.

Voor het inventariseren van inactieve groepen is een RunBook aangemaakt dat een PowerShell-script uitvoert en bepaalt of een Group inactief is. Dit gebeurt op basis van de volgende criteria:

  1. Zijn er de afgelopen x dagen gesprekken gevoerd;
  2. Zijn er de afgelopen x dagen documenten toegevoegd/gewijzigd;
  3. Zijn er de afgelopen x dagen agenda-items toegevoegd/gewijzigd;
  4. Is OneNote gewijzigd?

Het script houdt op dit moment (nog) geen rekening met Planner-taken. Wanneer een Group inactief is, wordt deze toegevoegd aan de SharePoint-lijst. Als deze al bestaat in de lijst, wordt de status geüpdatet.

De kosten van Azure Automation worden berekend op basis van uitvoertijd per taak. Gratis krijg je 500 minutes per maand.

Voor meer informatie: https://azure.microsoft.com/nl-nl/pricing/details/automation/

2.2/2.3 SharePoint-lijst, Flow, goedkeuringsverzoek
Hierna is het proces grotendeels gelijk aan het eerste scenario. Bij goedkeuring wordt de Azure Function aangeroepen.

2.4 Azure Functions
Voor het tweede scenario binnen de Proof of Concept is gekozen voor PowerShell. Ook deze Function wordt met behulp van een http-trigger gestart. Hieronder zie je een vereenvoudigd voorbeeld van de Azure Function waarmee de Office 365 Group wordt verwijderd:

$requestBody = Get-Content $req -Raw | ConvertFrom-Json
$source = https://***.sharepoint.com</code>
 
$secpasswd = ConvertTo-SecureString $env:SPO_P -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($env:SPO_U, $secpasswd)
 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?proxymethod=rps -Credential $mycreds -Authentication Basic -AllowRedirection
 
Import-PSSession -Session $Session -CommandName Remove-UnifiedGroup -FormatTypeName *
Remove-UnifiedGroup -Identity $($requestBody.groupId) -Confirm:$false
Remove-PSSession $Session

 

CONCLUSIE

Met bovenstaande scenario’s heb ik laten zien dat je door het combineren van componenten in Office 365 met Azure krachtige oplossingen kunt realiseren waarmee je mensen binnen je organisatie ontlast. Het grote voordeel van de uitgewerkte scenario’s in deze blog is dat de beheerder of de Group-eigenaar slechts op één knop hoeft te klikken om de actie uit te voeren. De oplossing verzorgt de rest. Doordat het ook mogelijk is om de Microsoft Graph aan te roepen vanuit een Azure Function, zijn er enorm veel mogelijkheden om hierop toepassingen te bedenken.

Save

Save

Save

You Might Also Like

2 reacties

  • avatar
    Reply Amancio 21 februari 2017 at 23:11

    Hi Ralph, goed en actueel stuk! Nu nog een oplossing voor het toevoegen van beleidsregels. Is dat mogelijk met Azure Functions?

  • avatar
    Reply Ralfh Barten 14 maart 2017 at 14:37

    Hi Amancio, Als de mogelijkheid er is via de MS Graph of Powershell cmdlets, dan is het ook mogelijk vanuit Azure Functions. Heb je een specifiek voorbeeld waar naar je op zoek bent? Toevoegen van een Prefix of van Usage Guideliness?

  • Plaats een reactie