Who Needs a Developer for Automated SharePoint Provisioning? Eric Overfield Microsoft Regional Director and MVP PixelMill
ERIC OVERFIELD President & Co-Founder of PixelMill Microsoft MVP, Office Servers & Services Microsoft Regional Director Published SharePoint Author SharePoint Community Organizer & Contributor ericoverfield.com @ericoverfield Will make available on blog and twitter (slideshare.net), so if you remember one of those then you can always review everything we discuss
OVERVIEW SharePoint Provisioning Review Introduction to SharePoint PnP Provisioning SharePoint With PnP and PowerShell Tips, Best Practices, and Demos Demos
Sharepoint provisioning DemosFocus here on provisioning SharePoint sites / assets / settings, etc
COMMON SHAREPOINT DEPLOYMENT REQUIREMENTS SharePoint Deployment Components Site columns Content Types List Templates List Instances Master Pages Page Layouts General branding assets (CSS, JS, etc) Content Pages Site Templates Office 365 Groups Auto-Feature Activation Site Configuration Settings Property Bag* Search Setup Demos
TRADITIONAL SHAREPOINT DEVELOPMENT METHODS C# Feature Framework Full Trust – SharePoint 2007 Sandbox – SharePoint 2010 (somewhat deprecated in SPO) Add-ins – SharePoint 2013+ Traditionally required Visual Studio Compiled code often used – not cloud friendly Add-in model clunky for provisioning Demos
FEATURE FRAMEWORK CHALLENGE New features / experiences not available / difficult to transfer without continual on-going maintenance Customized site based on snapshot of existing OOTB site template with Feature provided customization provisioning Custom v16.x Custom V16.x Custom v16.x Copy Customizations Time SharePoint/O365 v16.x.next OOTB SharePoint/O365 v16.x SharePoint/O365 v16.x.1 SP keeps changing, open community on best practices makes sense Feature Framework too rigid For many features, requires full-tust (O365 with cross out) Based on a snapshot of SP Difficult to upgrade and maintain SharePoint Framework Features / enhancement / bug fixes / new experiences released and available to new or existing sites. Deployed automatically
A better way – Sharepoint pnp
SHAREPOINT / OFFICE 365 DEVELOPMENT PATTERNS AND PRACTICES SharePoint PnP – An open source Initiative Originally created by Microsoft and a few others in 2013 Thanks core team – http://aka.ms/OfficeDevPnP Not related to Microsoft’s general Patterns and Practices initiative SharePoint PnP – For SharePoint 2013/2016/O365 – consists of: Code, samples, best practices Videos, tutorials, and a toolset for customization and working with SharePoint All available on github – https://github.com/SharePoint/PnP Patterns & Practices
SHAREPOINT PNP
Sharepoint pnp core components Project source – get the code, resources and contribute https://github.com/SharePoint/PnP Core Component - https://github.com/SharePoint/PnP-Sites-Core Useful to build SharePoint ready console apps PnP PowerShell - https://github.com/sharepoint/pnp-powershell/ JavaScript Core Library - https://github.com/SharePoint/PnP-JS-Core Partner Pack - https://github.com/SharePoint/PnP-Partner-Pack Monthly – Bi-weekly community calls - http://pxml.ly/2mjpckv PnP Core Component C# Examples (Code) Best Practices Documentation It is a give and take, mostly take, but do consider giving
aka.ms/OfficeDevPnP https://aka.ms/OfficeDevPnPVideos https://github.com/OfficeDev/PnP https://github.com/OfficeDev/PnP-Sites-Core https://github.com/OfficeDev/PnP-PowerShell https://github.com/OfficeDev/PnP-Tools https://github.com/OfficeDev/PnP-Guidance https://github.com/OfficeDev/PnP-Transformation https://github.com/OfficeDev/PnP-OfficeAddIns https://github.com/OfficeDev/PnP-Provisioning-Schema https://aka.ms/OfficeDevPnPVideos https://aka.ms/OfficeDevPnPMSDN https://aka.ms/OfficeDevPnPYammer https://docs.com/OfficeDevPnP @OfficeDevPnP https://aka.ms/OfficeDevPnPCall https://aka.ms/OfficeDevPnPPartnerPack
INTRODUCTION TO SHAREPOINT PNP https://github.com/SharePoint/PnP
PNP POWERSHELL AND REMOTE PROVISIONING
Sharepoint pnp core components PnP PowerShell based on a PnP Core Component Remote Provisioning Schema https://github.com/SharePoint/PnP-Provisioning-Schema Together provide a method to repeatedly provision
GETTING STARTED WITH PNP AND POWERSHELL Install PnP PowerShell https://github.com/SharePoint/PnP-PowerShell#installation Windows 10 – Very easy – Open PowerShell SPO: />Install-Module SharePointPnPPowerShellOnline –AllowClobber SP2016: />Install-Module SharePointPnPPowerShell2016 –AllowClobber SP2013: />Install-Module SharePointPnPPowerShell2013 –AllowClobber Have at least PowerShell V3? /> $PSVersionTable.PSVersion /> Invoke-Expression (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/ OfficeDev/PnP-PowerShell/master/Samples/Modules.Install/Install-SharePointPnPPowerShell.ps1')
COMMON PNP POWERSHELL COMMANDS Update PnP PowerShell – remember, monthly updates! Update-Module SharePointPnPPowerShell* Connect to SharePoint Site Connect-PnPOnline -url http://pixelmill-tenant.sharepoint.com/ –Credentials (Get-Credential) Work with SharePoint data once connected, such as: Get-PnPList Get-PnPWeb Apply a provisioning template Apply-PnPProvisioningTemplate -Path template.xml Get detailed help regarding a specific commandlet Get-Help Connect-PnPOnline -Detailed
DEMO: PNP POWERSHELL INTRODUCTION Get-Module SharePointPnPPowerShell* -ListAvailable | Select-Object Name,Version | Sort-Object Version –Descending Install-Module SharePointPnPPowerShellOnline -AllowClobber Update-Module SharePointPnPPowerShell* Get-Command -Module *PnP* Connect-PnPOnline -url https://pixelmill.sharepoint.com/sites/demo-installation –Credentials (Get-Credential) Get-PnPList Get-Help Connect-PnPOnline -Detailed
PNP POWERSHELL USAGE SCENARIOS Connect to a site Connect-PnPOnline -url http://pixelmill-tenant.sharepoint.com/ –Credentials (Get-Credential) Get/set site/web/list/etc settings Get-PnPWeb, Set-PnPWeb, Get-PnPSite, Get-PnPPropertyBag Query data, such as list data, search, etc Get-PnPSearchQuery –Query “product” Create data, such as a list, or a group New-PnPList -Title "Demo Announcements" -Url "DemoAnnouncements" -Template Announcements Connect-PnPMicrosoftGraph –Scopes “Group.ReadWrite.All” “User.Read.All” New-PnPUnifiedGroup -DisplayName “PnP Demo” -Description “PnP Demo Group” -MailNickname “PnPDemo” Provision SharePoint Template Apply-PnPProvisioningTemplate -Path .\template.xml -Handlers Lists, Files, CustomActions Connect-PnPMicrosoftGraph –Scopes “Group.ReadWrite.All” “User.Read.All” New-PnPUnifiedGroup -DisplayName “PnP Demo” -Description “PnP Demo Group” -MailNickname “PnPDemo” Get-PnPUnifiedGroup Remove-PnPUnifiedGroup –Identity “PnP Demo”
PROVISIONING SHAREPOINT WITH PNP POWERSHELL Create a provisioning template – Manually or based on “template” site XML based file based on a schema - https://github.com/SharePoint/PnP-Provisioning-Schema Can export from existing site: /> Get-PnPProvisioningTemplate -Out template.xml https://github.com/SharePoint/PnP-PowerShell/blob/master/Documentation/GetPnPProvisioningTemplate.md Connect to SharePoint Site: Connect-PnPOnline Apply provisioning template Many options and handlers to customize experience without having to rewrite template Apply-PnPProvisioningTemplate -Path template.xml -Handlers Lists, Files https://github.com/SharePoint/PnP-PowerShell/blob/master/Documentation/ApplyPnPProvisioningTemplate.md Create a PowerShell script to standardize for your user cases
https://msdn. microsoft https://msdn.microsoft.com/en-us/pnp_articles/introducing-the-pnp-provisioning-engine https://msdn.microsoft.com/en-us/pnp_articles/introducing-the-pnp-provisioning-engine
PROVISIONING SHAREPOINT WITH PNP POWERSHELL Provisioning templates may be broken up into general tasks Infrastructure (Site Columns, Content Types, Lists) Taxonomy (Terms) Files (Branding assets, master pages, page layouts, CSS, JS, Images, etc) Custom Actions
DEMO: PNP PROVISIONING TEMPLATE https://github.com/SharePoint/PnP-Provisioning-Schema https://github.com/SharePoint/PnP-Provisioning-Schema/tree/master/Samples Look at custom example Connect-PnPOnline -url https://pixelmill.sharepoint.com/sites/demo-pnp-provisioning –Credentials (Get-Credential) Apply-SPOProvisioningTemplate -Path .\templates\Provision.Infrastructure.xml Apply-SPOProvisioningTemplate -Path .\templates\Provision.Data.xml -Handlers Lists Apply-SPOProvisioningTemplate -Path .\templates\Provision.Data.xml -Handlers Files Apply-SPOProvisioningTemplate -Path .\templates\Provision.CustomActions.xml -Parameters @{"InfrastructureSiteUrl"="https://”yourtenant”.sharepoint.com/sites/demo-pnp-provisioning"}
SIMPLE POWERSHELL SCRIPTS FOR REPEATABLE PATTERNS Create installation and uninstall processes Apply-PnPProvisioningTemplate allows for sending in parameters i.e.: -Parameters @{"InfrastructureSiteUrl"=$rootPath} Allow PS Script to accept parameters Script may include logic to provide multiple execution paths for provisioning PnP Provisioning does not include an explicit uninstall / un-apply command Rather use other PnP commands to remove each component as needed /> Set-PnPWeb -SiteLogoUrl "" -AlternateCssUrl “ “ /> Remove-PnPCustomAction -Identity $customAction.Id -Scope Site -Force
DEMO: PNP PROVISIONING WITH SCRIPTS Show Install script .\PnP-Provision.ps1 -TargetWebUrl "https://”yourtenant”.sharepoint.com/sites/demo-pnp-provisioning" .\PnP-Provision-Disable.ps1 -TargetWebUrl "https://”yourtenant”.sharepoint.com/sites/demo-pnp-provisioning"
pnp provisioning limitations PnP is open source Not 100% flushed out – not a “Product” Not supported by Premier Support and other direct support channels Updated often – Good and bad – keep up to date Lively discussions do occur on GitHub project – if you find a bug, report it Or fix issues / feature requests yourself and submit pull requests Custom actions currently not available with Modern UI / Modern Team Sites
PNP PARTNER PACK
PNP PARTNER PACK JUMPSTART YOUR PROJECTS PnP Partner Pack, currently V2 – A PnP Starter Kit A reusable solution that combines aspects of PnP – For Office 365 https://github.com/SharePoint/PnP-Partner-Pack Includes many features Self-service site provisioning, fully configurable Responsive UI package for classic team sites UI widget for JavaScript injection to bypass custom master pages Governance tools – Azure WebJob based remote timer jobs Configurable branding Installation is tricky, but getting better PnP Partner Pack installation video: https://www.youtube.com/watch?v=ezWYorZClTI
DEMO: PNP PARTNER PACK https://github.com/SharePoint/PnP-Partner-Pack https://github.com/SharePoint/PnP-Partner-Pack/blob/master/Documentation/Architecture-and-Implementation.md https://github.com/SharePoint/PnP-Partner-Pack/blob/master/Documentation/Manual-Setup-Guide.md
Contributing to pnp PnP is community driven Everyone – Anyone can contribute Code, documentation, samples, PowerShell updates, fixes All available for contribution A core team does control the flow and submission approval Contributions are reviewed for quality – good for all Get started – Watch the video https://www.youtube.com/watch?v=ELeGFILRFfQ
aka.ms/OfficeDevPnP https://aka.ms/OfficeDevPnPVideos https://github.com/OfficeDev/PnP https://github.com/OfficeDev/PnP-Sites-Core https://github.com/OfficeDev/PnP-PowerShell https://github.com/OfficeDev/PnP-Tools https://github.com/OfficeDev/PnP-Guidance https://github.com/OfficeDev/PnP-Transformation https://github.com/OfficeDev/PnP-OfficeAddIns https://github.com/OfficeDev/PnP-Provisioning-Schema https://aka.ms/OfficeDevPnPVideos https://aka.ms/OfficeDevPnPMSDN https://aka.ms/OfficeDevPnPYammer https://docs.com/OfficeDevPnP @OfficeDevPnP https://aka.ms/OfficeDevPnPCall https://aka.ms/OfficeDevPnPPartnerPack
review SharePoint Provisioning Review Introduction to SharePoint PnP Provisioning SharePoint With PnP and PowerShell Tips, Best Practices, and Demos Demos
resources Demos
https://github.com/SharePoint/PnP SharePoint PnP: https://github.com/SharePoint/PnP PnP PowerShell https://github.com/SharePoint/PnP-PowerShell PnP Partner Pack https://github.com/SharePoint/PnP-Partner-Pack PnP Provisioning Schema https://github.com/SharePoint/PnP-Provisioning-Schema SharePoint PnP PowerShell Command Reference http://ericoverfield.com/sharepoint-pnp-powershell-command-reference/ Participating in SharePoint PnP Initiative http://ericoverfield.com/participating-in-the-sharepoint-office-365-dev-patterns-and-practices-pnp-community-initiative/ Session Source Code https://github.com/eoverfield/SPPnP-Demos
Who Needs a Developer for Automated SharePoint Provisioning? THANK YOU