Upload
sebastien-levert
View
1.125
Download
2
Embed Size (px)
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” = “[email protected]” } } ) } $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!