Skip to content

Instantly share code, notes, and snippets.

@wpsmith
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wpsmith/97b7278504ddc58d6ffb to your computer and use it in GitHub Desktop.
Save wpsmith/97b7278504ddc58d6ffb to your computer and use it in GitHub Desktop.
PowerShell: Sets SharePoint Output Cache on Site Collection
<#
.Synopsis
Sets Output Cache on Site Collection.
.Description
Sets Output Cache on Site Collection with the Publishing Web Feature Enabled.
.Parameter SiteCollection ("site")
The Site Collection object to set the Output Cache
.Parameter AnonymousCacheProfileID ("anonymousProfileID")
The ID of the Anonymous Cache Profile. Defaults to 1 ("Disabled").
.Parameter AuthenticatedCacheProfileID ("authenticatedProfileID")
The ID of the Authenticated Cache Profile. Defaults to 1 ("Disabled").
.Parameter PublishingSites ("publishing")
Sets the option for Publishing site to use a different page output cache profile.
.Parameter PageLayouts
Sets the option for Page Layouts to use a different page output cache profile. If PageLayouts and PublishingSites
are both set, then the PageLayout cache will override and take precendence.
.Parameter DebugInfo
Sets the Debug Cache Information on pages. This includes the date and time that page contents were last rendered.
.Parameter EnableOutputCache ("Enable")
Enables the Output cache.
.Parameter DisableOutputCache ("Disable")
Disables the Output cache and resets everything to the SharePoint default settings.
.Parameter FlushBlobCache ("blobCache")
Sets the flag to flush the Blob Cache
.Parameter ObjectCacheSize ("size")
Sets the maximum size of the object cache in gigabytes (GB). Defaults to 10.
.Example
To enable everything, set Profiles, Object Cache size to 50, do..
Set-SPSiteOutputCache (Get-SPSite http://domain.com) -AnonymousCacheProfileID 2 -AuthenticatedCacheProfileID 3 -PublishingSites -PageLayouts
-DebugInfo -Enable -FlushBlobCache -ObjectCacheSize 50 {-Verbose}
.Example
To disable output cache.
Set-SPSiteOutputCache (Get-SPSite http://domain.com) -Disable {-Verbose}
.Example
To enable output cache only
Set-SPSiteOutputCache (Get-SPSite http://domain.com) -Enable {-Verbose}
.Example
To set a custom cache profile for authenticated users for each site collection.
Get-SPSite | Set-SPSiteOutputCache -AuthenticatedCacheProfileID 4 -PublishingSites -PageLayouts -DebugInfo -Enable -FlushBlobCache {-Verbose}
.Link Configure cache settings for a web application in SharePoint Server 2013
https://technet.microsoft.com/en-us/library/cc770229.aspx
.Link Cache settings operations in SharePoint Server 2013
https://technet.microsoft.com/en-us/library/cc261797.aspx
.Notes
Name: Set-SPSiteOutputCache
Author: Travis Smith
LastEdit: 05/05/2014
#>
function Set-SPSiteOutputCache()
{
[CmdletBinding()]
param(
[Parameter(
Mandatory = $true,
Position = 0,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("SiteCollection")]
[Microsoft.SharePoint.SPSite]
$site,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("AnonymousCacheProfileID")]
[System.Int32]
$anonymousProfileID = 1,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("AuthenticatedCacheProfileID")]
[System.Int32]
$authenticatedProfileID = 1,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("PublishingSites")]
[Switch]
$publishing,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Switch]
$PageLayouts,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Switch]
$DebugInfo,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("EnableOutputCache")]
[Switch]
$Enable,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("DisableOutputCache")]
[Switch]
$Disable,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("FlushBlobCache")]
[Switch]
$blobCache,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Alias("ObjectCacheSize")]
[System.Int32]
$size = 10
)
BEGIN {
$updateRequired = $false
if ($Enable -and $Disable)
{
throw("You cannot both enable and disable output cache")
}
}
PROCESS {
Write-Verbose "Checking to see if $($site.Url) is a Publishing Web"
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($site.RootWeb))
{
Write-Verbose "$($site.Url) is a Publishing Web"
$cacheSettings = new-object Microsoft.SharePoint.Publishing.SiteCacheSettingsWriter($site.Url);
if(($Enable.IsPresent -and $Enable -eq $false ) -or $Disable)
{
Write-Verbose "Disabling Cache on $($site.Url)"
if($cacheSettings.EnableCache -eq $true)
{
$cacheSettings.EnableCache = $false;
$cacheSettings.SetAnonymousPageCacheProfileId($site, 1);
$cacheSettings.SetAuthenticatedPageCacheProfileId($site, 1);
$cacheSettings.AllowLayoutPageOverrides = $false
$cacheSettings.AllowPublishingWebPageOverrides = $false
$cacheSettings.EnableDebuggingOutput = $false
$cacheSettings.ObjectCacheSize = $size
$cacheSettings.Update()
Write-Verbose "De-activated output cache on site $($site.Url)"
}
else
{
Write-Verbose "Output cache already de-actived on site $($site.Url)"
}
}
else
{
Write-Verbose "Enabling cache on $($site.Url)"
Write-Verbose "Checking to see if Cache is already enabled on $($site.Url)"
if($cacheSettings.EnableCache -eq $false)
{
Write-Verbose "Enabling Cache for $($site.Url)"
$cacheSettings.EnableCache = $true;
$cacheSettings.SetAnonymousPageCacheProfileId($site, $anonymousProfileID)
$cacheSettings.SetAuthenticatedPageCacheProfileId($site, $authenticatedProfileID)
$cacheSettings.AllowLayoutPageOverrides = $PageLayouts
$cacheSettings.AllowPublishingWebPageOverrides = $publishing
$cacheSettings.EnableDebuggingOutput = $debugInfo
$cacheSettings.SetFarmCacheFlushFlag();
if ($blobCache)
{
$cacheSettings.SetFarmBlobCacheFlushFlag();
}
$cacheSettings.Update();
Write-Verbose "Activated output cache on site $site"
}
else
{
Write-Verbose "Output cache already active on site $site"
Write-Verbose "Checking Cache Settings for Requested Changes for $($site.Url)"
if($cacheSettings.GetAnonymousPageCacheProfileId($site) -ne $anonymousProfileID)
{
$updateRequired = $true
$cacheSettings.SetAnonymousPageCacheProfileId($site, $anonymousProfileID)
Write-Verbose "Anonymous Page Cache Profile change requested"
}
if($cacheSettings.GetAuthenticatedPageCacheProfileId($site) -ne $authenticatedProfileID)
{
$updateRequired = $true
$cacheSettings.SetAuthenticatedPageCacheProfileId($site, $authenticatedProfileID);
Write-Verbose "Authenticated Page Cache Profile change requested"
}
if($cacheSettings.AllowLayoutPageOverrides -ne $PageLayouts)
{
$updateRequired = $true
$cacheSettings.AllowLayoutPageOverrides = $PageLayouts
Write-Verbose "Allow Page Layouts Over-ride Policy change requested"
}
if($cacheSettings.AllowPublishingWebPageOverrides -ne $publishing)
{
$updateRequired = $true
$cacheSettings.AllowPublishingWebPageOverrides = $publishing
Write-Verbose "Allow Publishing Site Over-ride Policy change requested"
}
if($cacheSettings.EnableDebuggingOutput -ne $debugInfo)
{
$updateRequired = $true
$cacheSettings.EnableDebuggingOutput = $debugInfo
Write-Verbose "Debug Cache Information change requested"
}
if($blobCache)
{
$updateRequired = $true
$cacheSettings.SetFarmBlobCacheFlushFlag();
Write-Verbose "Blob Cache Flush change requested"
}
if($updateRequired)
{
Write-Verbose "Updating Cache for requested changes"
$cacheSettings.Update();
}
}
}
}
else
{
Write-Host "PublishingWeb Feature is not activated." -ForegroundColor Red
Write-Host "To use the page output cache and the associated cache profile settings, you must be using the Publishing feature on your site." -ForegroundColor Red
Write-Host "Please activate the site collection's SharePoint Server Publishing Infrastructure ('PublishingSite') feature ('f6924d36-2fa8-4f0b-b16d-06b7250180fa') and the site's PublishingWeb feature ('94c94ca6-b32f-4da9-a9e3-1f3d343d7ecb') if you want to use Output Cache." -ForegroundColor Red
}
}
END {
Write-Host "Done." -ForegroundColor Green
$site.Dispose();
}
}
function Get-AnonymousCacheProfileID
{
[CmdletBinding()]
param(
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Microsoft.SharePoint.SPSite]
$Site,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[System.String]
$Url,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Microsoft.SharePoint.Publishing.SiteCacheSettingsWriter]
[Alias("SiteCacheSettingsWriter")]
$cacheSettings
)
BEGIN {
$disposeSite = $false
if (!$Url -and $site)
{
throw("Missing at least one parameter -Site or -Url")
}
if ($Url -and !$Site)
{
$Site = Get-SPSite $Url
$disposeSite = $true
}
if (!$Url -and $Site)
{
$Url = $Site.Url
}
if (!$cacheSettings)
{
$cacheSettings = new-object Microsoft.SharePoint.Publishing.SiteCacheSettingsWriter($Url);
}
}
PROCESS {
$ID = $cacheSettings.GetAnonymousPageCacheProfileId($Site)
}
END {
if ($disposeSite)
{
$Site.Dispose()
}
Return $ID
}
}
function Get-GetAuthenticatedCacheProfileID
{
[CmdletBinding()]
param(
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Microsoft.SharePoint.SPSite]
$Site,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[System.String]
$Url,
[Parameter(
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelinebyPropertyName = $true)]
[Microsoft.SharePoint.Publishing.SiteCacheSettingsWriter]
[Alias("SiteCacheSettingsWriter")]
$cacheSettings
)
BEGIN {
$disposeSite = $false
if (!$Url -and $site)
{
throw("Missing at least one parameter -Site or -Url")
}
if ($Url -and !$Site)
{
$Site = Get-SPSite $Url
$disposeSite = $true
}
if (!$Url -and $Site)
{
$Url = $Site.Url
}
if (!$cacheSettings)
{
$cacheSettings = new-object Microsoft.SharePoint.Publishing.SiteCacheSettingsWriter($Url);
}
}
PROCESS {
$ID = $cacheSettings.GetAuthenticatedPageCacheProfileId($Site)
}
END {
if ($disposeSite)
{
$Site.Dispose()
}
Return $ID
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment