Skip to main content

SharePoint Sites and Pages Powershell Warmup Script

Very nice little script i created to warmup all PWA pages and workspaces.
Simply replace the SiteURL and the SitePages with your own values and place the code in a file named "SharePointWarmup.ps1".
Run the script in Powershell or Task Scheduler.

 $SiteURL = "http://intra/PWA/"  
 $SitePages =   
 "default.aspx",  
 "projects.aspx",  
 "ProjectBICenter/_layouts/15/xlviewer.aspx?id=/PWA/ProjectBICenter/Sample%20Reports/Projectum/DailyCommentsReport%20v7%20-%20PowerView.xlsx&Source=http%3A%2F%2Fintra%2FPWA%2FProjectBICenter%2FSample%2520Reports%2FForms%2FAllItems%2Easpx%3FRootFolder%3D%252FPWA%252FProjectBICenter%252FSample%2520Reports%252FProjectum%26FolderCTID%3D0x012000271EBEF22B819D4AA417BE3C68ADBA34%26View%3D%257B857402E5%252DF616%252D4DC2%252DA880%252D5CFC03D52EFA%257D",   
 "Project%20Detail%20Pages/Project%20Information.aspx",  
 "project%20detail%20pages/schedule.aspx",  
 "project%20detail%20pages/sdc%20-%20budget.aspx"  
 Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue   
 $timeout = 240000 #=4 min   
 Add-Type -ReferencedAssemblies "System.Net" -TypeDefinition @"   
 using System.Net;   
 public class WarmupWebClient:WebClient  
 {  
   private int timeout = 60000;   
   public WarmupWebClient(int timeout) {this.timeout = timeout;}  
   protected override WebRequest GetWebRequest(System.Uri webUrl)   
   {  
     WebRequest requestResponse = base.GetWebRequest(webUrl);   
     requestResponse.Timeout = this.timeout;   
     return requestResponse;   
   }   
 }   
"@  
 function HitPage($url)  
 {  
   try   
   {   
     Write-Host "Hitting page: $url"   
     $wc = New-Object WarmupWebClient($timeout)   
     $wc.Credentials = [System.Net.CredentialCache]::DefaultCredentials   
     $ret = $wc.DownloadString($url)   
   }  
   catch [Exception]   
   {   
     Write-Host "Failed to hit page. Message was: $($_.Exception.Message)"   
   }   
 }  
 foreach ($site in $SitePages)   
 {   
   $warmupSite = $SiteURL + $site  
   HitPage($warmupSite)  
 }  
 Write-Host "All sites have been hit"   

Of cause you want this script to be run on a timely schedule so remember to check out my other post on how to do exactly that Run Powershell from Task Scheduler .

Comments

  1. Hello, it's with great happiness that I tried your script!
    thanks for that great post.
    for those who will copy the script, be careful that powershell does not support space before the "@

    Regards
    Jérome

    ReplyDelete
  2. Another comment: what is your propose schedule to run such script? daily, hourly,each minute?
    regards
    Jérome

    ReplyDelete
  3. Hi Jérome,
    Thank you for the correction with the @" (must be the HTML formatter that have added it).

    In a normal environment the IIS is configured to recycle at 02:00. So i would suggest to run the schedule on a daily basis between 03:00-08:00.
    However normally I just configure it to run every 3 hours to give a better user experience.

    Check IIS Recycle Schedule
    (from: http://technet.microsoft.com/en-us/library/cc754494(v=ws.10).aspx)
    1. Open IIS Manager.
    2. In the Connections pane, expand the server node and click Application Pools.
    3. On the Application Pools page, select an application pool
    4. Click Recycling in the Actions pane.
    5. Select Specific time(s), and in the corresponding box type a time at which you want the application pool to recycle daily.

    ReplyDelete
  4. thanks a lot for your quick answer! I really like it especially to keep excel services up and running!

    ReplyDelete

Post a Comment

Popular posts from this blog

Azure DevOps - Gantt Chart

It's been a while since my last post - in the past couple of weeks I have played around with some videos of topics I find interesting. One of these topics are a very cool way of displaying a Gantt Chart upon your Azure DevOps board's. Check it out here!

Project Server - Change field name on PDP for standard fields (like the Owner field)

Project Server - Change owner field name on PDP The field names on the PDPs (Project Detail Pages) has been preselected on the standard fields for a project. If you want to change the Owner to something else it is quite difficult. In the following i will explain how we can change this field through the Content Editor webpart. To change the owner field add a Content Editor webpart to the PDP page where the field is inserted. Select the webpart and from the ribbon select HTML->Edit HTML Source. Copy/Paste the following code into the Content Editor webpart. < script type ="text/javascript">     var old_name = "Owner" ;     var new_name = "Ansvarlig" ;     var ttnA = document.getElementsByTagName( "div" );     for ( var j = 0; j < ttnA.length; j++) {         var orig = ttnA[j].innerHTML;         var stripped = orig.replace( /^\s*/ , "" ).replace( /\s*$/ , &quo

PowerShell results size unlimited/truncated - $FormatEnumerationLimit/Width

Ever experienced the problem where you run a Powershell command and you cannot see the whole result because the result is truncated. Problem: If you for example run the Test-SPsite command you might see something like the following: Site : SPSite Url=http://atlas/pwa Results : { SPSiteHealthResult Status=Passed RuleName="Conflicting Content Types" RuleId=befe203b-a8c0-48c2-b5f0-27c10f9e1622, SPSiteHealthResult Status=FailedWarning RuleName="Customized Files" RuleId=cd839b0d-9707-4950-8fac-f306cb920f6c, SPSiteHealthResult Status=Passed RuleName="Missing Galleries" RuleId=ee967197-ccbe-4c00-88e4-e6fab81145e1, SPSiteHealthResult Status=Passed RuleName="Missing Parent Content Types" RuleId=a9a6769f-7289-4b9f-ae7f-5db4b997d284, SPSiteHealthResult Status=FailedError RuleName="Missing Site Templates" RuleId=5258ccf5-e7d6-4df7-b8ae-12fcc0513ebd,