当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 的 SharePoint 2013 预热脚本

作者:精品下载站 日期:2024-12-14 20:58:36 浏览:15 分类:玩电脑

使用 PowerShell 的 SharePoint 2013 预热脚本


SharePoint 中的“预热脚本”是什么?
默认情况下,IIS 应用程序池每晚都会回收,以保持干净的内存空间 - 每次 IIS 应用程序池回收时 - Asp.net 程序集都会重新启动编译以将页面提供给最终用户。因此,当回收发生在午夜时(或者当您执行手动回收/IISReset 时),第一个输入 URL 的用户平均会经历 30 秒到 120 秒的等待时间。 (同样,这取决于您的硬件软件配置!)。但是,来自同一站点的服务器的后续请求速度更快!

因此,我们的想法是:在用户开始请求之前“预热”网站,这样他们就不会在第一次访问时遭受损失。预热脚本定期触发向服务器发出的请求以“预热”IIS。

好的,脚本在哪里?我必须使用哪个预热脚本?嗯,有很多可用的!这是我的选择:https://github.com/spjeff/spbestwarmup,您可能需要根据您的要求进行自定义。根据我的经验,这个简单的预热脚本对于所有版本的 SharePoint 都非常有效:SharePoint 2013、SharePoint 2010 和 SharePoint 2007:

SharePoint 2013 预热 PowerShell 脚本


Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

function Get-WebPage([string]$url,[System.Net.NetworkCredential]$cred=$null) 
{ 
    $WebClient = new-object net.webclient 
    if($cred -eq $null) 
    { 
        $cred = [System.Net.CredentialCache]::DefaultCredentials; 
    } 
    $WebClient.credentials = $cred; 
    return $WebClient.DownloadString($url); 
} # end Function 

# Make sure the account has enough permission to read sites
$cred = [System.Net.CredentialCache]::DefaultCredentials; 
#If you need to use an another account
#$cred = new-object System.Net.NetworkCredential("USER ID","PASSWORD","DOMAIN")

#Get All Web Applications and iterate through
$WebAppsColl = Get-SPWebApplication -IncludeCentralAdministration

foreach($WebApp in $WebAppsColl)
{
    #Get All site collections and iterate through
    $SitesColl = $WebApp.Sites

    foreach ($Site in $SitesColl) 
    {
 Write-Host "Warming up Site collection:"  $Site.URL
 $html = Get-WebPage -url $Site.URL  -cred $cred 
    }

#Change these URL's if you need any other Site/URL for warmup
#$html = Get-WebPage -url "https://northwind.crescent.com/SitePages/Home.aspx" -cred $cred 
}

您必须将每个 Web 应用程序添加到上面的 URL 列表中。对于搜索 Web 应用程序,您必须发送搜索查询,例如:https://intranet.contoso.com/_layouts/OSSSearchResults.aspx?k=warmup

您必须编辑主机文件,以便您的 Warmup 脚本能够访问正在运行的同一 WFE 服务器,而不是转到负载均衡器并从任何其他 Web 服务器获取页面。

以主机命名的网站集的预热脚本:

让我们对其添加更多增强功能:

  • 让我们保留预热站点的日志,
  • 预热所有以主机命名的网站集 - 让我们创建一个代理来访问相同的 Web 前端,而不是访问负载均衡器 - 我们无法编辑每个 HNSC 的 HOST 文件,不是吗?

start-transcript -path C:\Scripts$(get-date -format 'ddMMyyyy').txt -append

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue  

function Get-WebPage([string]$url)
{   
    $bypassonlocal = $false
    $proxyuri = "https://" + $env:COMPUTERNAME
    $proxy = New-Object system.Net.WebProxy($proxyuri, $bypassonlocal)
    $wc = new-object net.webclient
    $wc.credentials = [System.Net.CredentialCache]::DefaultCredentials
    $wc.proxy = $proxy
    $pageContents = $wc.DownloadString($url)
    #write-host $wc.ResponseHeaders.Get("WFE")
    $wc.Dispose()
    return $pageContents
}

#Central Administration
write-host "Warming up Central Administration..."
$WebApps = Get-SPWebApplication -IncludeCentralAdministration
Get-SPWebApplication -IncludeCentralAdministration | ? {$_.IsAdministrationWebApplication -eq $true} | % { $Req = Get-WebPage $_.url }
write-host "`nCentral Administration Warmed up!"

# Warm up Host Name Site Collections (HNSC)
 Write-Host "Warming up Host Name Site Collections (HNSC)...`n"
 $hnsc = Get-SPSite -Limit All |? {$_.HostHeaderIsSiteName -eq $true} | Select Url
 foreach ($sc in $hnsc) {
        write-host "Processing HNSC: "$sc.Url
  $Req = Get-WebPage $sc.url  
 }

# Clean Temporary Files
 Remove-item "$env:systemroot\system32\config\systemprofile\appdata\local\microsoft\Windows\temporary internet files\content.ie5\*.*" -Recurse -ErrorAction SilentlyContinue
 Remove-item "$env:systemroot\syswow64\config\systemprofile\appdata\local\microsoft\Windows\temporary internet files\content.ie5\*.*" -Recurse -ErrorAction SilentlyContinue

stop-transcript

我们何时以及多久运行一次预热脚本?
通常,我们安排它在一天开始之前运行。最好通过任务计划程序安排 PowerShell 脚本,并且必须在 SharePoint 场的所有 WFE 上安排预热脚本。

以下是如何使用 Windows 任务计划程序来计划 PowerShell 脚本:使用 Windows 任务计划程序为 PowerShell 脚本创建计划任务

您可以使用命令行创建计划任务:
schtasks /create /tn “预热脚本” /ru /rp /rl 最高 /sc daily /st 01:00 /ri 60 /du 24:00 /tr “PowerShell.exe -ExecutionPolicy 绕过 D:\Scripts\Warmup.ps1”

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯