# Script originally created by Spencer Harbar [harbar.net] # Sources: http://www.harbar.net/articles/sp2010mt1.aspx, http://www.harbar.net/articles/sp2013mt.aspx, http://autospinstaller.codeplex.com # Modified by Roger Haueter [TechTask.com // SharePoint Community Blog] # This script applies to SharePoint Server 2013 Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 # Change here # Settings $databaseAlias = "Set-Your-SQL-Alias" $databaseServer = "servername\instance" $databasePrefix = "Set-Your-Database-Prefix" $configDatabase = "Config" $configDatabaseName = $databasePrefix + "_" + $configDatabase $adminContentDB = "Content_Admin" $adminContentDBName = $databasePrefix + "_" + $adminContentDB $passphrase = "Set-Your-Passphrase" $farmAccountName = "DOMAIN\SP-FarmAdmin" $farmAccount = Get-Credential $farmAccountName $passphrase = (ConvertTo-SecureString $passphrase -AsPlainText -force) # Prepare Server for installation # Disable User Account Control (UAC) Function DisableUAC() { Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system" -Name EnableLUA -Value 0 Write-Host -ForegroundColor White "User Account Control (UAC) disabled" } DisableUAC; # Create SQL Alias, dynamically determine port Function AddSQLAlias() { $serverAliasConnection = "DBMSSOCN,$databaseServer" New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo" -Name $databaseAlias -Value $serverAliasConnection -PropertyType "String" -Force -ErrorAction SilentlyContinue } AddSQLAlias; # Disable Loopback Check and Services Function DisableLoopbackCheck() { $lsaPath = "HKLM:\System\CurrentControlSet\Control\Lsa" $lsaPathValue = Get-ItemProperty -path $lsaPath If (-not ($lsaPathValue.DisableLoopbackCheck -eq "1")) { New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -value "1" -PropertyType dword -Force | Out-Null } Write-Host -ForegroundColor White "Loopback Check disabled" } DisableLoopbackCheck; # Trust Source Path # Source: autospinstaller.codeplex.com Function AddSourcePathToLocalIntranetZone() { # Ensure that if we're running from a UNC path, the host portion is added to the Local Intranet zone so we don't get the "Open File - Security Warning" If ($env:dp0 -like "\\*") { WriteLine $safeHost = ($env:dp0 -split "\\")[2] Write-Host -ForegroundColor White " - Adding `"$safeHost`" to local Intranet security zone..." New-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains" -Name $safeHost -ItemType Leaf -Force | Out-Null New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\$safeHost" -Name "file" -value "1" -PropertyType dword -Force | Out-Null WriteLine } } AddSourcePathToLocalIntranetZone; # Remove IE Enhanced Security # Source: autospinstaller.codeplex.com Function RemoveIEEnhancedSecurity() { Write-Host -ForegroundColor White "Disabling IE Enhanced Security" Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}" -Name isinstalled -Value 0 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}" -Name isinstalled -Value 0 Rundll32 iesetup.dll, IEHardenLMSettings,1,True Rundll32 iesetup.dll, IEHardenUser,1,True Rundll32 iesetup.dll, IEHardenAdmin,1,True If (Test-Path "HKCU:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}") { Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}" } If (Test-Path "HKCU:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}") { Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}" } #This doesn't always exist Remove-ItemProperty "HKCU:\SOFTWARE\Microsoft\Internet Explorer\Main" "First Home Page" -ErrorAction SilentlyContinue } RemoveIEEnhancedSecurity; # Disable Unused Services or set status to Manual # Source: autospinstaller.codeplex.com Function DisableServices() { Write-Host -ForegroundColor White " - Setting services Spooler, AudioSrv and TabletInputService to Manual..." $servicesToSetManual = "Spooler","AudioSrv","TabletInputService" ForEach ($svcName in $servicesToSetManual) { $svc = get-wmiobject win32_service | where-object {$_.Name -eq $svcName} $svcStartMode = $svc.StartMode $svcState = $svc.State If (($svcState -eq "Running") -and ($svcStartMode -eq "Auto")) { Stop-Service -Name $svcName Set-Service -name $svcName -StartupType Manual Write-Host -ForegroundColor White " - Service $svcName is now set to Manual start" } Else { Write-Host -ForegroundColor White " - $svcName is already stopped and set Manual, no action required." } } Write-Host -ForegroundColor White " - Setting unused services WerSvc to Disabled..." $servicesToDisable = "WerSvc" ForEach ($svcName in $servicesToDisable) { $svc = get-wmiobject win32_service | where-object {$_.Name -eq $svcName} $svcStartMode = $svc.StartMode $svcState = $svc.State If (($svcState -eq "Running") -and (($svcStartMode -eq "Auto") -or ($svcStartMode -eq "Manual"))) { Stop-Service -Name $svcName Set-Service -name $svcName -StartupType Disabled Write-Host -ForegroundColor White " - Service $svcName is now stopped and disabled." } Else { Write-Host -ForegroundColor White " - $svcName is already stopped and disabled, no action required." } } Write-Host -ForegroundColor White " - Finished disabling services." } DisableServices; # SharePoint Configuration # will error, but fix the regkey... # we do this to prevent an error if the machine state registry key is not correctly set, # which will prevent the next command from completing. psconfig.exe -cmd upgrade Write-Host "Creating Configuration Database and Central Admin Content Database..." New-SPConfigurationDatabase -DatabaseServer $databaseServer -DatabaseName $configDatabaseName ` -AdministrationContentDatabaseName $adminContentDBName ` -Passphrase $passphrase -FarmCredentials $farmAccount $spfarm = Get-SPFarm -ErrorAction SilentlyContinue -ErrorVariable err if ($spfarm -eq $null -or $err) { throw "Unable to verify farm creation." } Write-Host "ACLing SharePoint Resources..." Initialize-SPResourceSecurity Write-Host "Installing Services ..." Install-SPService Write-Host "Installing Features..." Install-SPFeature -AllExistingFeatures Write-Host "Creating Central Administration..." New-SPCentralAdministration -Port 11111 -WindowsAuthProvider NTLM Write-Host "Installing Help..." Install-SPHelpCollection -All Write-Host "Installing Application Content..." Install-SPApplicationContent Write-Host "Farm Creation Done!" # Change here # App Pools $saAppPoolName = "SharePoint Web Services Default" $saAppPoolUserName = "DOMAIN\SP-ServicesAccount" $waAppPoolName = "SharePoint Content" $waAppPoolUserName = "DOMAIN\SP-WebAppAccount" # Change here # Service Application and DB names $stateName = "State Service Application" $stateDB = "StateService" $stateDBName = $databasePrefix + "_" + $stateDB $usageName = "Usage and Health Data Collection Service Application" $usageDB = "Usage" $usageDBName = $databasePrefix + "_" + $usageDB $subsInstanceName = "SPSubscriptionSettingsServiceInstance" $subsName = "Subscription Settings" $subsDB = "SubscriptionSettings" $subsDBName = $databasePrefix + "_" + $subsDB # Change here # Web App details $WebAppSSL = "False" $hostingMainURL = "http://multitenant.domain.com" $webAppName = "SharePoint Hosting" $contentDB = "Content_Hosting" $contentDBName = $databasePrefix + "_" + $contentDB # Change here # Root Site Collection details $ownerEmail = "sharepoint@domain.com" $ownerAlias = "DOMAIN\SP-SetupAccount" # Create Managed Accounts and Application Pools # Service Apps Write-Host "Please supply the password for the $saAppPoolUserName Account..." $appPoolCred = Get-Credential $saAppPoolUserName $saAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred $saAppPool = New-SPServiceApplicationPool -Name $saAppPoolName -Account $saAppPoolAccount # Web app Write-Host "Please supply the password for the $waAppPoolUserName Account..." $appPoolCred = Get-Credential $waAppPoolUserName $waAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred # Create State Service Application and Proxy Write-Host "Creating $stateName Application and Proxy..." $NewStateDB = New-SPStateServiceDatabase -Name $stateDBName $state = New-SPStateServiceApplication -Name $stateName -Database $NewStateDB New-SPStateServiceApplicationProxy -Name "$stateName Proxy" -ServiceApplication $state -DefaultProxyGroup # Setup the Usage Service App Write-Host "Creating $usageName Application and Proxy..." $serviceInstance = Get-SPUsageService New-SPUsageApplication -Name $usageName -DatabaseName $usageDBName -UsageService $serviceInstance # Setup the Subscription Settings Service Application & Proxy and start the service instance Write-Host "Creating $subsName Application and Proxy..." $subs = New-SPSubscriptionSettingsServiceApplication –ApplicationPool $saAppPool –Name $subsName –DatabaseName $subsDBName $proxy = New-SPSubscriptionSettingsServiceApplicationProxy –ServiceApplication $subs Write-Host "Starting subsInstanceName..." Get-SPServiceInstance | where{$_.GetType().Name -eq $subsInstanceName} | Start-SPServiceInstance # Create a new Web App using Claims (Windows (NTLM)) $authProvider = New-SPAuthenticationProvider if ($WebAppSSL -eq "true") { $webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -URL $hostingMainURL -Port 443 -SecureSocketsLayer -AuthenticationProvider $authProvider -DatabaseName $contentDBName } else { $webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -URL $hostingMainURL -Port 80 -AuthenticationProvider $authProvider -DatabaseName $contentDBName } # Set sensible content db limits Set-SPContentDatabase $contentDBName -MaxSiteCount 50 -WarningSiteCount 30 # we could create more cdbs for the webapp here <# Create Site Collection at root This wont ever be accessed by users It is required in order to enable self service site creation, and good practice to have a SC at the root. We do NOT need to create a site from a template, we are creating an Empty site #> New-SPSite -Url $hostingMainURL -owneralias $ownerAlias -ownerEmail $ownerEmail # Enable Self Service Site Creation -there is no powershell cmdlet for this yet stsadm -o enablessc -url $hostingMainURL # Enable Self Service Site Creation $webApp.SelfServiceSiteCreationEnabled = $true $webApp.RequireContactForSelfServiceSiteCreation = $false $webApp.Update() # Create the required Managed Paths Remove-SPManagedPath "sites" -WebApplication $webApp -Confirm:$false New-SPManagedPath "admin" -HostHeader -Explicit #tenant admin New-SPManagedPath "cthub" -HostHeader -Explicit #content type gallery New-SPManagedPath "mysites" -HostHeader -Explicit #mysite host New-SPManagedPath "mysites/personal" -HostHeader #mysites Write-Host "Initial SAs and Hosting WebApp Done!" # CERTIFICATES # Source: AutoSPInstaller.codeplex.com # Disable Certificate Revocation List checks Function DisableCRLCheck() { Write-Host -ForegroundColor White " - Disabling Certificate Revocation List (CRL) check..." ForEach($bitsize in ("","64")) { $xml = [xml](Get-Content $env:windir\Microsoft.NET\Framework$bitsize\v2.0.50727\CONFIG\Machine.config) If (!$xml.DocumentElement.SelectSingleNode("runtime")) { $runtime = $xml.CreateElement("runtime") $xml.DocumentElement.AppendChild($runtime) | Out-Null } If (!$xml.DocumentElement.SelectSingleNode("runtime/generatePublisherEvidence")) { $gpe = $xml.CreateElement("generatePublisherEvidence") $xml.DocumentElement.SelectSingleNode("runtime").AppendChild($gpe) | Out-Null } $xml.DocumentElement.SelectSingleNode("runtime/generatePublisherEvidence").SetAttribute("enabled","false") | Out-Null $xml.Save("$env:windir\Microsoft.NET\Framework$bitsize\v2.0.50727\CONFIG\Machine.config") } } DisableCRLCheck; Function ImportRootCert() { #Export SharePoint Root Certificate and Import it into Trusted Root Certification Authorities $RootCertPath = "C:\SPRoot.cer" $RootCert = (Get-SPCertificateAuthority).RootCertificate $RootCert.Export("Cer") | Set-Content $RootCertPath –Encoding Byte # Source: http://jorgequestforknowledge.wordpress.com/2012/02/10/managing-certificates-on-a-windows-computer-with-powershell/ $CertToImport = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $RootCertPath $CertStoreScope = "LocalMachine" $CertStoreName = "Root" $CertStore = New-Object System.Security.Cryptography.X509Certificates.X509Store $CertStoreName, $CertStoreScope $CertStore.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) $CertStore.Add($CertToImport) $CertStore.Close() Write-Host -ForegroundColor White "SharePoint Root Certificate imported" } ImportRootCert; # SERVICE APPLICATIONS # Change here # app pool $saAppPoolName = "SharePoint Web Services Default" $appPoolUserName = "DOMAIN\SP-ServicesAccount" # Gets app pool or quits Write-Host "Getting Application Pool..." $saAppPool = Get-SPServiceApplicationPool -Identity $saAppPoolName -EA 0 if($saAppPool -eq $null) { Write-Host "Cannot find the Application Pool $appPoolName, please ensure it exists before continuing." Exit -1 } # App Management Specifics $appsInstanceName = "AppManagementServiceInstance" $appsName = "App Management Service" $appsDB = "AppManagement" $appsDBName = $databasePrefix + "_" + $appsDB # Grab the Appplication Pool for Service Application Endpoint $saAppPool = Get-SPServiceApplicationPool $saAppPoolName # Setup the App Management Service Application & Proxy and start the service instance Write-Host "Creating $appsName Application and Proxy..." Get-SPServiceInstance | where{$_.GetType().Name -eq $appsInstanceName} | Start-SPServiceInstance $appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $saAppPool -Name $appsName -DatabaseName $appsDBName $proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc -Name "$appsName Proxy" Write-Host "App Management Done!" # App Pools $saAppPoolName = "SharePoint Web Services Default" # MMS specifics $tsInstanceName = "Machine Translation Service" $tsName = "Translation Service Application" $tsDB = "Translation" $tsDBName = $databasePrefix + "_" + $tsDB # Grab the Appplication Pool for Service Application Endpoint $saAppPool = Get-SPServiceApplicationPool $saAppPoolName # Sets up Machine Translation service instance & service app and proxy Write-Host "Starting the $tsInstanceName..." Get-SPServiceInstance | ? {$_.GetType().Name -eq $tsInstanceName} | Start-SPServiceInstance Write-Host "Creating $tsName Application & proxy..." $ts = New-SPTranslationServiceApplication -PartitionMode -Name $tsName -ApplicationPool $saAppPoolName -DatabaseName $tsDBName Get-SPServiceApplicationProxy | ? {$_.TypeName -eq "Machine Translation Service Proxy"} | Remove-SPServiceApplicationProxy -Confirm:$false $proxy = New-SPTranslationServiceApplicationProxy -PartitionMode -Name "$tsName Proxy" -ServiceApplication $ts -DefaultProxyGroup Write-Host "MTS Done!" # MMS specifics $mmsInstanceName = "MetadataWebServiceInstance" $mmsName = "Managed Metadata Service Application" $mmsDB = "Metadata" $mmsDBName = $databasePrefix + "_" + $mmsDB # Sets up Managed Metadata service instance & service app and proxy Write-Host "Creating $mmsName Application & proxy..." $mms = New-SPMetadataServiceApplication -PartitionMode -Name $mmsName -ApplicationPool $saAppPoolName -DatabaseName $mmsDBName $proxy = New-SPMetadataServiceApplicationProxy -PartitionMode -Name "$mmsName Proxy" -ServiceApplication $mms -DefaultProxyGroup Write-Host "Starting the $mmsInstanceName..." Get-SPServiceInstance | where{$_.GetType().Name -eq $mmsInstanceName} | Start-SPServiceInstance Write-Host "MMS Done!" # BDC specifics $bdcInstanceName = "Business Data Connectivity Service" $bdcName = "Business Data Connectivity Service Application" $bdcDB = "BDC" $bdcDBName = $databasePrefix + "_" + $bdcDB # Sets up Business Data Connectivity Service Application and Proxy and Service Instance Write-Host "Creating $bdcInstanceName Application and Proxy..." $bdc = New-SPBusinessDataCatalogServiceApplication -PartitionMode -Name $bdcName -ApplicationPool $saAppPoolName -DatabaseName $bdcDBName Write-Host "Starting the $bdcInstanceName Instance..." Get-SPServiceInstance | where-object {$_.TypeName -eq $bdcInstanceName} | Start-SPServiceInstance Write-Host "BDC Done!" # SSS Specifics $sssInstanceName = "Secure Store Service" $sssName = "Secure Store Service Application" $sssDB = "SecureStore" $sssDBName = $databasePrefix + "_" + $sssDB # Sets up Secure Store Service Application & Proxy and Service Instance Write-Host "Creating $sssName Application & Proxy..." $sss = New-SPSecureStoreServiceApplication -PartitionMode -Name $sssName -ApplicationPool $saAppPoolName -DatabaseName $sssDBName -auditingEnabled:$true -auditlogmaxsize 30 -Sharing:$false $proxy = New-SPSecureStoreServiceApplicationProxy -Name "$sssName Proxy" -ServiceApplication $sss -DefaultProxyGroup Write-Host "Starting the $sssInstanceName Instance..." $sssInstance = Get-SPServiceInstance | where-object{$_.TypeName -eq $sssInstanceName} | Start-SPServiceInstance Write-Host "SSS Done!" # WAS specifics $wasInstanceName = "Word Automation Services" $wasName = "Word Automation Service Application" $wasDB = "WordAutomation" $wasDBName = $databasePrefix + "_" + $wasDB # Sets up Word Automation Service Application and Proxy and Service Instance Write-Host "Creating $wasName Application & Proxy..." $was = New-SPWordConversionServiceApplication -PartitionMode -Name $wasName -ApplicationPool $saAppPool -DatabaseName $wasDBName -Default Write-Host "Starting the $wasInstanceName Instance..." Get-SPServiceInstance | where-object {$_.TypeName -eq $wasInstanceName} | Start-SPServiceInstance Write-Host "WAS Done!" # Wait 15 seconds... Start-Sleep -s 15 # App Pool $saAppPoolName = "SharePoint Web Services Default" # Change here # Search Specifics, we are single server farm $searchServerName = "localhost" $serviceAppName = "Search Service Application" $searchDB = "Search" $searchDBName = $databasePrefix + "_" + $searchDB $defaultContentAccess = "DOMAIN\SP-ContentAccessAccount" $defaultContentAccessPW = "password" # Grab the Appplication Pool for Service Application Endpoint $saAppPool = Get-SPServiceApplicationPool $saAppPoolName # Start Search Service Instances Write-Host "Starting Search Service Instances..." Start-SPEnterpriseSearchServiceInstance $searchServerName Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $searchServerName # Create the Search Service Application and Proxy Write-Host "Creating Search Service Application and Proxy..." $searchServiceApp = New-SPEnterpriseSearchServiceApplication -Partitioned -Name $serviceAppName -ApplicationPool $saAppPoolName -DatabaseName $searchDBName $searchProxy = New-SPEnterpriseSearchServiceApplicationProxy -Partitioned -Name "$serviceAppName Proxy" -SearchApplication $searchServiceApp # Clone the default Topology (which is empty) and create a new one and then activate it Write-Host "Configuring Search Component Topology..." $clone = $searchServiceApp.ActiveTopology.Clone() $searchServiceInstance = Get-SPEnterpriseSearchServiceInstance New-SPEnterpriseSearchAdminComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance New-SPEnterpriseSearchContentProcessingComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance New-SPEnterpriseSearchAnalyticsProcessingComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance New-SPEnterpriseSearchCrawlComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance New-SPEnterpriseSearchIndexComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance New-SPEnterpriseSearchQueryProcessingComponent –SearchTopology $clone -SearchServiceInstance $searchServiceInstance $clone.Activate() # Change default content access account $defaultContentAccessCred = New-Object System.Management.Automation.PSCredential $defaultContentAccess,(ConvertTo-SecureString $defaultContentAccessPW -AsPlainText -Force) Set-SPEnterpriseSearchServiceApplication -Identity $serviceAppName -DefaultContentAccessAccountName $defaultContentAccessCred.UserName -DefaultContentAccessAccountPassword $defaultContentAccessCred.Password Write-Host "Search Done!" # UPA specifics $upaInstanceName = "User Profile Service" $upsInstanceName = "User Profile Synchronization Service" $upaName = "User Profile Service Application" $ScriptFile = ".\CreateUPA.ps1" # Change here # Configure FIM Services $FIMservice = gwmi win32_service -filter "name='FIMService'" $FIMservice.change($null,$null,$null,$null,$null,$null,$farmAccountName,"password") # Change here $FIMSservice = gwmi win32_service -filter "name='FIMSynchronizationService'" $FIMSservice.change($null,$null,$null,$null,$null,$null,$farmAccountName,"password") Set-Service -Name FIMService -StartupType Automatic Set-Service -Name FIMSynchronizationService -StartupType Automatic # Get the Farm Account Creds $farmAcct = (Get-SPFarm).DefaultServiceAccount $cred = Get-Credential $farmAcct.Name # Create a new process with UAC elevation Start-Process $PSHOME\powershell.exe -Credential $cred -ArgumentList "-Command Start-Process $PSHOME\powershell.exe -ArgumentList `"'$scriptfile'`" -Verb Runas" -Wait # Wait 60 seconds (quick fix for Set-Your-Database-Prefix because the "wait" command doesn't work as expected) Start-Sleep -s 60 # Change here # 2nd part # App Pools $saAppPoolName = "SharePoint Web Services Default" # Change here # we need these to start the UPS Service Instance $farmAccount = "DOMAIN\SP-FarmAdmin" $farmPassword = "password" # Grab the Appplication Pool for Service Application Endpoint $saAppPool = Get-SPServiceApplicationPool $saAppPoolName # ALL NEW # Start User Profile Service in SharePoint Services Get-SPServiceInstance | Where-Object { $_.typename -eq "User Profile Service" } | Start-SPServiceInstance # Change here $portalAppPoolAcct = "DOMAIN\SP-WebAppAccount" $mySiteAppPoolAcct = "DOMAIN\SP-MySiteWebAppAccount" $contentAccessAcct = "DOMAIN\SP-ContentAccessAccount" $userProfileServiceName = "User Profile Service Application" $profileServiceApp = Get-SPServiceApplication |?{$_.DisplayName -eq $userProfileServiceName} Write-Host -ForegroundColor White " - Granting rights to $userProfileServiceName..." # Create a variable that contains the guid for the User Profile service for which you want to delegate permissions $serviceAppIDToSecure = Get-SPServiceApplication $($profileServiceApp.Id) # Create a variable that contains the list of administrators for the service application $profileServiceAppSecurity = Get-SPServiceApplicationSecurity $serviceAppIDToSecure -Admin # Create a variable that contains the permissions for the service application $profileServiceAppPermissions = Get-SPServiceApplicationSecurity $serviceAppIDToSecure # Create variables that contains the claims principals for current (Setup) user, MySite App Pool, Portal App Pool and Content Access accounts $currentUserAcctPrincipal = New-SPClaimsPrincipal -Identity $env:USERDOMAIN\$env:USERNAME -IdentityType WindowsSamAccountName If ($mySiteAppPoolAcct) {$mySiteAppPoolAcctPrincipal = New-SPClaimsPrincipal -Identity $mySiteAppPoolAcct -IdentityType WindowsSamAccountName} If ($portalAppPoolAcct) {$portalAppPoolAcctPrincipal = New-SPClaimsPrincipal -Identity $portalAppPoolAcct -IdentityType WindowsSamAccountName} If ($contentAccessAcct) {$contentAccessAcctPrincipal = New-SPClaimsPrincipal -Identity $contentAccessAcct -IdentityType WindowsSamAccountName} # Give 'Full Control' permissions to the current (Setup) user, MySite App Pool and Portal App Pool account claims principals Grant-SPObjectSecurity $profileServiceAppSecurity -Principal $currentUserAcctPrincipal -Rights "Full Control" Grant-SPObjectSecurity $profileServiceAppPermissions -Principal $currentUserAcctPrincipal -Rights "Full Control" If ($mySiteAppPoolAcct) {Grant-SPObjectSecurity $profileServiceAppSecurity -Principal $mySiteAppPoolAcctPrincipal -Rights "Full Control"} If ($portalAppPoolAcct) {Grant-SPObjectSecurity $profileServiceAppSecurity -Principal $portalAppPoolAcctPrincipal -Rights "Full Control"} # Give 'Retrieve People Data for Search Crawlers' permissions to the Content Access claims principal If ($contentAccessAcct) {Grant-SPObjectSecurity $profileServiceAppSecurity -Principal $contentAccessAcctPrincipal -Rights "Retrieve People Data for Search Crawlers"} # Apply the changes to the User Profile service application Set-SPServiceApplicationSecurity $serviceAppIDToSecure -objectSecurity $profileServiceAppSecurity -Admin Set-SPServiceApplicationSecurity $serviceAppIDToSecure -objectSecurity $profileServiceAppPermissions Write-Host "Restarting SPTimerV4..." restart-service SPTimerV4 Write-Host "Starting the $upsInstanceName Instance..." $upa = Get-SPServiceApplication | where-object {$_.Name -eq $upaName} Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName} | % { $_.Status = [Microsoft.SharePoint.Administration.SPObjectStatus]::Provisioning $_.IsProvisioned = $false $_.UserProfileApplicationGuid = $upa.Id $_.Update() $upa.SetSynchronizationMachine($_.Server.Address, $_.Id, $farmAccount, $farmPassword) # this causes update conflicts Start-SPServiceInstance $_ } Write-Host "Waiting on $upsInstanceName to provision..." Write-Host "Baseline time is 600 seconds" [int]$time = 0 $ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName} while(-not ($ups.Status -eq "Online")){ sleep 10; Write-Host "Still waiting... ($time seconds elapsed)" $ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName} $time = $time + 10 } $time = $time - 10 Write-Host "$upsInstanceName provisioned, it took $time seconds, resetting IIS..." iisreset Write-Host "UPS Done!" Write-Host "Don't forget to remove the Farm Account from local admins!" # FEATURE PACKS #validate pre-reqs $app = Get-SPServiceApplication |? {$_.TypeName -eq "Microsoft SharePoint Foundation Subscription Settings Service Application"} if($app -eq $null){ "Settings Service Application must already exist" exit; } #Create an alias for Add-SPSiteSubscriptionFeaturePackMember Set-Alias AddFeature Add-SPSiteSubscriptionFeaturePackMember #SharePoint Foundation Feature Pack $ffp = New-SPSiteSubscriptionFeaturePack AddFeature -identity $ffp -FeatureDefinition AccessRequests -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AdminLinks -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AdminReportCore -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AdminReportCorePushdown -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AnnouncementsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AppLockdown -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AppRegistration -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AppRequestsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AutohostedAppLicensing -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition AutohostedAppLicensingStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition BasicWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition BcsEvents -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition BlogContent -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition BlogHomePage -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition BlogSiteTemplate -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CallTrackList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CirculationList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ContactsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ContentLightup -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ContentTypeSettings -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CorporateCatalog -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CorporateCuratedGallerySettings -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CTypes -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition CustomList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition DataSourceLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition Developer -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition DiscussionsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition DocumentLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition DownloadFromOfficeDotCom -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition EmailTemplates -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition EnableAppSideLoading -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition EventsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ExcelServerEdit -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ExternalList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ExternalSubscription -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition FacilityList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition FCGroupsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition Fields -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GanttTasksList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GBWProvision -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GBWWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GettingStarted -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GettingStartedWithAppCatalogSite -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GridList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition GroupWork -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition HelpLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition HierarchyTasksList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition HolidaysList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition IfeDependentApps -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition IMEDicList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition IssuesList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition IssueTrackingWorkflow -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition LinksList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MaintenanceLogs -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MBrowserRedirect -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MBrowserRedirectStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MDSFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MobilityRedirect -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MonitoredApps -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition MpsWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition NoCodeWorkflowLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ObaProfilePages -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ObaProfilePagesTenantStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ObaSimpleSolution -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ObaStaple -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OfficeExtensionCatalog -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OfficeWebApps -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OnenoteServerViewing -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OpenInClient -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSearchBasicFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSearchCentralAdminLinks -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSearchEnhancedFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSearchHealthReportsPushdown -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSearchPortalAdminLinks -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OsrvLinks -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OssNavigation -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSSSearchEndUserHelpFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlSiteFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition PhonePNSubscriber -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition PictureLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition PremiumSearchVerticals -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition PromotedLinksList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ReportAndDataSearch -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ScheduleList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchAdminWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchCenterFiles -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteFiles -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteUpgrade -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchCenterUpgrade -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchConfigContentType -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchConfigFields -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchConfigList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchConfigListTemplate -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchConfigTenantStapler -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchMaster -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchServerWizardFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebPartsHtml -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchWebParts -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SearchWebPartsStapler -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SharedServices -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ShareWithEveryone -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition ShareWithEveryoneStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteAssets -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteHelp -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteNotebook -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteSettings -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteStatusBar -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SiteUpgrade -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SPAppAnalyticsUploaderJob -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SPSearchFeature -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SSSvcAdmin -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition SurveysList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TasksList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TeamCollab -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantAdminBDC -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantAdminBDCStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantAdminLinks -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantAdminSecureStore -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantAdminSecureStoreStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantSearchAdmin -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TenantSearchAdminStapling -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition TimeCardList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WebPageLibrary -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WhatsNewList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WhereaboutsList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WikiPageHomePage -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WikiWelcome -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WordServerViewing -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition WorkflowHistoryList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition workflowProcessList -ea SilentlyContinue AddFeature -identity $ffp -FeatureDefinition XmlFormLibrary -ea SilentlyContinue #SharePoint Server Feature Pack $sfp = New-SPSiteSubscriptionFeaturePack AddFeature -identity $sfp -FeatureDefinition AbuseReportsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccessRequests -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvMSysAso -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvRestrictedList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvShell -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvSolutionGallery -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvSolutionGalleryStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvUserTemplate -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSrvUSysAppLog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSvcAddAccessApp -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSvcAddAccessAppStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSvcApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AccSvcShell -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AddDashboard -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AdminReportCore -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AdminReportCorePushdown -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AnnouncementsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AppLockdown -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AppRegistration -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AppRequestsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AssetLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AutohostedAppLicensing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition AutohostedAppLicensingStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BaseSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BaseSiteStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BaseWeb -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BaseWebApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BasicWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BcsEvents -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BDR -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterDashboardsLib -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterDataConnections -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterDataconnectionsLib -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterDataConnectionsListInstance -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterFeatureStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterPPSContentPages -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterPPSNavigationLink -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterPPSWorkspaceListInstance -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BICenterSampleData -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BizAppsCTypes -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BizAppsFields -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BizAppsListTemplates -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BizAppsSiteTemplates -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BlogContent -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BlogHomePage -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BlogSiteTemplate -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BulkWorkflow -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition BulkWorkflowTimerJob -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CallTrackList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CategoriesList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CirculationList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CmisProducer -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CollaborationMailbox -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CollaborationMailboxFarm -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CommunityPortal -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CommunitySite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContactsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentDeploymentSource -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentFollowing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentFollowingList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentFollowingStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentLightup -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentTypeHub -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentTypePublish -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentTypeSettings -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ContentTypeSyndication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CorporateCatalog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CorporateCuratedGallerySettings -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CrossFarmSitePermissions -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CrossSiteCollectionPublishing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CTypes -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition CustomList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DataConnectionLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DataConnectionLibraryStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DataSourceLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DeploymentLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Developer -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DiscussionsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DMContentTypeSettings -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocId -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition docmarketplace -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition docmarketplacesafecontrols -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition docmarketplacesampledata -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocumentLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocumentManagement -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocumentRouting -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocumentRoutingResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DocumentSet -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition DownloadFromOfficeDotCom -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EDiscoveryCaseResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EDiscoveryConsole -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduAdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduAdminPages -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduCommunity -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduCommunityCustomSiteActions -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduCommunitySite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduCourseCommunity -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduCourseCommunitySite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduDashboard -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduFarmWebApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduInstitutionAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduInstitutionSiteCollection -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduMembershipUI -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduMySiteCommunity -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduMySiteHost -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduSearchDisplayTemplates -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduShared -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduStudyGroupCommunity -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduUserCache -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EduWebApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EMailRouting -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EmailTemplates -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EnableAppSideLoading -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EnhancedHtmlEditing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EnhancedTheming -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EnterpriseWiki -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EnterpriseWikiLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition EventsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExcelServer -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExcelServerEdit -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExcelServerSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExcelServerWebPart -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExcelServerWebPartStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExchangeSync -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExchangeSyncSiteSubscription -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExpirationWorkflow -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExternalList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ExternalSubscription -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FacilityList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FastCentralAdminHelpCollection -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FastEndUserHelpCollection -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FCGroupsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FeaturePushdown -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Fields -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition FollowingContent -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GanttTasksList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GBWProvision -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GBWWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GettingStarted -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GettingStartedWithAppCatalogSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GlobalWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GridList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition GroupWork -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition HelpLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition HierarchyTasksList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Hold -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition HolidaysList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition HtmlDesign -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IfeDependentApps -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IMEDicList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition InPlaceRecords -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ipfsAdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IPFSAdminWeb -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IPFSSiteFeatures -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IPFSTenantFormsConfig -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IPFSTenantWebProxyConfig -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IPFSWebFeatures -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IssuesList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition IssueTrackingWorkflow -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ItemFormRecommendations -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LegacyDocumentLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LegacyWorkflows -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LinksList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ListTargeting -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LocalSiteDirectoryControl -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LocalSiteDirectoryMetaData -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LocalSiteDirectorySettingsLink -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition LocationBasedPolicy -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MaintenanceLogs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ManageUserProfileServiceApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MasterSiteDirectoryControl -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MBrowserRedirect -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MBrowserRedirectStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MDSFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MediaWebPart -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MembershipList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MetaDataNav -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MobileEwaFarm -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MobileExcelWebAccess -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MobilityRedirect -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MonitoredApps -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MonitoredAppsUI -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MossChart -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MpsWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MruDocsWebPart -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteBlog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteCleanup -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteDocumentLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteHost -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteHostPictureLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteInstantiationQueues -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteMaster -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteMicroBlog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteMicroBlogCtrl -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteNavigation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySitePersonalSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteQuickLaunch -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteSocialDeployment -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteStorageDeployment -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteUnifiedNavigation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MySiteUnifiedQuickLaunch -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MyTasksDashboard -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MyTasksDashboardCustomRedirect -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition MyTasksDashboardStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Navigation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition NavigationProperties -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition NoCodeWorkflowLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ObaProfilePages -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ObaProfilePagesTenantStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ObaSimpleSolution -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ObaStaple -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OfficeExtensionCatalog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OfficeWebApps -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OffWFCommon -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OnenoteServerViewing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OpenInClient -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OrganizationsClaimHierarchyProvider -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSearchBasicFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSearchCentralAdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSearchEnhancedFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSearchHealthReportsPushdown -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSearchPortalAdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OsrvLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OssNavigation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSSSearchEndUserHelpFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSSSearchSearchCenterUrlFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition OSSSearchSearchCenterUrlSiteFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PageConverters -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PersonalizationSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PhonePNSubscriber -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PictureLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PortalLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSDatasourceLib -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSMonDatasourceCtype -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSRibbon -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSSiteCollectionMaster -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSSiteMaster -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSSiteStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSWorkspaceCtype -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PPSWorkspaceList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PremiumSearchVerticals -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PremiumSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PremiumSiteStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PremiumWeb -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PremiumWebApplication -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Preservation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProductCatalogListTemplate -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProductCatalogResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProfileSynch -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProjectBasedPolicy -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProjectDiscovery -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ProjectFunctionality -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PromotedLinksList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Publishing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingMobile -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingPrerequisites -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingTimerJobs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition PublishingWeb -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition QueryBasedPreservation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Ratings -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RecordResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RecordsCenter -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RecordsManagement -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RecordsManagementTenantAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RecordsManagementTenantAdminStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RedirectPageContentTypeBinding -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RelatedLinksScopeSettingsLink -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportAndDataSearch -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportCenterSampleData -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Reporting -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportListTemplate -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportsAndDataCTypes -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportsAndDataFields -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReportsAndDataListTemplates -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReviewPublishingSPD -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReviewPublishingSPD1033 -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReviewWorkflows -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReviewWorkflowsSPD -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ReviewWorkflowsSPD1033 -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RollupPageLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition RollupPages -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ScheduleList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchAdminWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchAndProcess -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchCenterFiles -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchCenterLiteFiles -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchCenterLiteUpgrade -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchCenterUpgrade -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchConfigContentType -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchConfigFields -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchConfigList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchConfigListTemplate -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchConfigTenantStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchDrivenContent -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchEngineOptimization -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchExtensions -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchMaster -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchServerWizardFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchTaxonomyRefinementWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchTaxonomyRefinementWebPartsHtml -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchTemplatesandResources -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchWebParts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SearchWebPartsStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SharedServices -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ShareWithEveryone -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ShareWithEveryoneStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SignaturesWorkflow -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SignaturesWorkflowSPD -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SignaturesWorkflowSPD1033 -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteAssets -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteFeed -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteFeedController -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteFeedStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteHelp -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteNotebook -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteServicesAddins -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteSettings -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SitesList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteStatusBar -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SiteUpgrade -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SkuUpgradeLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SlideLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SlideLibraryActivation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SmallBusinessWebsite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SocialDataStore -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SocialRibbonControl -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SocialSite -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SPAppAnalyticsUploaderJob -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SpellChecking -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SPSBlog -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SPSBlogStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SPSDisco -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SPSearchFeature -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SRPProfileAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SSSvcAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition StapledWorkflows -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition SurveysList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaskListNewsFeed -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TasksList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaxonomyFeatureStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaxonomyFieldAdded -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaxonomyTenantAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaxonomyTenantAdminStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TaxonomyTimerJobs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TeamCollab -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TemplateDiscovery -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminBDC -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminBDCStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminDeploymentLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminSecureStore -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantAdminSecureStoreStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantProfileAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantProfileAdminStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantSearchAdmin -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TenantSearchAdminStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TimeCardList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TopicPageLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TopicPages -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Translation -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TranslationTimerJobs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TranslationWorkflow -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TransMgmtFunc -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition TransMgmtLib -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition UPAClaimProvider -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition UpgradeOnlyFile -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition UserMigrator -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition UserProfileUserSettingsProvider -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition V2VPublishedLinks -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition V2VPublishingLayouts -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VideoAndRichMedia -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition ViewFormPagesLockDown -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioProcessRepository -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioProcessRepositoryContentTypes -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioProcessRepositoryContentTypesUs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioProcessRepositoryFeatureStapling -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioProcessRepositoryUs -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioServer -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition VisioWebAccess -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WAWhatsPopularWebPart -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WebPageLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WebPartAdderGroups -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WhatsNewList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WhereaboutsList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WikiPageHomePage -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WikiWelcome -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WordServerViewing -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WorkflowAppOnlyPolicyManager -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WorkflowHistoryList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition workflowProcessList -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition Workflows -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WorkflowServiceStapler -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WorkflowServiceStore -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition WorkflowTask -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition XmlFormLibrary -ea SilentlyContinue AddFeature -identity $sfp -FeatureDefinition XmlSitemap -ea SilentlyContinue $out = "SharePointFoundationFeatures = "+$ffp.ID $out = $out + "SharePointServerFeatures = "+$sfp.ID $out | out-File "FeaturePacks.txt" # Change here # farm details - update to reflect environment $hostingMainURL = "http://multitenant.domain.com" $upaProxyName = "User Profile Service Application Proxy" $mmsProxyName = "Managed Metadata Service Application Proxy" # feature packs - update after creating them $foundationFeatures = $ffp.ID $enterpriseFeatures = $sfp.ID Write-Host "Resetting IIS..." iisreset function ProvisionTenant($customerName, $customerTenantAdmin, $customerTenantAdminEmail, $customerFeatures, $hostingMainURL, $upaProxyName, $mmsProxyName, $foundationFeatures) { Write-Host "Provisioning Tenant..." Write-Host "Name: $customerName" Write-Host "Admin: $customerTenantAdmin" Write-Host "Email: $customerTenantAdminEmail" Write-Host "Features: $customerFeatures" Write-Host "Foundation: $foundationFeatures" # grab the web app $webApp = Get-SPWebApplication $hostingMainURL # create new Site Subscription Write-Host "Creating Site Subcription..." $sub = New-SPSiteSubscription # Change here # assign feature pack and configure the OU to use in the People Picker for the Subscription Write-Host "Assiging Feature Pack and configuring People Picker..." Set-SPSiteSubscriptionConfig –id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Tenants,DC=domain,DC=com" # Change here # create the "main" member site (we need a site at the root to use Host Headers and Managed Paths in the following cmdlets) Write-Host "Creating Member Site..." New-SPSite -url "http://sp.$customerName.domain.com" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 # Change here # create Tenant Admin site Write-Host "Creating Tenant Admin site..." New-SPSite -url "http://sp.$customerName.domain.com/admin" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template tenantadmin#0 -AdministrationSiteType TenantAdministration # everything else needs standard if (!($customerFeatures -eq $foundationFeatures)) { Write-Host "Tenant has SharePoint Server features" # Change here # create a mysite host Write-Host "Creating My Site Host..." New-SPSite -url "http://sp.$customerName.domain.com/mysites" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template SPSMSITEHOST#0 # Change here # configure the MySites host, MySites path, Naming Resolution and Profile Sync OU for the Subscription Write-Host "Configuring Tenant Profile Config..." $upaProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $upaProxyName} Add-SPSiteSubscriptionProfileConfig -id $sub -SynchronizationOU $customerName -MySiteHostLocation "http://sp.$customerName.domain.com/mysites" -MySiteManagedPath "/mysites/personal" -SiteNamingConflictResolution "None" -ProfileServiceApplicationProxy $upaProxy # Change here # create a site for the Content Type Gallery Write-Host "Creating Content Type Gallery..." New-SPSite -url "http://sp.$customerName.domain.com/cthub" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 # configure the Content Type Gallery for the Subscription Write-Host "Configuring Tenant Content Type Gallery..." $mmsProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $mmsProxyName} # Change here # ContentTypeHub feature activation may fail - if so activate manually Set-SPSiteSubscriptionMetadataConfig -identity $sub -serviceProxy $mmsProxy -huburi "http://sp.$customerName.domain.com/cthub" -SyndicationErrorReportEnabled Write-Host "Activating Content Type Hub..." Enable-SPFeature -Identity ContentTypeHub -url "http://sp.$customerName.domain.com/cthub" } Write-Host "Tenant Provisioned!" return $sub; } # Change here # customer details - do this for each tenant # Tenant 1 $customerName = "Customer1" $customerTenantAdmin = "DOMAIN\customer1user" $customerTenantAdminEmail = "customer1user@domain.com" $customerFeatures = $enterpriseFeatures ProvisionTenant $customerName $customerTenantAdmin $customerTenantAdminEmail $customerFeatures $hostingMainURL $upaProxyName $mmsProxyName $foundationFeatures # Change here # Tenant 2 $customerName = "Customer2" $customerTenantAdmin = "DOMAIN\customer2user" $customerTenantAdminEmail = "customer2user@domain.com" $customerFeatures = $enterpriseFeatures ProvisionTenant $customerName $customerTenantAdmin $customerTenantAdminEmail $customerFeatures $hostingMainURL $upaProxyName $mmsProxyName $foundationFeatures