2010年9月28日,星期二

使用PowerShell设置对象缓存用户帐户

在所有SharePoint安装中,’正确配置对象缓存非常重要,这样SharePoint才能在可能的情况下有效地检索项目的缓存版本。以我的经验,这是最常被忘记的配置步骤之一–但是Technet很清楚,如果不这样做,SharePoint将无法达到最佳性能。对象缓存配置主要涉及两个特定的用户帐户的配置,SharePoint将使用它们来模拟读取器和高特权用户。如果未配置这些帐户,则您’在Windows事件日志中将看到以下条目:

对象高速缓存:未配置高速缓存使用的超级用户帐户。这会增加高速缓存未命中的数量,这将导致页面请求消耗不必要的系统资源。

Technet文章中提供了为何需要此配置的完整详细信息 配置对象缓存用户帐户。本文概述了执行配置的过程,但奇怪的是(IMHO)列出了一个过程,该过程是PowerShell的一半,在Central Admin中是手动步骤的一半。我的猜测是,就像软件一样,运输文档也有妥协之处,而本文没有’还没有进行充分的治疗。一世’已经编写了一些可以完全配置的PowerShell–确保对其进行编辑以使用您的帐户名和Web应用程序URL。您需要先将其粘贴到可以删除HTML的工具中,然后再另存为.ps1文件。如果有人在使用它时遇到任何麻烦,请告诉我,我会将实际文件发布到某个地方。

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
 
# EDIT THIS TO ENSURE ACCOUNTS ARE CORRECT FOR ENVIRONMENT..
 
$objectCachePortalSuperReader = "sp2010\portalsuperreader" 
$objectCachePortalSuperUser = "sp2010\portalsuperuser" 
 
$allWebApps = ("http://one.myCompany.com", "http://two.myCompany.com") 
 
Function ConfigureObjectCachingOnWebApp([Microsoft.SharePoint.Administration.SPWebApplication]$webApplication)
{
      Write-Host ("Processing " + $webApplication.Url);
 
      try
      {
            GrantPolicy $webApplication $objectCachePortalSuperReader FullRead
            GrantPolicy $webApplication $objectCachePortalSuperUser FullControl
 
            SetPropertyOnWebApp $webApplication "portalsuperuseraccount" $objectCachePortalSuperUser
            SetPropertyOnWebApp $webApplication "portalsuperreaderaccount" $objectCachePortalSuperReader
 
            $webApplication.Update()
 
            Write-Host -BackgroundColor DarkGreen -ForegroundColor White ("Configured " + $webApplication.Url);
      }
      catch
      {
            Write-Host -BackgroundColor DarkRed -ForegroundColor White ("Failed to configure " + $webApplication.Url + ". 错误 details : " + $_)        
      }
}
 
Function GrantPolicy([Microsoft.SharePoint.Administration.SPWebApplication]$webApplicationForPolicy, [string]$userOrGroup, 
      [Microsoft.SharePoint.Administration.SPPolicyRoleType]$policyLevel)
{
      $policy = $webApplicationForPolicy.Policies.Add($userOrGroup, $userOrGroup) 
      $policy.PolicyRoleBindings.Add($webApplicationForPolicy.PolicyRoles.GetSpecialRole($policyLevel)) 
}
 
Function SetPropertyOnWebApp([Microsoft.SharePoint.Administration.SPWebApplication]$webApplicationForProperty, [string]$property, 
      [string]$propertyValue)
{
      $webApplicationForProperty.Properties[$property] = $propertyValue 
}
 
# inline script starts here..
 
$confirmed = Read-Host "This script must be edited before running for correct user accounts for each environment - have you done this? Enter Y to continue or N to exit."
if ($confirmed -eq 'y')
{
      foreach($webAppName in $allWebApps)
      {
            $webApp = Get-SPWebApplication -Identity $webAppName -ErrorAction SilentlyContinue
 
            if($webApp)
            {
                  ConfigureObjectCachingOnWebApp($webApp)     

            }
            else
            {
                  Write-Host -ForegroundColor DarkRed ("Failed to find web app '" + $webAppName + "' in this environment. ")
            }
      }
}
 
Write-Host -BackgroundColor Blue -ForegroundColor White "Script completed"

8条评论:

安德拉斯·盖尔(Andras Gaal) said...

克里斯,你好

小提示:如果您处于声明模式,则表示'将需要使用与用户名等效的声明'最后,Sharepoint服务尝试访问该网站的所有人的访问被拒绝错误。

干杯,
安德拉斯

克里斯·奥'Brien说过...

@安德拉斯,

很好,谢谢!

克里斯。

匿名 said...

很棒的文章和脚本。非常感谢。

匿名 said...

克里斯,你好

您可以将其发布为下载内容吗?

干杯!

文森特

克里斯·奥'Brien说过...

@Vincent,

完成- http://dl.dropbox.com/u/11342240/SetObjectCachingUsers.ps1

谢谢,

克里斯。

蒂娜说过...

克里斯,你好

我一直在共享点环境上运行脚本,因为服务器一直都在占用大量CPU。现在,当我尝试访问主页时遇到了这些错误,
错误
用户不存在或不是唯一的。

解决Microsoft SharePoint Foundation的问题。

相关编号:cd0b7307-b096-446b-8900-4f258ade57d9

日期和时间:2011/5/27下午2:26:19


知道为什么吗?

谢谢!

克里斯·奥'Brien说过...

@蒂娜

I'以前从未听说过,但确实会给用户配置其中一项设置带来麻烦't exist. If you'是否100%确保两个用户都确实存在,是否可能存在暂时的域连接问题或类似问题?

干杯,

克里斯。

未知说过...

用户不存在错误的原因是该帐户未注册为托管帐户。我做了一个与此类似的脚本,并添加了一段代码来验证该帐户是否已添加到网络应用程序之前的托管帐户中。

基思