Collab365 - Office 365 API & PowerShell : Le meilleur des deux mondes!

Preview:

Citation preview

WWW.COLLAB365.EVENTSWWW.COLLAB365.EVENTS

Office 365 API & PowerShell : Le meilleur des deux mondes!

Sébastien Levert, MVP Office 365Negotium Technologies

WWW.COLLAB365.EVENTS

Qui est Sébastien Levert ?!

Montreal, Canada negotium.com MVP Office365

Développeur Web @sebastienlevert pimpthecloud.com

WWW.COLLAB365.EVENTS

Agenda• Introduction à PowerShell dans Office 365• Utilisation de PowerShell avec SharePoint Online• Utilisation de PowerShell avec les APIs Office

365• DevOps avec PowerShell dans Office 365

Introduction à PowerShell dans Office 365

WWW.COLLAB365.EVENTS

Pour démarrer• Annoncé à Ignite 2015• http://powershell.office.com• Plusieurs exemples, scénarios, guides, …

WWW.COLLAB365.EVENTS

J’ai besoin de quoi pour débuter ?• Un tenant Office 365 (!)• Des privilèges d’administration sur votre tenant

Office 365• Des privilèges d’administration sur votre

machine locale• Les modules d’administration

• Microsoft Online Services Sign-in Assistant• Azure Active Directory Module• SharePoint Online Module• Skype for Business Online Module

Utilisation de PowerShell avec SharePoint Online

WWW.COLLAB365.EVENTS

Se connecter à SharePoint Online• Avec le SharePoint Online Module• Avec les APIs clientes CSOM• Avec les commandes PowerShell OfficeDev• Avec les APIs REST de SharePoint

Se connecter à SharePoint OnlineAvec le SharePoint Online Module

WWW.COLLAB365.EVENTS

Obtenir toutes vos collections de sites

Démo

WWW.COLLAB365.EVENTS

Obtenir toutes vos collections de sitesGet-SPOSite

Get-SPOSite –Detailed

Get-SPOSite –Detailed –Filter { Url –like “*term*” }

Se connecter à SharePoint OnlineAvec les APIs clientes CSOM

WWW.COLLAB365.EVENTS

Utilisation du CSOM avec PowerShell• Obtenir les librairies CSOM manuellement• Charger manuellement les librairies CSOM dans

votre session PowerShell• Assurez-vous d’avoir les plus récentes librairies

[AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.FullName -like "*SharePoint*” –or $_.FullName –like “*Office*” } | Select FullName

WWW.COLLAB365.EVENTS

Trucs & astuces• N’utilisez pas le SharePoint Online Management

Shell• Importer les modules PowerShell SharePoint

dans une session régulière PowerShell• Charger les librairies CSOM avant de charger le

SharePoint Online Module• Utiliser le Cmdlet de Gary Lapointe’s Load-

CSOMProperties. Tous les jours.

WWW.COLLAB365.EVENTS

Obtenir les librairies CSOM

Démo

WWW.COLLAB365.EVENTS

Utiliser les librairies CSOM

Import-Module C:\Path\PTC.O365.PowerShell.psm1

Get-ClientAssemblies –Version 16 –TargetDirectory C:\assemblies

Add-ClientAssemblies –AssembliesDirectory C:\assemblies

[AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.FullName -like "*SharePoint*” –or $_.FullName –like “*Office*” } | Select FullName

WWW.COLLAB365.EVENTS

Mélanger le CSOM et les Cmdlets SPO• Il est simple de mlanger le CSOM et les Cmdlets

SPO• Utiliser les Cmdlets pour obtenir les collections

de sites• Utiliser le CSOM pour le reste

WWW.COLLAB365.EVENTS

Obtenir toutes les collections de sites

Démo

WWW.COLLAB365.EVENTS

Obtenir tous les sites de chaque collection de sites

Import-Module C:\Path\PTC.O365.PowerShell.psm1Import-Module Microsoft.Online.SharePoint.PowerShellConnect-SPOService –Url https://tenant-admin.sharepoint.com

$credentials = Get-SharePointOnlineCredentials

Get-SPOSite | Where-Object { $_.Template –notlike “*EHS#0” } | ForEach-Object {

$context = Get-Context –Url $_.Url –Credentials $credentialsGet-Webs –Context $context | Select Url

}

WWW.COLLAB365.EVENTS

Exporter le contenu d’une liste SharePoint

Démo

WWW.COLLAB365.EVENTS

Exporter le contenu d’une liste SharePoint

$credentials = Get-SharePointOnlineCredentials$context = Get-Context –Url “https://tenant.sharepoint.com” –Credentials $credentials

$web = Get-Web -Context $context$list = Get-List –Web $web –Title “Tasks”$items = Get-ListContent –List $list -Fields @(“ID”, “Title”, “DueDate”)

$items | Select @{ Name = “ID”; Expression = { $_[“ID”] } }, @{ Name = “Title”; Expression = { $_[“Title”] } }, @{ Name = “DueDate”; Expression = { $_[“DueDate”] } } |

Export-CSV –Path C:\Tasks.csv –NoTypeInformation –Encoding UTF8

Se connecter à SharePoint OnlineAvec les commandes PowerShell OfficeDev

WWW.COLLAB365.EVENTS

Utilisation des PowerShell.Commands• 123 nouveaux Cmdlets livrés par l’équipe

OfficeDev PnP• Série de Cmdlets utilisés pour exécuter du CSOM

simplement sur vos environnements Online et On-Premises

• Utilise le OfficeDevPnP.Core framework• Doit être installé sur votre machine• La vraie puissance de PowerShell avec la

puissance de CSOM à la saveur PnP

WWW.COLLAB365.EVENTS

Ajouter et assigner un thème à un site

Démo

WWW.COLLAB365.EVENTS

Ajouter et assigner un thème à un siteConnect-SPOnline –Url https://tenant.sharepoint.comAdd-SPOFile –Path C:\theme.spcolor –Folder “_catalogs/theme/15”Add-SPOFile –Path C:\image.jpg –Folder “SiteAssets”

Set-SPOTheme ` –ColorPaletteUrl “/_catalogs/theme/15/theme.spcolor ”

`-BackgroundImageUrl “/SiteAssets/image.jpg”

Se connecter à SharePoint OnlineAvec les APIs REST de SharePoint

WWW.COLLAB365.EVENTS

Utilisation de REST avec SharePoint Online• Excellente série d’article par Gary Lapointe• Cmdlet magique fourni Invoke-SPORestMethod • Facilite l’utilisation d’objets “typés” dans vos

scripts PowerShell• Ne jamais oublier de gérer vos caractères “$”

WWW.COLLAB365.EVENTS

Requêter vos items de listes avec OData

Démo

WWW.COLLAB365.EVENTS

Requêter vos items de listes avec OData$url = “https://tenant.sharepoint.com/_api/lists/GetByTitle('Tasks')/items?`$select=Id,Title,DueDate,PercentComplete&`$filter=PercentComplete gt 0.5”

$items = Invoke-SPORestMethod –Url $url

$items.results | Out-GridView

WWW.COLLAB365.EVENTS

Requêtes le Graph avec les API REST

Démo

WWW.COLLAB365.EVENTS

Requêtes le Graph avec les API REST$url = “https://tenant.sharepoint.com/_api/search/query?Querytext=‘*’&Properties='GraphQuery:ACTOR(ME)’&RowLimit=100”

$results = Invoke-SPORestMethod –Url $url

$results = Get-RestSearchResults –Results $results | Out-GridView

Utilisation de PowerShell avec les APIs Office 365

WWW.COLLAB365.EVENTS

APIs Office 365• Série d’APIs livrés pour unifier les APIs des

produits• Bâtis au dessus des applications Azure Active

Directory• Utilise OAuth et les JWT pour chacun des appels• Permet les permissions déléguées et les “App-

Only”• Permet de donner des permissions sur certaines

données• Une fois l’infrastructure en place, très simple à

utiliser

WWW.COLLAB365.EVENTS

APIs Office 365 avec PowerShell1. Créer une application Azure Active Directory2. Créer un certificat local3. Importer le certificat dans la configuration de

votre application Azure Active Directory4. Utiliser le certificat avec son mot de passe

dans votre code PowerShell5. Se connecter à l’API Office 3656. Jouer avec vos données!

WWW.COLLAB365.EVENTS

Les basesDémo

WWW.COLLAB365.EVENTS

Les bases

makecert -r -pe -n "CN=PowerShell Office 365 API Application" -b 1/01/2015 -e 12/31/2016 -ss my -len 2048

$keyCredentials = Get-KeyCredentialsManifest –Path C:\Certificate.cer

WWW.COLLAB365.EVENTS

Obtenir un jeton d’accès

Démo

WWW.COLLAB365.EVENTS

Obtenir un jeton d’accès

$global:AzureADApplicationTenantId = “TENANTID”$global:AzureADApplicationClientId = “APPLICATIONID”$global:AzureADApplicationCertificatePath = “C:\Certificate.pfx”$global:AzureADApplicationCertificatePassword = “Passw0rd”$exchangeResourceUri = “https://outlook.office365.com/”

$token = Get-AccessToken -ResourceUri $exchangeResourceUri

WWW.COLLAB365.EVENTS

Obtenir le contenu de votre boîte courriel

Demo

WWW.COLLAB365.EVENTS

Obtenir le contenu de votre boîte courriel

$url = $exchangeResourceUri + “/api/v1.0/users(‘email’)/folders/inbox/messages?$top=50"$response = Invoke-SecuredRestMethod -Method "GET" -AccessToken $token -EndpointUri $url

$hasMore = $true $messages = @() while($hasMore) { $response = Invoke-SecuredRestMethod -Method "GET" -AccessToken $token-EndpointUri $url $response.value | ForEach-Object { $messages += $_ } $hasMore = $response.'@odata.nextLink' -ne $null $url = $response.'@odata.nextLink’ }

$messages | Select Subject | Out-GridView

WWW.COLLAB365.EVENTS

Envoyer un courriel

Démo

WWW.COLLAB365.EVENTS

Préparation du corps du courriel

$body = @{ “Message” = @{ “Subject” = "This is a test email from PowerShell!” “Body” = @{ “ContentType” = “Text”; “Content” = “This email was sent from PowerShell using the Office 365 API.” } “ToRecipients” = @( @{ “EmailAddress” = @{ “Address” = “slevert@sebastienlevert.com” } } ) } $body.SaveToSentItems = $false }

WWW.COLLAB365.EVENTS

Envoyer un courriel

$url = $exchangeResourceUri + “/api/v1.0/users(‘email’)/sendmail”

$response = Invoke-SecuredRestMethod –Method “POST” -AccessToken $token -EndpointUri $url –Body ($body | ConvertTo-Json $body –Depth 4)

DevOps avec PowerShell dans Office 365

WWW.COLLAB365.EVENTS

Ce que le DevOps signifie pour moi…• Automatiser tout ce qui est possible• S’assurer qu’une configuration peur être

répliquée à tout moment• Gagner un maximum de contrôle sur vos

déploiements• Cesser d’avoir peur de ses usagers…

WWW.COLLAB365.EVENTS

Dans un monde Office 365, ça signifie…• Chacun des artéfact qui est créé doit être scripté

et déployé automatiquement• Usagers• Boîtes courriel• SharePoint

• Sites• Colonnes• Types de contenu• Listes• …

• …

WWW.COLLAB365.EVENTS

Exportation d’une configuration de site

Démo

WWW.COLLAB365.EVENTS

Exportation d’une configuration de siteConnect-SPOnline –Url https://tenant.sharepoint.com

Get-SPOProvisioningTemplate –Out C:\template.xml -PersistComposedLookFiles

WWW.COLLAB365.EVENTS

Importation d’une configuration de site

Démo

WWW.COLLAB365.EVENTS

Import SharePoint site configurationConnect-SPOnline –Url https://tenant.sharepoint.com

Apply-SPOProvisioningTemplate –Path C:\template.xml

Ressources PowerShell pour Office 365

WWW.COLLAB365.EVENTS

Ressources PowerShell pour Office 365• PowerShell for Office 365

• http://powershell.office.com• Microsoft Online Services Sign-In Assistant for IT

Professionals• http://www.microsoft.com/en-us/download/details.aspx?id=41950

• SharePoint Online Management Shell• http://www.microsoft.com/en-us/download/details.aspx?id=35588

• Windows PowerShell Module for Skype for Business Online• http://www.microsoft.com/en-us/download/details.aspx?id=39366

WWW.COLLAB365.EVENTS

PowerShell for Office 365 Resources• Azure Active Directory Module for Windows

PowerShell• http://go.microsoft.com/fwlink/p/?linkid=236298 (32-bit Version)• http://go.microsoft.com/fwlink/p/?linkid=236297 (64-bit Version)

• OfficeDevPnP.PowerShell Commands• https://

github.com/OfficeDev/PnP/tree/master/Solutions/PowerShell.Commands

• PimpTheCloud PowerShell Office 365 Modules• https://github.com/PimpTheCloud/PTC.O365.PowerShell

WWW.COLLAB365.EVENTS

PowerShell for Office 365 Resources• Articles de Gary Lapointe “PowerShell and

SharePoint Online REST”• http://

www.itunity.com/article/sharepoint-rest-service-windows-powershell-1381

• http://www.itunity.com/article/custom-windows-powershell-function-sharepoint-rest-service-calls-1985

• http://www.itunity.com/article/working-lists-list-items-sharepoint-rest-service-windows-powershell-2077

• http://www.itunity.com/article/working-folders-files-sharepoint-rest-service-powershell-2159

WWW.COLLAB365.EVENTS

Catch me!

Montreal, Canada negotium.com MVP Office365

Développeur Web @sebastienlevert pimpthecloud.com

Stay tuned for more great sessions …

WWW.COLLAB365.EVENTS

Thanks for watching!