56
WWW.COLLAB365.EVENTS WWW.COLLAB365.EVENTS Office 365 API & PowerShell : Le meilleur des deux mondes! Sébastien Levert, MVP Office 365 Negotium Technologies

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

Embed Size (px)

Citation preview

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

WWW.COLLAB365.EVENTSWWW.COLLAB365.EVENTS

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

Sébastien Levert, MVP Office 365Negotium Technologies

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

WWW.COLLAB365.EVENTS

Qui est Sébastien Levert ?!

Montreal, Canada negotium.com MVP Office365

Développeur Web @sebastienlevert pimpthecloud.com

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

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

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

Introduction à PowerShell dans Office 365

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

WWW.COLLAB365.EVENTS

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

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

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

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

Utilisation de PowerShell avec SharePoint Online

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

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

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

Se connecter à SharePoint OnlineAvec le SharePoint Online Module

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

WWW.COLLAB365.EVENTS

Obtenir toutes vos collections de sites

Démo

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

WWW.COLLAB365.EVENTS

Obtenir toutes vos collections de sitesGet-SPOSite

Get-SPOSite –Detailed

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

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

Se connecter à SharePoint OnlineAvec les APIs clientes CSOM

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

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

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

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.

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

WWW.COLLAB365.EVENTS

Obtenir les librairies CSOM

Démo

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

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

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

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

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

WWW.COLLAB365.EVENTS

Obtenir toutes les collections de sites

Démo

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

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

}

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

WWW.COLLAB365.EVENTS

Exporter le contenu d’une liste SharePoint

Démo

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

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

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

Se connecter à SharePoint OnlineAvec les commandes PowerShell OfficeDev

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

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

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

WWW.COLLAB365.EVENTS

Ajouter et assigner un thème à un site

Démo

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

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”

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

Se connecter à SharePoint OnlineAvec les APIs REST de SharePoint

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

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 “$”

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

WWW.COLLAB365.EVENTS

Requêter vos items de listes avec OData

Démo

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

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

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

WWW.COLLAB365.EVENTS

Requêtes le Graph avec les API REST

Démo

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

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

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

Utilisation de PowerShell avec les APIs Office 365

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

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

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

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!

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

WWW.COLLAB365.EVENTS

Les basesDémo

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

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

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

WWW.COLLAB365.EVENTS

Obtenir un jeton d’accès

Démo

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

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

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

WWW.COLLAB365.EVENTS

Obtenir le contenu de votre boîte courriel

Demo

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

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

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

WWW.COLLAB365.EVENTS

Envoyer un courriel

Démo

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

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” = “[email protected]” } } ) } $body.SaveToSentItems = $false }

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

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)

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

DevOps avec PowerShell dans Office 365

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

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…

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

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• …

• …

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

WWW.COLLAB365.EVENTS

Exportation d’une configuration de site

Démo

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

WWW.COLLAB365.EVENTS

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

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

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

WWW.COLLAB365.EVENTS

Importation d’une configuration de site

Démo

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

WWW.COLLAB365.EVENTS

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

Apply-SPOProvisioningTemplate –Path C:\template.xml

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

Ressources PowerShell pour Office 365

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

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

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

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

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

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

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

WWW.COLLAB365.EVENTS

Catch me!

Montreal, Canada negotium.com MVP Office365

Développeur Web @sebastienlevert pimpthecloud.com

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

Stay tuned for more great sessions …

WWW.COLLAB365.EVENTS

Thanks for watching!