Microsoft Press:使用 Windows PowerShell 执行和自动化服务器场管理任务

 

适用于: SharePoint Server 2010

上一次修改主题: 2017-01-20

本书摘源自 Microsoft SharePoint 2010 Administrator's Companion(《Microsoft SharePoint 2010 管理员助手》)(Microsoft Press,2010 年 8 月)。

购买本书(该链接可能指向英文页面)

Microsoft SharePoint 2010 Administrator's Companion(《Microsoft SharePoint 2010 管理员助手》)(该链接可能指向英文页面)中的这一摘要探索了 SharePoint 2010 Management Shell,以及如何使用 Windows PowerShell 完成一些基本管理任务。

作者

Bill English

Microsoft 认证技术专家、Microsoft 认证培训师、认证技术培训师、认证的全球安全要素顾问 Bill English 是 SharePoint® Server 领域的 Microsoft® 最有价值专家。他运营着一家领先的培训和咨询公司,曾编写过 10 多本书籍,并且是 Microsoft® Office SharePoint® 会议、计算机经销商博览会和其他活动的发言人。

Brian Alderman

Brian Alderman 精通计算机信息系统,目前就职于位于明尼苏达州明尼阿波利斯-圣保罗地区的 Mindsharp。自 1995 以来,他获得了一些 Microsoft 证书,目前包括:Microsoft 认证培训师、SharePoint 领域的 Microsoft 认证技术专家、SQL Server® 领域的 Microsoft 认证 IT 专家、Windows Server® 领域的 Microsoft 认证系统管理员和 Microsoft 认证系统工程师,同时还通过了项目管理专业人员资格认证。作为一名高级技术导师和顾问,他在网络、SQL Server 数据库、SharePoint 技术和项目管理领域具有近 15 年的经验。Brian 以前的出版物包括 Windows 2000 Professional and SQL Server 2000 Administration(《Windows 2000 Professional 和 SQL Server 2000 管理》)。他是 SharePoint 行业会议(包括“SharePoint 星期六”和“SharePoint 最佳实践会议”)的积极发言人。

Mark Ferraz

Mark Ferraz 是 SolutionsMark (www.solutionsmark.com) 的总裁,SolutionsMark 是一家总部位于休斯顿的咨询公司,擅长基于 Microsoft SharePoint 产品和技术的企业平台、解决方案和服务的设计、开发和实现。作为高级信息架构师、企业网络/系统架构师和开发人员,Mark 在设计、管理和实现某些全球最大企业的复杂项目方面具有十多年的经验。除了参与编写 Microsoft Office SharePoint Server 2007 Best Practices(《Microsoft Office SharePoint Server 2007 最佳实践》)以外,Mark 还是行业会议(例如“SharePoint 最佳实践会议”和“SharePoint 技术会议”)的积极发言人。

书摘 -- 第 5 章:使用 Windows PowerShell 执行和自动执行服务器场管理任务

前几年,某些 SharePoint 管理员认识到 Windows PowerShell 的强大,并尝试使用它,但鉴于没有内置支持,大多数管理员发现很难使用它。借助 SharePoint 2010 Management Shell,Microsoft SharePoint Foundation 2010 和 Microsoft SharePoint 2010 现在包含对 Windows PowerShell 的本机支持。本章探索 SharePoint 2010 Management Shell,以及如何使用 Windows PowerShell 来完成一些基本管理任务。第 12 章“使用 Windows PowerShell 管理 Search Services 和快速搜索”利用搜索管理任务和方案基于本章信息构建。

Internet 上提供了大量有关 Windows PowerShell 的可用信息,这些信息均会在书中发布。本章并非旨在教会您使用 Windows PowerShell,而是展示如何熟悉引入 SharePoint 2010 中的新 Windows PowerShell cmdlet(发音为“command-let”)。不过,为了顾及对 Windows PowerShell 相对陌生的用户,本章先从复习基础知识开始。

本摘要内容

  • 使用 Windows PowerShell:基础知识

  • 使用 SharePoint 2010 Management Shell

  • SharePoint 管理任务的示例

使用 Windows PowerShell:基础知识

传统意义上,管理安装 Microsoft 产品的服务器涉及了解大量管理员工具,例如基于 Microsoft 管理控制台 (MMC) 的图形界面(称为 MMC 管理单元)、许多命令行实用工具,以及管理员使用 VBScript 与之交互的 Windows Management Instrumentation (WMI) 提供程序或组件对象模型 (COM) 对象。在发布 SharePoint 2010 以前,SharePoint 产品和技术与其他 Microsoft 产品在可用管理员工具数量方面没有什么差异。管理员需要依赖管理中心网站、SharePoint 产品配置向导和命令行工具(stsadm 和 psconfig)。没有一种工具能够完成所有操作。

各个 Microsoft 产品还有其自己的社区,以便创建或扩展使管理员生活更简单的内置工具。虽然管理员可以获取所需工具,但这些工具分散在许多源之间。这就是现在使用 Windows PowerShell 可对各个管理任务编写脚本或自动执行这些任务的不同之处。

Windows PowerShell 的概念基于 Microsoft 在 21 世纪初期投入的研究。最初,根据按 IEEE 1003.2 中指定的 POSIX 外壳且受 Perl 和 UNIX 外壳的影响,Windows PowerShell 是命令外壳和脚本语言,它远比使用 Windows 命令提示符 (cmd.exe) 更强大。管理员喜欢命令行工具,因为可以对它们一起进行批处理以自动执行重复任务,或者确保一组任务完全按上次执行时的形式重新完成。Windows PowerShell cmdlet 向管理员提供了这些相同的优势。您仍然可以使用传统工具,但 Windows PowerShell 新增了传统工具不能提供的灵活性和广泛性。

提示

社区引导的有关 SharePoint 以前版本的计划包括 stsadm 扩展,这些计划发布在 https://stsadm.codeplex.com/(该链接可能指向英文页面) 上;Windows PowerShell 脚本适用于 Windows SharePoint Services 3.0 和 Microsoft Office SharePoint Server 2007,可以在以下位置找到这些脚本:https://sharepointpsscripts.codeplex.com/(该链接可能指向英文页面);CodePlex 项目“PowerShell SharePoint 提供程序”适用于 Windows SharePoint Services 2.0 和 Microsoft SharePoint Portal Server 2003,可以在以下位置获取它:https://pssharepoint.codeplex.com/(该链接可能指向英文页面)

本节包含以下 Windows PowerShell 主题。

  • Windows PowerShell 2.0 版中的新增功能

  • 体系结构

  • 安装 Windows PowerShell

  • 远程管理

Windows PowerShell 2.0 版中的新增功能

Windows PowerShell 2.0 提供了大量新功能和针对 Windows PowerShell 1.0 的改进功能,包括

  • New cmdlet

  • 远程管理和后台作业

  • Windows PowerShell 集成脚本环境 (ISE)

  • Windows PowerShell 调试程序

  • 模块

  • 高级函数

  • 事务

  • 可步进式管道

  • 事件

  • 脚本国际化

  • 联机帮助

作为 IT 专业人员,以上许多新功能都会使您感兴趣。例如,您可以从您的桌面远程管理服务器场中的所有服务器,并且在熟悉 Windows PowerShell 后,您可以使用 Windows PowerShell 脚本语言创建自己的高级函数,以便以后用作 cmdlet。在 Windows PowerShell 1.0 中,执行此操作的唯一途径是通过开发人员使用代码,并将文件部署到您的服务器场。

提示

有关 Windows PowerShell 2.0 中新增功能的详细信息,请参阅 What's New in Windows PowerShellhttps://zh.wikipedia.org/wiki/Windows_PowerShell。您可以查找其他资源,具体方法是:使用常用 Internet 搜索引擎,输入关键字“Windows PowerShell 2.0 中的新增功能”或之前列出的功能名称。

Windows PowerShell 体系结构

Windows PowerShell 为什么如此重要?Windows PowerShell 脚本语言以对象为导向,基于 .NET Framework (.NET Framework 3.5 for Windows PowerShell 2.0) 和 C#(发音为“C-sharp”)编程语言构建。这使得 Windows PowerShell 可以访问基础对象模型,以便将对象及其值(属性)从一个 Windows PowerShell 命令传递到另一个命令。这意味着您几乎具有开发人员的能力,但不必编写、编译和部署代码。缺点是:极易导致安装混乱。

当 Microsoft 产品组考虑要提供给管理员的工具时,他们会先在 Windows PowerShell 上构建这些工具。因此,在安装 SharePoint 2010 后,可以使用 Windows PowerShell cmdlet 在本机上完成大量管理任务,同时无需安装社区引导计划中的软件。如果需要任何其他 cmdlet,则可使用 Windows PowerShell 脚本和 Windows PowerShell 2.0 中的高级函数功能创建它们,并且您所在组织中的开发人员可以创建新的 cmdlet。将来的方法是使用 Windows PowerShell 帮助管理 SharePoint,因此尽可能快地开始学习使用内置 cmdlet 很重要。

刚开始时,使用 Windows PowerShell 可能似乎让人望而生畏,但如果用过命令提示符 (cmd.exe) 或创建过批处理文件,则会很快熟悉 Windows PowerShell 控制台。实际上,您甚至可以使用 Windows PowerShell 控制台代替命令提示符,因为您目前使用的所有命令(例如 dir、cd 和 ping)同样可以在 Windows PowerShell 控制台中正常运行,就像在命令提示符处运行一样。您可能需要用引号将命令行参数引起来才能在 Windows PowerShell 中使用这些命令,但这是您需要做出的唯一改变。因此无需使用两个不同的窗口来完成管理任务。

备注

默认情况下,命令提示符有黑色背景,但可以对该设置进行更改。右键单击标题栏,然后选择“属性”。将显示带有四个选项卡的“属性”对话框:“选项”、“字体”、“布局”和“颜色”。您可以更改字体、背景颜色、窗口大小等等。有关两个命令行界面之间的相似性的详细信息,请参阅本章后面的标题为“命令行快捷方式”的边栏。

使用 Windows PowerShell 的方法有两种:通过称为 Windows PowerShell 控制台 (powershell.exe) 的命令行界面,或通过 Windows PowerShell 交互式脚本环境 (ISE) 图形界面 (Powershell_ise.exe)。本章重点介绍如何使用 Windows PowerShell 控制台。

提示

下面是有关 Windows PowerShell 的详细信息的一些资源。

命令行快捷方式

在命令提示符处使用的所有相同的快捷方式都可以在 Windows PowerShell 控制台中运行。

  • 若要在命令正在编写输出时临时暂停显示,请按 Ctrl+S,然后按 Ctrl+S 恢复,或按 Ctrl+C 终止执行过程。

  • 默认情况下,缓冲区中最多可存储 50 个命令。您可以使用向上键和向下键滚动命令,在缓冲区内移动,从而轻松执行下一个命令或上一个命令。

  • 通过按 F7 可以从弹出窗口显示缓冲的命令。使用箭头键选择要执行的命令,按 Enter 或 F9,键入要执行的命令的数量,然后按 Enter。

  • 通过键入所需命令的前几个字符,然后按 F8,可以从命令行显示缓冲的命令。命令行界面将搜索以键入字符开头的第一个命令的缓冲历史记录。

  • 如果使用 Windows PowerShell 命令外壳的自动完成功能,则无需键入命令的完整名称。键入所需命令的前几个字符,并按 Tab 依字母顺序重复循环所有命令和可用文件名及文件夹,或单击 Shift+Tab 依相反顺序重复循环这些命令。

  • 若要复制和粘贴文本,请右键单击命令行界面标题,单击“标记”,突出显示要复制的文本,然后再右键单击窗口标题,从而将所选文本自动复制到剪贴板。

  • 命令不区分大小写,可以一起进行批处理,并将其放入文本文件中。通过在命令行窗口中调用该文件,便可执行该文件中的命令。这些文本文件的扩展名为 .bat, .cmd, .vbs,如果是 Windows PowerShell,则扩展名为 .ps1。可以在命令窗口外执行这些文件中的命令,具体方法是:从“运行”行调用文件,或在 Windows 资源管理器中双击文件。

  • 可以将参数发送到调用的命令文件。传递给命令文件的参数存储在内存中,使用变量可以访问它们。还可以创建变量来存储完成任务时所需的值。在 Windows PowerShell 中,可以通过在变量名前添加一个美元符号 ($) 来引用变量。

  • 可以将命令输出定向到在 > 右侧命名的文件。这样会覆盖该文件(如果已经存在)。若要重定向输出,将其附加到该文件,请使用 >>。运行命令时生成的错误消息可以重定向到在 2> 右侧命名的文件,也可以使用 2>> 将其附加到文件,还可以使用 2>&1 将其发送到与标准输出相同的目标位置。

  • 在同一行上可以执行多个命令。在 Windows PowerShell 中,可以使用分号字符 (;) 分隔命令。

  • 通过使用称为管道的“|”分隔两个命令,可以将一个命令的输出重定向为另一个命令的输入。例如,dir | sort | more 将在当前目录 1 页中一次显示一个排序的文件列表。在大多数键盘上,管道是位于反斜杠之上的符号。

  • 别名和快捷方式可以替换为常用命令。例如,ForEach-Object cmdlet 可以替换为 ForEach 或百分比字符 %。问号字符 ? 可用于代替 Where 或 Where-Object。还可以使用 Get-Alias 返回别名列表。请注意,在脚本中使用别名会使其很难理解。

  • 在本书中可以找到这些快捷方式的示例。

安装 Windows PowerShell

运行 Windows 7 或者 Windows 2008 R2 或更高版本的计算机需包含 Windows PowerShell 2.0 和 Windows Remote Management (WinRM) 2.0。如果要使用早期操作系统在本地管理计算机,或者要使用 Windows PowerShell 远程管理计算机,则需要安装 Windows PowerShell 2.0 和 WinRM 2.0。

安装 Windows PowerShell 2.0 和 WinRM 2.0

可以从 https://support.microsoft.com/kb/968929/zh-cn 下载 Windows PowerShell 2.0 的副本和 WinRM 2.0。请确保获取正确的版本;例如,如果在 64 位版本的 Windows Server 2008 上安装 SharePoint,则需要下载并安装 Windows 2008 x64 版本的 Windows PowerShell 2.0 和 WinRM 2.0。在安装它们后,在文件夹 %SystemRoot%\System32\WindowsPowerShell\v1.0 中会找到 Windows PowerShell ISE 的可执行文件。

备注

如果您将成为 ISE 的常用用户,请考虑将该程序的快捷方式放在任务栏上。在“开始”菜单上,右键单击“Powershell_ise.exe”,然后选择“锁定到任务栏”或“锁定到‘开始’菜单”。

若要在 Windows 2008 R2 上使用 Windows PowerShell ISE,您需要添加 Windows PowerShell ISE 功能。可以使用 Windows PowerShell 命令或服务器管理器添加该功能。在安装 SharePoint 2010 或 SharePoint Foundation 2010 后,可以执行以下步骤。

  • 如果使用 Windows PowerShell,请输入以下命令。

    Import-Module Servermanager; Add-WindowsFeature "PowerShell-ISE"

  • 如果使用服务器管理器,请完成以下过程。

    1. 启动服务器管理器,单击“功能”,然后选择“添加功能”。

    2. 在添加功能向导的中间窗格中,按图 5-1 所示选中“Windows PowerShell 集成脚本环境(ISE)”的复选框,然后单击“下一步”。

安装 Windows PowerShell

图 5-1 安装 Windows PowerShell 集成脚本环境 (ISE) 功能

  1. 在“确认安装选择”屏幕上,单击“安装”。

  2. 在“安装结果”屏幕上,单击“关闭”。

在执行策略内工作

Windows PowerShell 是一个强大的工具,与使用任何其他脚本语言一样,借用他人的代码或下载 Internet 中的代码段都相当简单。同样,由于代码文件只是文本文件,任何人都可以轻松地修改它们以及注入恶意代码。因此,Windows PowerShell 提供了称为执行策略的内置安全功能,您可以基于每个人来设置该功能,这些设置保存在注册表中。若要查看执行策略,请在 Microsoft SharePoint 2010 Management Shell 中键入以下命令。

如果在 SharePoint 服务器上运行 Management Shell,则此类命令输出可能是 RemoteSigned,表示您可以交互方式运行任何命令,并且可以使用您登录的计算机上存储的任何脚本。不过,如果要从远程源运行配置文件或脚本,则需要对其进行签名。如果以管理员身份启动 Windows PowerShell 控制台,并使用 Set-ExecutionPolicy cmdlet,则可以更改执行策略,否则可以按以下内容更改注册表项。

HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

安全注释Security Note
注册表项有助于实现与 Active Directory 组策略结合使用。应避免手动修改注册表,尤其是在 Microsoft 提供 cmdlet 配置 Windows PowerShell 执行策略时。

若要对脚本进行签名,请使用 Set-AuthenticodeSignature cmdlet,您可以使用它向 Windows PowerShell 脚本或其他文件中添加验证码签名。

在具有多个环境(例如开发、系统集成、用户验收测试 (UAT)、生产前和生产)的组织中,请考虑至少需要在生产和 UAT 场上对代码进行签名。您还应该检查这些服务器场的执行策略设置。您可以在面向用户或计算机的“组策略对象”中设置执行策略,以使其不会在某人登录您的 SharePoint 服务器时被覆盖。

提示

有关 Windows PowerShell 执行策略和签名脚本的详细信息,请参阅位于 https://technet.microsoft.com/zh-cn/magazine/2008.01.powershell.aspx 上的 TechNet 文章“拦截恶意代码”,或在 Windows PowerShell 命令行界面键入 Get-Help about_Execution_Policies。此外,还有详细介绍过程的博客文章,即“ALLSigned:对 PowerShell 脚本进行签名”,在 https://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=53(该链接可能指向英文页面) 上可以找到该文章。

备注

如果使用 Windows 7 作为桌面,并要远程管理 SharePoint 服务器的 Windows Server 2008 R2,则需要使用远程服务器管理工具 (RSAT),该工具是新的组策略展示并支持 Windows PowerShell 所必需的。可从 https://www.microsoft.com/downloads/zh-cn/default.aspx 的 Microsoft 下载中心获取 RSAT。有关详细信息,请转到 https://technet.microsoft.com/zh-cn/library/dd367853(ws.10).aspxhttp://trycatch.be/blogs/roggenk/archive/2009/06/08/installing-windows-7-rsat-unattended.aspx(该链接可能指向英文页面)

使用 WinRM 远程管理系统

Windows PowerShell 2.0 引入了一个使用 WinRM 或 Internet Information Server (IIS) 从桌面远程管理系统的新功能。WinRM 通常是管理员使用的机制,也是本节主题。远程管理不仅涉及能够使用允许您将计算机名称指定为可选参数的若干命令在您的计算机上从本地运行 Windows PowerShell;还包括称为扇入和扇出远程和后台作业的方法。

  • 扇入远程 利用此方法,许多管理员可以连接到同一远程服务器上运行的 Windows PowerShell 实例,SharePoint 2010 不支持这一现成的方法。

  • 扇出远程 利用此方法,可以发送单个 Windows PowerShell 命令来并行运行 Windows PowerShell 的多个远程实例,而这些命令的结果将返回到您的桌面。如果需要在多台服务器上完成相同任务,则可使用该方法。您不再需要依次建立远程桌面与各个服务器的连接,就可以在该服务器上从本地执行这些命令。您可以创建一组 Windows PowerShell 命令,并将服务器的名称传递给这些命令,这些命令随后可对您提供其名称的各个服务器依次完成相同命令。

  • 后台作业 Windows PowerShell 2.0 支持本地和远程后台作业。这些命令是在后台异步执行的命令,没有交互。在后台执行命令时,会立即返回命令提示符,以使您可以继续执行其他命令。

对 WinRM 进行配置

必须在本地计算机和要远程运行命令的服务器上启动和配置用于远程的 WinRM Windows 服务。若要确定您的服务器是否在运行 WinRM,请键入

Get-service winrm

若要检查该程序是否在远程服务器上运行,请键入

Get-service winrm -computername $server_name

在 SharePoint 服务器上,该服务应该正在运行;不过,如果本地计算机运行的是 Windows 7(或安装 Windows PowerShell 2.0 和 WinRM 2.0 的 Windows Vista),则可能需要启动该服务,并启用远程功能。为此,请键入一个命令 Enable-PSRemoting,它会执行其他两个命令 Set-WSManQuickConfig 和 Start-Service WinRM。

重要

如果其中一个网络连接类型是“公用”,则 Set-WSManQuickConfig 命令将显示“无效操作”异常。您需要将网络连接更改为“域”或“专用”网络类型,才能继续。

Enable-PSRemoting 命令的输出看起来与下例相似。

WinRM Quick Configuration
Running command "Set-WSManQuickConfig" to enable this machine for remote management
through WinRM service.
 This includes:
    1. Starting or restarting (if already started) the WinRM service
    2. Setting the WinRM service type to auto start
    3. Creating a listener to accept requests on any IP address
    4. Enabling firewall exception for WS-Management traffic (for http only).

Do you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default
is "Y"): y
WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.
Configured LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.
WinRM has been updated for remote management.
Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.
WinRM firewall exception enabled.

在运行 64 位版本的 Windows 的计算机上,可能会看到其他确认消息。

Are you sure you want to perform this action?
Performing operation "Registering session configuration" on Target "Session
configuration "Microsoft.PowerShell32" is not found. Running command
"Register-PSSessionConfiguration Microsoft.PowerShell32 -processorarchitecture x86 
-force" to create "Microsoft.PowerShell32" session configuration. This will restart
WinRM service.".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

若要确定如何配置 WinRM、身份验证方法以及将访问的端口号,请使用以下命令。

winrm get winrm/config/service

该命令将生成一个与以下内容相似的输出。

Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 15
    EnumerationTimeoutms = 60000
    MaxConnections = 25
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = false
    Auth
        Basic = false
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint

您可以从 Windows PowerShell 控制台或 SharePoint 2010 Management Shell 运行 winrm 命令和 winrm 相关命令,例如 New-PSSession 命令。不过,必须以管理员身份运行这些命令。为此,请右键单击 Windows PowerShell 控制台或 SharePoint 2010 Management Shell,然后选择“以管理员身份运行”。您必须是远程计算机上 Administrators 组的成员,或者能够提供管理员凭据,才能执行此操作。

备注

在本地计算机和远程计算机位于不同的非受信任域或一个工作组中时,还需要使用其他步骤才能配置远程设置。在为外部协作安装 SharePoint Foundation 时,或在小型企业环境而非典型的 SharePoint Server 安装环境中安装 SharePoint Foundation 时,很可能出现上述工作组的情形。有关如何配置两台工作组计算机之间的远程设置的信息,请参阅 https://blogs.msdn.com/wmi/archive/2009/07/24/powershell-remoting-between-two-workgroup-machines.aspx(该链接可能指向英文页面) 的博客文章。

满足 SharePoint PowerShell 远程设置的要求

若要使用 WinRM 在远程计算机上执行 SharePoint PowerShell cmdlet,则有大量其他要求。

  1. 必须使用正确的权限访问用户 ID 才能执行这些命令。不管是远程访问服务器还是在本地执行 SharePoint cmdlet,这些要求均适用。用户 ID 必须满足以下条件。

    • 必须是执行命令的计算机上 WSS_ADM_WGP 本地安全组的成员。

    • 必须是配置数据库上 SharePoint_Shell_Access SQL Server 角色的成员。

    • 必须有权访问要处理的内容数据库。

    您可以使用 SPShellAdmin cmdlet 帮助您管理这些要求。在运行 Add-SPShellAdmin cmdlet 将用户 ID 添加到 SharePoint_Shell_Admin 角色中时,必须将您映射到 SQL 实例上的 Security_Admin 角色,将 db_owner 角色映射到相关数据库。您需要对您希望用户 ID 访问的各个内容数据库运行 Add-SPShellAdmin cmdlet。

  2. 将服务器场中的一台服务器指定为始终用于远程的服务器。在该服务器上,可以将 WinRM 配置选项 MaxMemoryPerShellDB 增加到一个较大的值 512 或 1024。该配置选项用于限制单个远程过程可以使用的内存量。如果增加该值,则长时间运行的命令可以在运行时不引发 OutOfMemory 异常错误。显示配置选项和示例输出的值的命令如下所示。

    winrm get winrm/config/winrs

    Winrs
        AllowRemoteShellAccess = true
        IdleTimeout = 180000
        MaxConcurrentUsers = 5
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 15
        MaxMemoryPerShellMB = 150
        MaxShellsPerUser = 5
     Winrs    AllowRemoteShellAccess = true    IdleTimeout = 180000    MaxConcurrentUsers = 5    MaxShellRunTime = 2147483647    MaxProcessesPerShell = 15    MaxMemoryPerShellMB = 150    MaxShellsPerUser = 5
    

    若要修改 MaxMemoryPerShellDB 设置,请在 SharePoint 2010 Management Shell 中键入以下 Windows PowerShell 命令。

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024

  3. 必须使用凭据安全提供程序 (CredSSP) 身份验证。该身份验证机制随 Windows Vista 引入,利用该机制,应用程序可以将凭据从一台计算机委派到另一台计算机(称为“双跃点”的过程)。这样,您可以提供允许 SharePoint PowerShell cmdlet 与承载 SharePoint 数据库的 Microsoft SQL Server 通信的凭据。如果不使用 CredSSP,并尝试远程执行 SharePoint cmdlet,则可能会收到一条消息,指示服务器场不可用。在前面显示的 Winrm get winrm/config/service 命令的输出中,请注意 CredSSP 等于 False。修改 WinRM 配置选项的方法有几种,其中包括组策略、登录脚本和命令提示符。若要通过命令行界面启用 CredSSP 身份验证,请完成以下任务。

    1. 在从中执行远程操作的计算机(例如 Windows 7 桌面)上,键入以下命令,其中 Web1 是 SharePoint 服务器。在系统提示确认要启用 CredSSP 身份验证时,键入 Y。

      Enable-WSManCredSSP -role client -DelegateComputer Web1

    2. 在要远程访问的 SharePoint 服务器上,键入

      Enable-WSManCredSSP -role server

    提示

    有关 WinRM 中的多个跃点支持的详细信息,请参阅 https://msdn.microsoft.com/zh-cn/library/ee309365(VS.85).aspx(该链接可能指向英文页面)

使用 WinRM 远程

启动远程会话来远程管理一个 SharePoint 场或一台特定 SharePoint 服务器所需的命令与以下示例中的命令相似。

$cred = Get-Credential contoso\spfarm
$sess = New-PSSession Web1 -Authentication CredSSP -Credential $cred
Invoke-Command -Session $sess -ScriptBlock '
   {ADD-PSSnapin Microsoft.SharePoint.PowerShell;}
安全注释Security Note
通过使用 -ConfigurationName 参数和 New-PSSession cmdlet,或使用 Proxy cmdlet,您可以限制用户在远程会话过程中访问的 Windows PowerShell 命令。有关详细信息,请参阅 https://blogs.msdn.com/powershell/archive/2009/01/04/extending-and-or-modifing-commands-with-proxies.aspx(该链接可能指向英文页面) 上的博客文章“使用代理扩展和/或修改命令”。

在输入第一个命令后,将显示一个对话框,您必须在其中键入密码。该密码和用户名存储在 $Cred 变量中,该变量用于第二个命令 New-PSSession,该命令可用于建立与远程服务器的永久性会话。在使用 Windows PowerShell 远程时,没必要创建永久性会话,但如果不建立永久性连接,则在调用包含 SharePoint cmdlet 的远程命令时,每个 Invoke-Command 还需要包含 PSSnapin cmdlet。利用第三个命令 Invoke-Command PSSnapin,您可以在远程服务器上运行 SharePoint PowerShell cmdlet。

对永久性会话的引用存储在 $sess 变量中。您可以使用该变量将所需命令定向到该远程服务器上。在以下示例中,在脚本块(波形括号 ({ }) 之间的区域)内已键入 Get-SPServiceInstance cmdlet。Get-SPServiceInstance cmdlet 的输出将返回 SharePoint 场内服务的状态。

Invoke-Command -Session $s -ScriptBlock {get-SPServiceInstance}

WARNING: column "PSComputerName" does not fit into the display and was removed.

TypeName                         Status   Id
--------                         ------   --
Business Data Connectivity       Online   3ad4d004-9ae3-4810-94bf-76cc43c9d507
Microsoft SharePoint Foundati... Online   81cc6474-fd6f-42ad-a932-25d67cff8cc1
Microsoft SharePoint Foundati... Disabled cb3b976c-b451-4abe-b808-0c6d191ccd3d
Microsoft SharePoint Foundati... Online   5bac9c93-483a-4901-ae46-f6f7ae0a12a8
Central Administration           Online   0c24457f-b58e-4daa-895e-4acd35ef7543
Microsoft SharePoint Foundati... Online   155570fa-0d4c-495d-9f31-5250e83bdd75
Microsoft SharePoint Foundati... Disabled c25ae170-c07d-48db-97b3-73b0d9b47e94
SharePoint Foundation Help Se... Online   8af8b8b1-92cb-48d2-8864-20a7e191d7c2

重要

您可以在单独的行中或由分号 (;) 分隔的同一行中的脚本块中键入多个命令。如果只在脚本块中输入一个命令,则分号为可选项,但最好包含它。您还可以使用局部变量生成远程脚本块,如以下示例所示。

$url = "https://contoso.com"
$myscript = "get-spsite $url"
$sb = [scriptblock]::Create($myscript)
Invoke-Command $sess -ScriptBlock $sb

您可以通过您的桌面在同一服务器或不同服务器上,使用 Windows PowerShell Invoke-Command cmdlet 与多个会话通信。利用该 cmdlet,您可以同时启动随后并行运行的多个管理任务。不过,如果这些任务长时间运行,则在远程计算机上的命令运行完之前,您不能重新控制它。这称为以交互方式运行命令。若要以后台作业的形式异步运行,以使 Windows PowerShell 提示符立即返回,以便您输入其他命令,请将 -AsJob 参数附加到 Invoke-Command,或者使用 Start-Job cmdlet。与依次运行管理任务相比,使用该方法可以缩短完成这些任务的时间。该方法可节省大量时间的示例是:在升级过程中,当各个会话运行 database-attach-upgrade 时,完成所有数据库升级所需的时间仅受 SQL Server 资源限制。

如果要在特定服务器上完成多个短时间运行的任务,但不想不断键入 Invoke-Command,请使用以下方法之一。

  • 可以通过键入 Enter-PSSession $sess,输入该服务器的交互会话。命令提示符将从 PS C:\Users\<userid>(其中 <userid> 是当前用户的名称)更改为 [<remoteservername>]: PS C:\Users\<remotecredentials>\Documents(其中 <remotecredentials> 是用于 CredSSP 身份验证的 userid)。命令提示符用于提醒您立即向远程服务器提交命令。若要返回本地计算机上的交互模式,请键入 Exit-PSSession 或退出。

  • 使用 Import-PSSession remoting cmdlet(也称为隐式远程)将命令从远程会话移动到本地 Windows PowerShell 会话。Import-PSSession 方法的另一个优点是:您可以与本地文件系统交互,并可与 SharePoint 通信,就像您在本地登录 SharePoint 服务器一样。默认情况下,Import-PSSession cmdlet 会导入除与当前会话中的命令具有相同名称的命令以外的所有命令。您还可以导入一部分命令,并使用指定的词作为它们的前缀,以便明确区分哪些命令是本地命令,哪些命令是远程命令。在以下示例中,Remote 一词将作为前缀添加到所有 SPSite cmdlet 中。

    Import-PSSession -session $sess -CommandName *-spsite -Prefix Remote

    M ModuleType Name                      ExportedCommands                          
    ---------- ----                      ----------------                          
    Script     tmp_1833f7bc-b269-4229... {Set-SPSite, Backup-SPSite, Get-SPSite,...
    

    在该示例中,您可以使用所有 SPSite cmdlet,就像它们是本地命令一样;例如,通过键入 Get-RemoteSPSite,您可以返回符合给定条件的所有网站集。这些导入的命令存储在会话结束时将删除的临时模块中。若要创建可用于将来会话的永久性模块,请使用 Export-PSSession cmdlet。导入的命令仍然在从中导入命令的远程会话中运行,因此可能需要比本地命令更长的运行时间。

在完成所有任务后,可以通过键入 Remove-PSSession $sess,删除本地计算机和远程计算机之间的永久性连接。

提示

有关 Windows PowerShell 远程的详细信息,请参阅 William Stanek 著作:Windows PowerShell 2.0, Administrator's Pocket Consultant(《Windows PowerShell 2.0 管理员的袖珍顾问》)(Microsoft Press,2009)中的第 4 章“使用会话、作业和远程”,以及 https://technet.microsoft.com/zh-cn/magazine/2008.08.windowspowershell.aspx 上的 TechNet 杂志文章“远程管理 2.0 版快速预览”。另请参阅 https://blogs.technet.com/otto/archive/2007/02/09/sample-vista-ws-man-winrm-commands.aspx(该链接可能指向英文页面) 上的博客文章“一些不错的 WS-MAN (WinRM) 命令”。

使用 SharePoint 2010 Management Shell

若要打开 SharePoint 2010 Management Shell,请单击“开始”,然后选择“程序”、“Microsoft SharePoint 2010 产品”,最后选择“SharePoint 2010 Management Shell”,如图 5-2 所示。

启动 Windows PowerShell

图 5-2 访问 SharePoint 2010 Management Shell

SharePoint 2010 Management Shell 是一个自定义控制台;它不是在打开默认 Windows PowerShell 控制台时打开的那个相同的控制台,其快捷方式通常放置在任务栏上。在检查 SharePoint 2010 Management Shell 快捷方式的属性时,将显示执行的命令。

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe  -NoExit  " &
   ' C:\Program Files\Common Files\Microsoft Shared\Web Server 
   Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ' "

快捷方式指向 Sharepoint.ps1 文件。该文件是 Windows PowerShell 配置文件的一个示例,它与任何其他 Windows PowerShell 脚本文件相同,并可用于存储 Windows PowerShell 会话开始时自动加载所需的常用元素。因此,就像常规脚本文件一样,配置文件可以包含函数、别名和变量,并且它们可以加载您可能需要的任何 Windows PowerShell 扩展、管理单元或模块。Windows PowerShell 管理单元 (PSSnapin) 是一个编译为 DLL 文件的 .NET 程序,其中包含新 cmdlet、函数和/或提供程序。Windows PowerShell 随大量管理单元(包括 Microsoft.PowerShell.Core、Microsoft.PowerShell.Host 和 Microsoft.PowerShell.WSMan.Management)以及模块(例如 ActiveDirectory、FailoverClusters 和 WebAdministration)一起提供。随着其他产品安装到您的计算机上,您可以使用更多扩展。

SharePoint 配置文件的主要目标是加载 Windows PowerShell for SharePoint 管理单元,以使您以后可以使用特定于 SharePoint 的新 cmdlet。SharePoint 配置文件包含以下代码和一个签名。

$ver = $host | select version
if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home

该代码可用于获取 Windows PowerShell 的版本,检查版本是否高于 1,然后在满足该条件的情况下,它将设置线程模型,以使第一个线程可以重用,它可用于加载 SharePoint PowerShell 管理单元,然后将目录更改为主文件夹,例如 C:\users\<用户 ID>,其中用户 ID 是当前登录的用户。有关 SharePoint、Windows PowerShell 和线程的详细信息,请参阅本章后面的标题为“使用 Windows PowerShell 时的内存注意事项”的边栏。

SharePoint PowerShell 管理单元不是加载到 SharePoint 2010 Management Shell 的唯一管理单元。因此,不仅可以使用 SharePoint cmdlet,还可以使用加载的管理单元中的其他 cmdlet。若要查看所有管理单元和加载它们的顺序,请键入 Get-PSSnapin。输出应该与以下示例相似。

Name        : Microsoft.PowerShell.Diagnostics
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains Windows Eventing and
              Performance Counter cmdlets.

Name        : Microsoft.WSMan.Management
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets (such as 
              Get-WSManInstance and Set-WSManInstance) that are used by the
              Windows PowerShell host to manage WSMan operations.

Name        : Microsoft.PowerShell.Core
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets used to manage
              components of WindowsPowerShell.

Name        : Microsoft.PowerShell.Utility
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains utility Cmdlets used to
              manipulate data.

Name        : Microsoft.PowerShell.Host
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets (such as Start-
              Transcript and Stop-Transcript) that are provided for use with the
              Windows PowerShell console host.

Name        : Microsoft.PowerShell.Management
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains management cmdlets used to
              manage Windows components.

Name        : Microsoft.PowerShell.Security
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets to manage Windows
              PowerShell security.

Name        : Microsoft.SharePoint.PowerShell
PSVersion   : 1.0
Description : Register all administration Cmdlets for Microsoft SharePoint Server.

备注

如果要开发可以通过命令提示符或双击 Windows Explorer 中的文件调用的自己的脚本,并且这些脚本包含 Windows PowerShell for SharePoint 命令,请确保您的脚本中包含设置线程模型和加载 Windows PowerShell for SharePoint 管理单元的命令。在从 Windows PowerShell 控制台中调用脚本时,可以使用脚本顶部的 #requires 标记。

自定义控制台的实际环境

通常做法是在指定的管理员计算机上修改配置文件。您可以更改配置文件,以使其

  • 包含组织或部门中所有 IT 专业人员使用的所有管理单元或模块。

  • 跟踪执行的所有 Windows PowerShell 命令。

  • 更改提示符来指示服务器名称。在具有大量服务器的组织中,极容易在错误的服务器上启动管理任务,因此帮助管理员确定其正在处理的服务器的操作很有用,例如配置窗口标题来列出服务器的名称。

自定义配置文件的示例可能包含以下代码。

<# ***********************************************************
 Copyright (c)2010, Contoso, All Rights Reserved

*********************************************************** Contoso PowerShell Profile - ContosoProfile.ps1 Author: Peter Connelly Purpose: This profile sets the PowerShell window size, font and title and loads the SharePoint snap-in History: Version 1.0 01/02/2010 First version #> # Track all Windows PowerShell commands $profilename = $MyInvocation.MyCommand.Name $profilepath = $MyInvocation.MyCommand.Path $transcriptFile = "C:\Contoso\Logs\Powershell_$profilename.log" Start-Transcript $transcriptFile -append -force Write-Output "Starting profile: $profilepath"

# Command from SharePoint Server 2010 profile file - SharePoint.ps1
$ver = $host | select version
if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home

# Check that this is a command-line interface and not the ISE
if ($host.name -eq "ConsoleHost")
{
  $width = 80
  $sizeWindow = new-object System.Management.Automation.Host.Size $width,40
  $sizeBuffer = new-object System.Management.Automation.Host.Size $width,9999
  <# Check to adhere to the following rules:
  The buffer width can't be resized to be narrower than the window's current 
  width plus the window's width can't be resized to be wider than the 
  buffer's current width. #>
  $S = $Host.UI.RawUI
  if ($s.WindowSize.width -gt $width)
  {
        $s.WindowSize = $sizeWindow
        $s.BufferSize = $sizeBuffer
  } else {
        $s.BufferSize = $sizeBuffer
        $s.WindowSize = $sizeWindow
  }
}
# Set foreground, background color and window title
$s.ForegroundColor = "Yellow";$s.BackgroundColor = "DarkBlue";
$s.WindowTitle = "$env:computername"
# #############################################################
# End of ContosoProfile.ps1
# #############################################################

由于配置文件脚本是在每次运行 SharePoint 2010 Management Shell 时自动执行的,因此应该对其进行签名。可以在以下位置查看有关自定义控制台的详细信息:https://technet.microsoft.com/zh-cn/library/ee156814.aspx(该链接可能指向英文页面)

了解 cmdlet

Window PowerShell cmdlet 是基于应用程序界面构建的实用程序,在使用 SharePoint 2010、SharePoint 对象模块和 SharePoint Web Services 时,管理员可以利用该实用程序完成大量任务。

通常,cmdlet 使用动词-名词对。名词用于指定所需信息的相关对象或要处理的对象,而动词陈述要对该对象执行的操作。动词和名词始终用没有空格的连字符分隔,并且 SharePoint cmdlet 动词具有前缀 SP。例如,如果要获取(动词)有关您的服务器场中所有内容数据库(名词)的信息,将使用以下 SharePoint cmdlet,它将向您提供下面显示的输出。

PS C:\Users\Peter> Get-SPContentDatabase

Id               : a1d5c96c-a41a-43b3-bc5d-3f8a93b26046
Name             : WSS_Content_a2fde53006e04bf5aae434ffd3c8a19c
WebApplication   : SPWebApplication Name=SharePoint - 80
Server           : SQL
CurrentSiteCount : 1

Id               : 363b11a3-6947-42f6-9df4-665eeff59c83
Name             : SPF_TeamsDB
WebApplication   : SPWebApplication Name=SPF_Teams
Server           : SQL
CurrentSiteCount : 1

Windows PowerShell 还可提供帮助您处理其他 cmdlet 的一些 cmdlet。其中两个示例是 Get-Command 和 Get-Help,前者可以缩写为 gcm,而后者可以缩写为 help。(cmdlet 的缩写名称称为别名。)利用 Get-Command,您可以查找 cmdlet,然后在检索到 cmdlet 后,Get-Help 可以向您提供有关 cmdlet 的基本信息。(在本章后面的标题为“获取帮助”的部分,您将看到如何使用 Get-Help cmdlet。)在以下示例中,Get-Command 用于查找与 SharePoint 关联的所有 cmdlet。

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort noun, verb |Format-Wide -Column 3
>><ENTER>

备注

在您键入一行 Windows PowerShell 脚本,或者尚未提供所有必需参数时,Windows PowerShell 会提示您提供参数,或使用 >> 新换一行,以使您可以输入更多命令。在完成键入后,对 Windows PowerShell 按 Enter 来执行代码。本章中键入的许多命令本该位于一行上,但因页面大小限制而显示在多行中,因此请始终记住仅按 Enter 来执行这些脚本。

前面显示的命令集使用 Get-Command cmdlet 获取输出,并使用管道将输出输送到 sort cmdlet。sort cmdlet 按先名词后动词的顺序对数据排序,以使处理同一对象的所有 SharePoint cmdlet 列在一起。然后,按动词顺序对处理同一对象的 cmdlet 排序。若要减少 SharePoint 2010 Management Shell 中必需的滚动操作量,请使用管道将排序的数据输送到 format-wide cmdlet。此类 Windows PowerShell cmdlet 组合很普通。该命令集的输出与以下示例相似。

Start-SPAdminJob           Get-SPAlternateURL         New-SPAlternateURL
Remove-SPAlternateURL      Set-SPAlternateURL         Install-SPApplicationC...
Start-SPAssignment         Stop-SPAssignment          Get-SPAuthenticationPr...
New-SPAuthenticationPro... Get-SPBackupHistory        Move-SPBlobStorageLoca...
Get-SPBrowserCustomerEx... Set-SPBrowserCustomerEx... Copy-SPBusinessDataCat...
.....(not all output shown)
Set-SPWebApplicationHtt... Get-SPWebPartPack          Install-SPWebPartPack
Uninstall-SPWebPartPack    Get-SPWebTemplate          Install-SPWebTemplate
Set-SPWebTemplate          Uninstall-SPWebTemplate    Get-SPWorkflowConfig
Set-SPWorkflowConfig

备注

还有另一个 cmdlet 与 Get-Command 相似,它可帮助您处理 cmdlet,您可能会发现它很有用,尤其是在创建您自己的命令或脚本时。它就是 Measure-Command cmdlet。利用该命令,您可以估量运行 cmdlet 或脚本所需的时间。您还可能会发现 Trace-Command cmdlet 有助于调试简短的脚本块。

使用对象

SharePoint 中包含大量可用对象,正如您可能预料到的,与 SharePoint Foundation 相比,SharePoint Server 中有更多可用对象。通过阅读本书,您可能已确定这些对象之间的关系。例如,一个 SharePoint 场可以包含多个 Web 应用程序,而每个 SharePoint 场具有一个配置数据库。许多 SharePoint cmdlet 使用可以轻松确定的名称来确定其将处理的对象。若要举例说明,请利用 SPFarm cmdlet 检索有关 SharePoint 场的信息,并备份或还原 SharePoint 场。例如,利用 SPFarmConfig cmdlet 可以检索和设置服务器场的属性。

不过,有一些让您迷惑的 cmdlet 名称。例如,利用 SPSite cmdlet,您可以处理网站集,而第 2 章“了解 SharePoint 2010 的体系结构”说明您不能创建网站集,除非您拥有 Web 应用程序,这意味着需要使用 SPWebApplication 对象。在创建网站集时,您选择一个用于创建网站的网站模板。在 SharePoint 对象模型中,该网站称为网站 (web),而非网站 (site);因此,该对象被命名为 SPWeb。这让人相当迷惑,因为术语“网站 (website)”通常缩写为“网站 (site)”,而在 SharePoint 对象模型中,“网站集 (site collection)”也缩写为“网站 (site)”。由于此类术语已用于多个版本的 SharePoint,并且开发人员也统一使用此类术语,因此 IT 专业人员更易于采用该用法。

  • 网站 (web) 即网站 (website),可以使用 SPWeb 对象对其进行处理。

  • 网站集 (site collection) 包含网站 (web) 的集合,可以使用 SPSite 对象对其进行处理。

图 5-3 显示了最常见的对象及其关系,但还有其他对象及其关系,例如 SPSiteCollection,它是 SPSite 的集合。

当前选择的内置 cmdlet 不能完全覆盖所有 SharePoint 对象,但您可以编写新 cmdlet 来处理这些对象。若要确定与 SharePoint PowerShell cmdlet 关联的对象以及每个对象的 cmdlet 数量,请使用以下示例中的命令,其中显示了一部分输出。

PS C:\Users\peter> Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort noun, verb | group-object -property noun
>><ENTER>

Count Name                      Group
----- ----                      -----
    1 SPAdminJob                {Start-SPAdminJob}
    4 SPAlternateURL            {Get-SPAlternateURL, New-SPAlternateURL, Rem...
    1 SPApplicationContent      {Install-SPApplicationContent}
    2 SPAssignment              {Start-SPAssignment, Stop-SPAssignment}
...(not all output shown)
    6 SPWeb                     {Export-SPWeb, Get-SPWeb, Import-SPWeb, New-...
    4 SPWebApplication          {Get-SPWebApplication, New-SPWebApplication,...
    1 SPWebApplicationExtension {New-SPWebApplicationExtension}
    2 SPWebApplicationHttpTh... {Disable-SPWebApplicationHttpThrottling, Ena...
    2 SPWebApplicationHttpTh... {Get-SPWebApplicationHttpThrottlingMonitor, ...
    3 SPWebPartPack             {Get-SPWebPartPack, Install-SPWebPartPack, U...
    4 SPWebTemplate             {Get-SPWebTemplate, Install-SPWebTemplate, S...
    2 SPWorkflowConfig          {Get-SPWorkflowConfig, Set-SPWorkflowConfig}

通用 SharePoint 对象及其关系

图 5-3   常见 SharePoint 对象及其关系

了解属性和方法

SharePoint 知道的相关对象信息存储在称为属性的数据元素和值中,属性还用于说明该对象的状态。例如,SPContentDatabase 对象包含有关服务器场内内容数据库的所有信息。

对象不仅具有属性,还包含确定如何处理对象的操作。在以对象为导向的术语中,这些操作或处理对象的不同方式称为方法。若要确定 SPSite 对象的属性和方法,请使用以下示例中的 cmdlet,其中显示了一部分输出。

PS C:\Users\peter> Get-SPSite | Get-Member

   TypeName: Microsoft.SharePoint.SPSite

Name                                  MemberType Definition
----                                  ---------- ----------
AddWorkItem                           Method     System.Guid AddWorkItem(Sys...
BypassUseRemoteApis                   Method     System.Void BypassUseRemote...
CheckForPermissions                   Method     System.Void CheckForPermiss...
Close                                 Method     System.Void Close()
ConfirmUsage                          Method     bool ConfirmUsage()
Delete                                Method     System.Void Delete(), Syste...
Dispose                               Method     System.Void Dispose()
...
ToString                              Method     string ToString()
UpdateValidationKey                   Method     System.Void UpdateValidatio...
VisualUpgradeWebs                     Method     System.Void VisualUpgradeWe...
AdministrationSiteType                Property   Microsoft.SharePoint.SPAdmi...
AllowDesigner                         Property   System.Boolean AllowDesigne...
AllowMasterPageEditing                Property   System.Boolean AllowMasterP...
....(not all output shown)
WarningNotificationSent               Property   System.Boolean WarningNotif...
WebApplication                        Property   Microsoft.SharePoint.Admini...
WorkflowManager                       Property   Microsoft.SharePoint.Workfl...
WriteLocked                           Property   System.Boolean WriteLocked ...
Zone                                  Property   Microsoft.SharePoint.Admini...

重要

不要错过使用管道将 Get-SP<名词> cmdlet 输送到 Get-Member cmdlet 的机会。有时,对象能够检索到的信息令人惊讶。

实际环境:运行 Windows PowerShell 命令时的性能问题

如果要在服务器场中查找所有网站集,则可以键入 Get-SPSite。不过,您将看到的唯一输出是网站集的 URL。出于性能原因,Url 属性是默认显示的唯一属性。这是因为网站集具有许多属性;如果要显示大量网站集的所有属性,将消耗大量内存,并且该命令将需要很长的运行时间。只显示 Url 属性几乎是瞬时完成,因为已缓存该属性。因此,您应该防止运行该命令来显示大量其他属性。

若要不只是显示默认属性,请使用带有管道 (|) 字符的 select Windows PowerShell cmdlet。还可以对 select 语句使用通配符 (*),以便列出所有属性值,如下例所示。

PS C:\Users\Peter> Get-SPSite "http://teams" | select *

ApplicationRightsMask                 : FullMask
ID                                    : cbf3290e-000e-4768-953c-99a983430283
SystemAccount                         : SHAREPOINT\system
Owner                                 : CONTOSO\spadmin
SecondaryContact                      : CONTOSO\peter
GlobalPermMask                        : FullMask
IISAllowsAnonymous                    : False
Protocol                              : http:
HostHeaderIsSiteName                  : False
HostName                              : teams
Port                                  : 80
...(not all output shown)
AllowDesigner                         : True
AllowRevertFromTemplate               : False
AllowMasterPageEditing                : False
ShowURLStructure                      : False

若要获取您的服务器场中所有网站集的列表,以及存储它们的内容数据库的名称(仅提供网站集的 URL 和内容数据库名称的输出),请使用以下示例中所示的命令,其中还显示了示例输出。

PS C:\Users\peter> Get-SPSite | select url, contentdatabase

Url                                     ContentDatabase
---                                     ---------------
http://MySite                           SPContentDatabase Name=Contoso_MySiteDB
http://MySite/personal/peter            SPContentDatabase Name=Contoso_PersonalDB
http://MySite/personal/erin             SPContentDatabase Name=Contoso_PersonalDB
http://intranet.contoso.msft            SPContentDatabase Name=Contoso_IntranetDB
http://teams                            SPContentDatabase Name=Contoso_TeamsDB
http://teams/sites/Finance              SPContentDatabase Name=Contoso_TeamsDB

使用动词

SharePoint 对其他 cmdlet 集使用您见过的常用动词;SharePoint 中还有大量您可能尚未见过的新增动词。通过使用 Get-Command cmdlet,您会再次发现这些动词,如下所示。

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort verb | group verb | sort count -descending
>><ENTER>

Count Name                      Group
----- ----                      -----
  139 Get                       {Get-PluggableSecurityTrimmer, Get-SPAccessS...
  104 Set                       {Set-SPAccessServiceApplication, Set-SPAlter...
   88 New                       {New-SPAccessServiceApplication, New-SPAlter...
   77 Remove                    {Remove-PluggableSecurityTrimmer, Remove-SPA...
   11 Update                    {Update-SPFarmEncryptionKey, Update-SPInfoPa...
   10 Add                       {Add-PluggableSecurityTrimmer, Add-SPClaimTy...
   10 Install                   {Install-SPApplicationContent, Install-SPDat...
    8 Start                     {Start-SPAdminJob, Start-SPAssignment, Start...
    8 Import                    {Import-SPBusinessDataCatalogModel, Import-S...
    8 Export                    {Export-SPBusinessDataCatalogModel, Export-S...
    8 Uninstall                 {Uninstall-SPDataConnectionFile, Uninstall-S...
    7 Disable                   {Disable-SPBusinessDataCatalogEntity, Disabl...
    6 Enable                    {Enable-SPBusinessDataCatalogEntity, Enable-...
    6 Clear                     {Clear-SPLogLevel, Clear-SPMetadataWebServic...
    5 Stop                      {Stop-SPAssignment, Stop-SPEnterpriseSearchQ...
    4 Move                      {Move-SPBlobStorageLocation, Move-SPProfileM...
    3 Initialize                {Initialize-SPContentDatabase, Initialize-SP...
    3 Upgrade                   {Upgrade-SPContentDatabase, Upgrade-SPEnterp...
    3 Backup                    {Backup-SPConfigurationDatabase, Backup-SPFa...
    3 Restore                   {Restore-SPEnterpriseSearchServiceApplicatio...
    2 Resume                    {Resume-SPEnterpriseSearchServiceApplication...
    2 Test                      {Test-SPContentDatabase, Test-SPInfoPathForm...
    2 Suspend                   {Suspend-SPEnterpriseSearchServiceApplicatio...
    2 Revoke                    {Revoke-SPBusinessDataCatalogMetadataObject,...
    2 Mount                     {Mount-SPContentDatabase, Mount-SPStateServi...
    2 Grant                     {Grant-SPBusinessDataCatalogMetadataObject, ...
    2 Dismount                  {Dismount-SPContentDatabase, Dismount-SPStat...
    1 Merge                     {Merge-SPLogFile}
    1 Receive                   {Receive-SPSharedServiceApplicationInfo}
    1 Disconnect                {Disconnect-SPConfigurationDatabase}
    1 Unpublish                 {Unpublish-SPServiceApplication}
    1 Connect                   {Connect-SPConfigurationDatabase}
    1 Rename                    {Rename-SPServer}
    1 Restart                   {Restart-SPEnterpriseSearchQueryComponent}
    1 Copy                      {Copy-SPBusinessDataCatalogAclToChildren}
    1 Ping                      {Ping-SPEnterpriseSearchContentService}
    1 Publish                   {Publish-SPServiceApplication}

显而易见,最常见的与 SharePoint 相关的动词包括

  • Get 查询特定对象或对象集,检索与该对象有关的信息。例如,您可以使用它检索有关所有服务应用程序的信息。只有 Get 命令可返回一个或多个对象;对于所有其他命令,都是一次针对一个对象运行。

    Get-SPServiceApplication

  • Set 修改对象的特定设置。例如,您可以使用它设置特定网站集的网站集所有者。

    Set-SPSite http://teams -OwnerAlias contoso\peter

  • New 创建对象的新实例,例如创建新网站集。

    New-SPSite http://teams/sites/HR -OwnerAlias contoso\peter
    -Name "HR Team" -Template STS#0
    
  • Remove 删除对象的实例,例如网站集及其所有子网站。鉴于该动词的危险性质,通常必须使用 -confirm 参数确认该操作。如果该参数不存在,您将看到一条要求您确认该操作的信息,如下所示。

    PS C:\Users\Peter> Remove-SPSite http://teams/sites/HR
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Remove-SPSite" on Target "http://teams/sites/Finance".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
    (default is "Y"):y
    

此处显示的示例中使用了参数。这些参数是使用连字符 (-) 作为前缀的词。在下一节中,您将看到 Get-Help cmdlet,并了解它如何帮助您找到有关这些参数的详细信息,包括对不同 cmdlet 可以使用哪些参数。

获取帮助

Windows PowerShell 包含大量内置帮助系统,通过在命令行界面键入 help,可以迅速访问它。help 是 Get-Help cmdlet 的别名。通过键入 Get-Help Get-Help,甚至可以获取有关 Get-Help 的帮助。此类命令的输出会列出该 cmdlet 的说明、该 cmdlet 使用的语法、参数说明、示例和其他相关注释。您还可以使用 Get-Help cmdlet 获取基本 Windows PowerShell 语言的帮助。例如,您可以使用以下命令获取有关特定主题的帮助:Get-Help foreach、Get-Help 子字符或 Get-Help 变量。

备注

了解 Windows PowerShell 的最佳方法是使用其内置帮助系统。如果您或您的开发人员要创建新的 Windows PowerShell cmdlet,请确保创建自己的帮助文件。除了内置帮助以外,Internet 上还有许多资源。例如,您可以从 https://www.primaltools.com/downloads/communitytools/(该链接可能指向英文页面) 中下载免费的 32 位或 64 位 Windows PowerShell Help 2.0。

帮助文件

通过使用安装在服务器上的可扩展标记语言 (XML) 文件,Get-Help 可找到要显示的信息。在安装 SharePoint 时,帮助文件已随 Windows PowerShell 管理单元一起安装。在 %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\CONFIG\PowerShell\Help or %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\CONFIG\PowerShell\Help\<locale> 中可找到这些文件,其中 locale 用于定义计算机的语言,例如 en-us。这些文件使用命名约定 <dll 文件名>-help.xml,例如 Microsoft.SharePoint.PowerShell.dll-help.xml、Microsoft.SharePont.Search.dll-help.xml 和 Microsoft.Office.Access.Server.dll-help.xml。通过键入以下内容,您可以了解哪些 cmdlet 使用哪个 XML 帮助文件:

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort helpfile, name |
>>Format-Wide name -column 2 -groupby helpfile | more
>><ENTER>

  

   :

Get-SPExcelBlockedFileType        Get-SPExcelDataProvider  
Remove-SPExcelDataProvider        Remove-SPExcelUserDefinedFunction
Set-SPExcelFileLocation

   HelpFile: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
\14\CONFIG\PowerShell\Help\microsoft.office.access.server.dll-help.xml

Get-SPAccessServiceApplication    New-SPAccessServiceApplication 
Set-SPAccessServiceApplication

   HelpFile: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
\14\CONFIG\PowerShell\Help\Microsoft.Office.Excel.Server.MossHost.dll-help.xml

Get-SPExcelDataConnectionLibrary   Get-SPExcelFileLocation
Get-SPExcelServiceApplication      Get-SPExcelUserDefinedFunction
New-SPExcelBlockedFileType         New-SPExcelDataConnectionLibrary
New-SPExcelDataProvider            New-SPExcelFileLocation
New-SPExcelServiceApplication      New-SPExcelUserDefinedFunction
Remove-SPExcelBlockedFileType      Remove-SPExcelDataConnectionL...
Remove-SPExcelFileLocation         Set-SPExcelDataConnectionLibrary
Set-SPExcelDataProvider            Set-SPExcelServiceApplication  
-- More -

ISE 帮助

除了命令行帮助功能以外,还有位于 %SystemRoot%\Help\mui\<LCID> 中的图形帮助文件 (WindowsPowerShellHelp.chm),其中 LCID 是安装的区域设置标识符或语言,例如 0409。在使用 ISE 时,可以访问图形帮助文件,具体方法是:选择需要帮助的命令,然后按 F1。将打开 chm 文件,并显示该命令的帮助,如图 5-4 所示。

不过,chm 文件仅包含核心 Windows PowerShell cmdlet 的帮助。如果需要特定于 SharePoint 的帮助,应该使用 SharePoint 2010 Management Shell 和 Get-Help cmdlet。

提示

有关 Windows PowerShell 中的帮助功能和如何将其配置为显示别名帮助,或者如何禁用本地帮助并强制 ISE 直接获取 TechNet 中的帮助的详细信息,请参阅 https://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2009/01/31/using-help-in-powershell-ise.aspx(该链接可能指向英文页面)。Microsoft 建议您始终查看联机帮助来查找最新信息和示例。在使用 Get-Help 命令时,您可在“相关链接”一节中找到指向联机版本的链接。

Windows PowerShell 帮助

图 5-4 Windows PowerShell 图形帮助

使用参数

若要查找可对 cmdlet 使用的参数,请键入 Get-Help <cmdlet> 或 Get-Command <cmdlet> -syntax,其中 <cmdlet> 是所需参数信息的相关 cmdlet 的名称。例如,Get-Help New-SPSite 或 Get-Command New-SPSite -syntax 将向您提供有关与 New-SPSite 关联的参数的信息。Get-Help cmdlet 也具有几个与其关联的参数,根据所需信息量,您可以将它们用于 Get-Help 命令。如果很清楚地了解某 cmdlet,并且不需要有关该 cmdlet 执行操作的描述性说明,则您可能只需要查看有关如何使用该 cmdlet 的一些示例,在此情况下,可键入 Get-Help New-SPSite -examples。

若要了解要用于某 cmdlet 的参数,请查看帮助结果的语法部分,如以下输出所示。可选参数位于方括号 ([ ]) 内,而要传递给这些参数的值位于尖括号 (<>) 内。以下示例显示了 Get-SPSite cmdlet 的语法部分。

SYNTAX
    Get-SPSite [-AssignmentCollection <SPAssignmentCollection>] 
    [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>] [-Limit <String>]
    [-WebApplication <SPWebApplicationPipeBind>] [-WhatIf [<SwitchParameter>]]
    [<CommonParameters>]

    Get-SPSite -Identity <SPSitePipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-Regex <SwitchParameter>] [-WhatIf [<SwitchParameter>]]
    [<CommonParameters>]

    Get-SPSite -ContentDatabase <SPContentDatabasePipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-WhatIf [<SwitchParameter>]] [<CommonParameters>]

    Get-SPSite -SiteSubscription <SPSiteSubscriptionPipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-WhatIf [<SwitchParameter>]] [<CommonParameters>]

请注意,使用 Get-SPSite 的方法有四种,每个语法均包含 -AssignmentCollection 参数。该 -AssignmentCollection 参数与内置 SharePoint cmdlet 的重要内容有关,本章后面显示的标题为“使用 Windows PowerShell 时的内存注意事项”的边栏中将详细分析该内容。

以上列表中显示的第一个语法示例没有强制参数,因此 Get-SPSite cmdlet 的范围为服务器场或 Web 应用程序。其他三个语法都有强制参数,该参数用于将范围定义为网站集、内容数据库或订阅共享设置、功能和服务的网站集的集合,如以下代码所示。鉴于其他 SPSite cmdlet 也这样,在大型安装中,该 cmdlet 会输出大量信息,并且对多个内容数据库的查询会严重影响 SharePoint 服务器的性能。因此,默认情况下,输出报告仅适用于前 20 个对象。

您可以按以下示例所示使用 -limit 参数更改该输出限制,从而输出存储在 Contoso_TeamsDB 内容数据库中的所有网站集。

Get-SPSite -ContentDatabase Contoso_TeamsDB -limit all

您可以为这些范围参数提供值,或者在使用 -identity 参数时,如果该值为 URL,则可使用通配符 (*)。没有参数的默认帮助对该命令提供有限说明。

若要获取详细信息,请使用 -detailed 或 -full 参数。-full 参数提供有关参数的详细信息。例如,以下页面上显示了有关 -identity 参数的详细信息。

PARAMETERS
    -Identity <SPSitePipeBind>
        Specifies the URL or GUID of the site collection to get.

        The type must be a valid URL, in the form http://server_name or http://
        server_name/sites/sitename, or a valid GUID (for example, 12345678-90ab
        -cdef-1234-567890bcdefgh).

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?       True
        Accept wildcard characters?  false

如果查看输出的最后五行,您会看到该输出提供了有关如何使用 -identity 参数的详细信息。例如,Required 值等于 True,这表示 -identity 参数是 Get-SPSite cmdlet 的强制参数。不过,Position 值等于 1,表示如果紧接 Get-SPSite cmdlet 后放置网站集的 URL,则不必使用 -identity 参数,因为 URL 将被作为网站集的标识 (URL) 进行读取,其中将显示个人管理路径下存在的网站集的所有属性值,如以下示例所示。

Get-SPSite http://MySite/personal/* | Select *

许多参数的值都位于尖括号中,并以 PipeBind 为后缀。这表示该参数可以接受特定类型的对象变量。例如,[-ContentDatabase <SPContentDatabasePipeBind>] 表示 -ContentDatabase 参数可以接受 SharePoint 内容数据库对象,而该对象可以变量的形式传递到 ContentDatabase 对象,或者可以使用管道将其从另一个 cmdlet 的结果中输入。在使用管道将对象输送到 cmdlet 时,不需要键入或使用变量。在使用管道将对象从一个 cmdlet 输送到另一个 cmdlet 时,不必指定参数,因为 Windows PowerShell 会检查对象的类型,并使其与正确的参数匹配。以下示例列出了存储在其名称任意位置包含字符 oso 的所有内容数据库中的所有网站集。

Get-SPContentDatabase | where {$_.name -match "oso"} | Get-SPSite -Limit 50

Get-SPContentDatabase 返回一个内容数据库集合,然后您需要检查每个内容数据库,以查看其是否符合我们的条件。具有别名 where 或 ? 的 Where-object cmdlet 像循环一样运行,因此它将检查从 Get-SPContentDatabase cmdlet 返回的每个内容数据库对象。变量 $_ 表示一个内容数据库对象,而 .name 是需要为查询匹配的内容数据库属性。运算符是 -match。

Windows PowerShell 具有大量运算符,例如 -eq(等于)、-ne(不等于)、-lt(小于)、-ge(大于或等于)、-like(与通配符模式匹配)和 -notlike(与通配符模式不匹配)。-like、-notlike、-match 和 -notmatch 运算符均用于模式匹配。-match 和 -notmatch 运算符使用正则表达式确定某个值是包含还是不包含表达式的匹配项。

提示

有关 Windows PowerShell 运算符的详细信息,请参阅 William Stanek 著作:Windows PowerShell 2.0, Administrator's Pocket Consultant(《Windows PowerShell 2.0 管理员的袖珍顾问》)(Microsoft Press,2009)中第 5 章“导航核心 Windows PowerShell 结构”中的标题为“使用表达式和运算符”的一节。

要代替使用 WHERE 语句的备用方法是使用 -filter 参数,后者使用与 WHERE 语句相同的语法,并可以生成相同的结果。不过,-filter 参数是在服务器上运行。如果使用管道将 Get-SPContentDatabase cmdlet 的结果输送到 WHERE 语句,将导致 SQL 往返于 Windows PowerShell 客户端正在运行的位置。使用 -filter 参数可以提高性能,从而允许该命令利用 SQL 的筛选功能,而不是尝试本地搜索。不过,在使用 -filter 参数时,SPSite cmdlet 只能访问 Owner、SecondaryOwner 和 LockState 属性。许多 cmdlet 具有用于筛选生成输出的其他参数。例如,SPWeb 可提供参数来筛选网站模板或标题的输出。尽管如此,在许多情况下,-filter 参数可以帮助您节省时间,例如,使用 -filter 参数在包含 4300 个网站的服务器场中查找所有博客网站,大约需要 1.2 秒,但如果使用 WHERE 语句,则需要大约 15 分钟。下面是几个使用 -filter 参数的示例。

  • 该示例将返回其主要所有者的用户名为 peter 的所有网站集。

    Get-SPSite -Filter {$_.Owner -eq "contoso\peter"}

  • 该示例将返回 http://teams/sites/HR 网站集中使用“空白会议工作区”模板创建的所有网站。

    Get-SPSite http://teams/sites/HR | Get-SPWeb -Filter {$_.Template -eq "STS#03"}

备注

在创建新网站集时,如果不指定模板或找不到模板,则需要创建一个网站作为该网站集的根目录。为此,在浏览器中首次显示该网站集时,请使用 New-SPWeb 命令,或选择相应的网站模板。

若要查找安装的模板的详细信息以及相应的模板 ID,请使用 Get-SPWebTemplate cmdlet。该命令输出示例如下所示。

Name                 Title                                    LocaleId   Custom
----                 -----                                    --------   ------
GLOBAL#0             Global template                          1033       False
STS#0                Team Site                                1033       False
STS#1                Blank Site                               1033       False
STS#2                Document Workspace                       1033       False
MPS#0                Basic Meeting Workspace                  1033       False
MPS#1                Blank Meeting Workspace                  1033       False
MPS#2                Decision Meeting Workspace               1033       False
MPS#3                Social Meeting Workspace                 1033       False
MPS#4                Multipage Meeting Workspace              1033       False
CENTRALADMIN#0       Central Admin Site                       1033       False
WIKI#0               Wiki Site                                1033       False
BLOG#0               Blog                                     1033       False
SGS#0                Group Work Site                          1033       False
TENANTADMIN#0        Tenant Admin Site                        1033       False
ACCSRV#0             Access Services Site                     1033       False
ACCSRV#1             Assets Web Database                      1033       False
ACCSRV#3             Charitable Contributions Web Database    1033       False

在 Get-SPSite 和 Get-SPSiteAdministration 上,提供两个使用 SQL 驱动筛选的其他筛选器:“通配符 URL”和正则表达式 (-RegEx) 参数,例如:

  • Get-SPSite http://intranet/sites/*

  • Get-SPSite "http://intranet/(sites|teams)/HR" -RegEx

使用 Windows PowerShell 时的内存注意事项

Windows PowerShell 的默认行为是:它运行多线程环境,并且每个行、函数或脚本均在其自己的线程 ($host.Runspace.ThreadOptions == "Default") 中运行。这样会导致内存泄漏。但正如您在本章前面标题为“使用 SharePoint 2010 Management Shell”的一节中所看到的一样,SharePoint 2010 Management Shell 在第一个线程 ($host.Runspace.ThreadOptions ="ReuseThread") 中运行每个行、函数或脚本,这样可缓解问题,不过仍然会发生内存泄漏。因此,您应该了解以使用的两个 SharePoint cmdlet 是 Start-SPAssignment 和 Stop-SPAssignment。这些命令与 -SPAssignmentCollection 参数相关,您可能见过将该参数用于大量 SharePoint cmdlet 来返回“可处置的对象”。用开发人员的话说,这些对象是实现 IDisposable 接口的对象。如果错误处置这些对象,它们可导致内存泄漏。具体而言,这与 SPSite、SPWeb 和 SPSiteAdministration 对象相关。如果在一个管道中使用与这些对象关联的 cmdlet,并且不使用变量来存储这些对象,则会在管道末端自动释放使用的内存。如果有一个可获取许多对象的长管道,则会导致 SharePoint 服务器上的内存不足,进而严重影响该服务器的页面请求。

在变量中存储这三个对象中的任一对象时,之后必须释放分配给该对象的内存。以下示例显示了对变量使用这些对象的主要方法,以及如何释放内存。

  • 在使用 SPAssignment cmdlet 时,使用简单的方法,在该方法中,将所有对象保存在调用 Stop-SPAssignment cmdlet 时释放的全局内存存储区中。

    Start-SPAssignment -Global
    $sc = Get-SPSite http://intranet
    $sc.Title
    Stop-SPAssignment -Global
    
  • 在使用 SPAssignment cmdlet 时,使用高级方法,并要求该方法跟踪分配给特定变量的内存。在以下示例中,Start-SPAssignment cmdlet 将创建一个由 $o 指向的命名存储区,而变量 $sc 与该命名存储区关联,并使用 Internet 网站集对象的相关信息进行填充。Stop-SPAssignment cmdlet 随后会释放与该命名存储区关联的内存。

    $o = Start-SPAssignment
    $sc = $o | Get-SPSite http://intranet
    Get-SPSite -Limit all
    $sc.Title
    $o | Stop-SPAssignment
    
  • 如果您习惯在 SharePoint 平台上开发,则可以使用与在您的代码中使用的方法相似的方法来克服该问题。例如,在一个 Windows PowerShell 行内使用变量,并在该行结尾处置它们。

    $sc = New-SPSite("http://Intranet"); $sc.Title; $sc.Dispose()
    

    该示例将网站集对象存储在变量 $sc 中。接着,下一个命令会打印 Intranet 网站集的标题,最后一个命令会释放存储网站集对象的内存。

    备注

    使用以下语法可以安全运行这一相同命令。
    New-SPSite(http://intranet) | Select Title

请注意,此处显示的调用 SPAssignment 的简单方法也会导致内存问题。您在 Stop 和 Stop SPAssignment 命令之间获取的任何对象都会保留在全局分配存储区,并且在执行 Stop-SPAssignment cmdlet 之前不会释放它们,但在使用高级方法来调用 SPAssignment 时,在执行 Stop-SPAssignment cmdlet 之前,将只保留您要求 SPAssignment 跟踪的与变量关联的内存。因此,如果在完成任务时需要查看大量信息,并且不想使 SharePoint 服务器缺少内存,则使用 SPAssigment 的高级方法更好。您可以使用 Get-Help About_SPAssignment 查找详细信息。

用于 SharePoint Foundation 2010 的 cmdlet

SharePoint Foundation 2010 包含 240 多个与 SharePoint 相关的 cmdlet。通过键入以下命令,可找到准确数量。

@(Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell").count

这些 cmdlet 处理的最常见的对象包括 SPSite、SPServer、SPWeb、SPBusinessDataCatalogue 和 SPConfigurationDatabase 对象。由于 Windows PowerShell 主要是管理员工具,而这些组件是管理员管理的组件,因此该 cmdlet 范围是可以预料到的。也可在基于 SharePoint Foundation 构建的 SharePoint 2010 中找到这些 cmdlet。

提示

本书的辅助媒体中包含文档“Microsoft SharePoint Foundation 2010 Cmdlet 参考”。该文档包含您在 SharePoint 2010 Management Shell 中键入以下命令时将看到的输出。

PS C:\Users\Peter>Get-Command -PSSnapin Microsoft.SharePoint.PowerShell | 
>>Sort Noun, Verb | Get-Help -detailed > CmdletHelp.txt
>><ENTER>

该命令将生成一个按名词排序的 cmdlet 帮助主题列表。该列表包含每个 cmdlet 的相同帮助,您可通过键入以下命令在 SharePoint 2010 Management Shell 中查看帮助。

Get-Help <Cmdlet-Name> -detailed

该文档包含的帮助信息是生成该文档时的最新信息。Microsoft 建议您始终查看联机帮助来查找最新信息和示例。在使用 Get-Help 命令时,您可在“相关链接”一节中找到指向联机版本的链接。

用于 SharePoint 2010 的 cmdlet

如果使用上一节中所示的同一 Windows PowerShell 命令来确定 SharePoint 2010 中可用 cmdlet 的数量,您会发现有 530 多个与 SharePoint 相关的 cmdlet 与 SharePoint 2010 关联。具体而言,该数量即与完全安装的 SharePoint 2010 Enterprise Edition(未安装 FAST Search)关联的 cmdlet 的数量。若要确定 SharePoint 提供的其他 cmdlet,Windows PowerShell 可再次提供帮助。在同时安装了 SharePoint Foundation 和某版本的 SharePoint Server 的计算机上,键入以下命令,从而更改重定向文件名的名称来反映 SharePoint 安装。

PS C:\users\peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" | 
>> Sort noun, verb |group -Property noun -NoElement > cmdlet_sps.txt
>><Enter>

将这些文件复制到同一台服务器,然后键入以下命令。

PS C:\Users\Peter>Compare-Object -ReferenceObject $(Get-Content .\cmdlet_sps.txt) ' 
>>-DifferenceObject $(Get-Content .\cmdlet_spf.txt)
>><ENTER>

您将看到与以下示例相似的输出。

InputObject                                                 SideIndicator
-----------                                                 -------------
    8 SPContentDatabase                                     =>
    3 PluggableSecurityTrimmer                              <=
    3 SPAccessServiceApplica...                             <=
    9 SPContentDatabase                                     <=
    5 SPContentDeploymentJob                                <=
    4 SPContentDeploymentPath                               <=
    4 SPDataConnectionFile                                  <=
    1 SPDataConnectionFileDe...                             <=
    2 SPEnterpriseSearchAdmi...                             <=
    3 SPEnterpriseSearchLang...                             <=
    4 SPEnterpriseSearchMeta...                             <=
...

只有两次安装时都不显示的那些对象,以及每个对象的 cmdlet 计数均不同的那些对象会显示在该列表中。SideIndicator 列指示具有其 cmdlet 计数的对象来自哪个文件。

在 SharePoint 2010 中,cmdlet 处理的最常见的对象与 SharePoint Foundation 中的那些对象相似。不过,SharePoint 2010 中提供的其他主要命令是 131 个帮助您管理搜索过程的 cmdlet。(只有四个 cmdlet 与用于 SharePoint Foundation 的搜索关联)。可以键入以下命令亲自检查这一点。

PS C:\Users\Peter>@(gcm -PSSnapin "Microsoft.SharePoint.PowerShell" | 
>>where {$_.name -like "*search*"}).count
>><ENTER>

与 SharePoint Foundation 相比,SharePoint 2010 包含更多应用程序服务,例如 Excel Services、InfoPath Services、Secure Storage、State Service、Microsoft Visio 和 PerformancePoint。因此,在 SharePoint Server 场上,有更多 cmdlet 可用于创建、处理和删除应用程序服务对象。

执行基本管理任务

安装 SharePoint 时需要两种类型的管理任务:需要从任意服务器上一次完成的任务,例如创建新的 Web 应用程序、配置网站集的主要所有者,或删除特定网站;需要在特定服务器或多台服务器上多次完成的任务,例如在服务器上启动服务、从服务器场中添加或删除一台服务器,或将服务器连接到特定配置数据库。需要以 SharePoint 管理员身份完成的大多数工作属于第一种类型,登录哪台服务器不重要,因为您可以从任意服务器完成工作。

Windows PowerShell 使完成两种类型的管理任务更轻松。您可以循环大量对象,并将这些脚本合并到自动化任务中,以便用更少的时间完成管理任务。正是由于管理任务可以通过 Windows PowerShell 轻松完成,因此无论如何都不应该使其避开您可能会施加的适当控制。在这些场范围的任务中,有些任务很危险;它们会影响整个安装。在生产环境中,应对此类任务进行严格的变更管理。

重要

许多组织只允许通过远程访问生产服务器来完成管理任务。由于计算机室访问受到严格控制,因此很少允许在服务器控制台进行交互式访问(通常仅适用于与硬件有关的问题)。在这样的环境下,甚至只有少量管理计算机可以对生产服务器进行远程访问,管理员必须使用 VPN 或远程桌面才能连接到这些管理计算机。管理计算机应该配置为仅允许某些用户或 IP 地址发起远程桌面会话。如果您的情形是这样,则只应允许该管理计算机使用 Windows PowerShell 远程管理 SharePoint 安装。Windows PowerShell 具有大量内置功能,这些功能可帮助您降低影响整个 SharePoint 安装的任务的风险;可在本章前面标题为“使用 WinRM 远程管理系统”的一节中查阅这些信息。

Windows PowerShell 提供了大量 “自愿”功能,这些功能可被归类为最佳实践。在后续部分中,您将了解其中两个功能(-whatif 参数和脚本)的详细信息。

使用 -whatif 参数

Windows PowerShell 是一个强大的工具,与任何其他脚本语言一样,借用他人的代码或下载 Internet 中的代码段都相当简单。您之后可能会在完全不知道它们执行操作的情况下执行它们。通过使用签名脚本和 Windows PowerShell 执行策略,以及限制允许将脚本文件加载到 SharePoint 服务器的人员,您可以保护您的资源。

Windows PowerShell 提供了特定机制,利用它,您可以在执行命令(带 -whatif 参数)之前尝试该命令。请键入以下命令。

PS C:\Users\Peter> Get-SPSite http://teams/sites/* | Remove-SPSite -whatif

如果执行不含 -whatif 参数的命令,该命令会生成以下示例输出,该输出会列出所有网站集和在这些对象上执行的操作。

What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Sales".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Blogs".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Finance".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Wikis".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/HR".

尝试执行带 -whatif 参数的命令时,不会删除任何内容。该参数将要求 Remove-SPSite cmdlet 显示受该命令影响的对象,而不会执行该命令。在该示例中,将显示将永久删除的对象。

生成脚本

利用一对 Windows PowerShell cmdlet(Start-Transcripts 和 Stop-Transcripts),您可以记录您在提示符处键入的所有命令,以及输出。可记录介于 start 和 stop 命令之间的所有活动。如果不键入 stop,该脚本将在控制台会话终止时终止。这一点在生产环境中很有用,在该环境中,计算机范围的配置文件可以包含用于记录所有用户的 Windows PowerShell 活动的 Start-Transcript cmdlet。在脚本文件记录退出控制台时,该记录即完成。

重要

不要在生产环境中先使用 Windows PowerShell cmdlet 或脚本。此外,应尽量简化脚本,不要在脚本即将由刚使用 Windows PowerShell 的管理员提供支持时使用或创建别名,并且在创建或修改脚本时,应始终使用 Windows PowerShell 注释。

实际环境:如果不使用 –whatif 参数,该怎么办?

有时,甚至经验丰富的 IT 专业人员也会误用内置 cmdlet,导致严重后果,特别是在与管道字符结合使用 cmdlet 时。例如,如果键入 Get-SPSite | Remove-SPSite,则服务器场中的所有网站集都会被永久删除。一切内容(列表和库中的所有数据,以及网站中的所有内容)都会完全消失。该操作导致的一个可能结果是:所有技术支持电话将立即响起。如果消失的其中一个网站是主要电子商务 Internet 网站,则贵公司会迅速损失大量资金,可能更重要的是,公司会丢失可能一去不返的潜在客户。若要还原服务器场,将需要最近的完好备份磁带。该示例的教训很简单:始终先使用 –whatif 参数!

SharePoint 管理任务的示例

有许多管理任务必须每天完成,而某些管理任务仅需要偶尔完成,并且还有很少需要的少数管理任务。Windows PowerShell 可帮助完成所有类型的任务;实际上,您可能会发现对于脚本而言,很少执行的任务比每天执行的任务更重要。这可能是因为您需要快速而准确地执行此类稀有任务,因为在完成该任务时,甚至犯一个小错误也会导致灾难。在本书中,您将看到何时以及如何使用 Windows PowerShell 的诸多示例。在后续部分中,您将浏览一些您可能在别处尚未见过的示例。

提示

Microsoft 脚本中心https://gallery.technet.microsoft.com/ScriptCenter/zh-cn(该链接可能指向英文页面)中提供与 SharePoint 有关的脚本。

使用 Windows PowerShell 脚本部署 SharePoint 2010

在安装 SharePoint 期间,可能有许多只能(希望)一次完成的任务,例如安装 SharePoint 和创建您的服务器场。在具有各种环境且有许多开发人员提供支持的大型组织中,您可能会发现从头开始开发脚本时必须很谨慎,以便构建 SharePoint Web 前端 (WFE) 服务器和 SharePoint 应用程序服务器,后者可承载应用程序服务,例如 InfoPath Services 以及搜索查询和索引服务。在 SharePoint 的早期版本中,您可以使用批处理文件以及 SharePoint 命令行工具 psconfig 和 stsadm 来完成此类任务。您现在仍然可以使用这些工具来自动安装 SharePoint 2010 和 SharePoint Foundation 2010 服务器。您将在第 4 章“安装 SharePoint 2010”中找到有关使用这些工具的详细信息,因此在此不重复这些详细信息。Microsoft 已开发出一个脚本,该脚本是使用 Windows PowerShell 从头开始创建 SharePoint 场的最好方式。这些命令和参数的顺序相当复杂,因此 Microsoft 建议您使用 Windows PowerShell 模块 SPModule,如 Microsoft 的 TechNet 库使用 Windows PowerShell 安装 SharePoint Server 2010 一文中所述。

提示

有关 SharePoint 自动化和使用 psconfig、stsadm 和 Windows PowerShell 的信息,请参阅 http://stsadm.blogspot.com/(该链接可能指向英文页面)

在继续安装 SharePoint 时,您将需要合并日志。Windows 操作系统为您提供事件日志,以便帮助您完成管理任务,而您可以使用 Windows PowerShell Get-Eventlog cmdlet 从这些日志中获取详细信息。SharePoint 还提供统一日志记录服务 (ULS)。该 ULS 包含所有应用程序日志事件,也可以集成第三方日志记录软件。SharePoint 2010 包括几个用于检索信息和配置 ULS 的 Windows PowerShell cmdlet。若要查找在服务器场中配置 ULS 的方式,请键入以下命令。(此处还显示了该命令的示例输出。)

Get-SPDiagnosticConfig

AllowLegacyTraceProviders                   : False
CustomerExperienceImprovementProgramEnabled : True
ErrorReportingEnabled                       : True
ErrorReportingAutomaticUploadEnabled        : True
DownloadErrorReportingUpdatesEnabled        : True
DaysToKeepLogs                              : 14
LogMaxDiskSpaceUsageEnabled                 : True
LogDiskSpaceUsageGB                         : 3
LogLocation                                 : %CommonProgramFiles%\Microsoft Sh
                                             ared\Web Server Extensions\14\LOG
                                             S\
LogCutInterval                              : 30
EventLogFloodProtectionEnabled              : True
EventLogFloodProtectionThreshold            : 5
EventLogFloodProtectionTriggerPeriod        : 2
EventLogFloodProtectionQuietPeriod          : 2
EventLogFloodProtectionNotifyInterval       : 5
ScriptErrorReportingEnabled                 : True
ScriptErrorReportingRequireAuth             : True
ScriptErrorReportingDelay                   : 60
 AllowLegacyTraceProviders                   : FalseCustomerExperienceImprovementProgramEnabled : TrueErrorReportingEnabled                       : TrueErrorReportingAutomaticUploadEnabled        : TrueDownloadErrorReportingUpdatesEnabled        : TrueDaysToKeepLogs                              : 14LogMaxDiskSpaceUsageEnabled                 : TrueLogDiskSpaceUsageGB                         : 3LogLocation                                 : %CommonProgramFiles%\Microsoft Sh                                             ared\Web Server Extensions\14\LOG                                             S\LogCutInterval                              : 30EventLogFloodProtectionEnabled              : TrueEventLogFloodProtectionThreshold            : 5EventLogFloodProtectionTriggerPeriod        : 2EventLogFloodProtectionQuietPeriod          : 2EventLogFloodProtectionNotifyInterval       : 5ScriptErrorReportingEnabled                 : TrueScriptErrorReportingRequireAuth             : TrueScriptErrorReportingDelay                   : 60

在诊断问题时,可以使用与 SPLogEvent 对象关联的 cmdlet。您需要使用计算机管理员权限才能运行这些 cmdlet,因此您可能需要使用“以管理员身份运行”启动 SharePoint 2010 Management Shell。然后,逐步使用与以下示例中所示命令相似的命令。

  1. 例如,设置两个变量来存储起始日期和结束日期。

    $SDate = Get-Date -Day 13 -Month 04 -Year 2010
    $EDate = Get-Date -Day 14 -Month 04 -Year 2010
    

    或者,该日期为今天的日期,但事件发生的时间比当前时间大约早 15 分钟。在此情况下,将变量设置为当前时间以前的 20 分钟以及当前时间以前的 10 分钟。

    $SDate = (Get-Date).AddMinutes(-20)
    $EDate = (Get-Date).AddMinutes(-10)
    
  2. 获得介于这两个日期和时间之间的事件的列表。

    Get-SPLogEvent -StartDate $SDate -EndTime $Edate

    如果不提供 -EndTime 参数,则事件日志将显示到当前日期和时间为止。

跟踪编号(称为互联 ID)与对 SharePoint 发出的每个请求关联。该编号以值的形式存储在与 SPLogEvent 对象关联的属性中。SQL 事件探查器跟踪还会显示互联 ID。此编号显示在“错误”页中,如图 5-5 所示。

SharePoint Foundation 错误消息

图 5-5 显示互联 ID 的“错误”页

在安装的大型或常用 SharePoint 中,许多日志可能是在发生问题期间生成的。通过减少对与事件关联的那些条目返回的日志信息量,您可以使用互联 ID 来帮助排查错误。重新设置 $sdate 和 $edate 变量以反映事件时间。对于您不能重现而您的用户之一始终可以重现的事件,您可能要通知技术支持要求用户获取错误页面的屏幕快照,以确保您能够获取正确的互联 ID 号。然后,您可以使用管道将步骤 2 中显示的命令结果输送到 Where-Object cmdlet,如以下示例所示。

PS C:\Users\Peter>Get-SPLogEvent -StartDate $SDate -EndTime $EDate |
  where {$_.Correlation -eq "68bc5cf4-5a8c-4517-a879-86e35e57c862"}

该输出只显示与该互联 ID 关联的问题有关的两个日期之间的事件日志。

管理 SharePoint Services

运行 SharePoint 2010 产品配置向导在服务器上安装 SharePoint 后,您可以使用 SharePoint 2010 管理中心网站来启动场配置向导。虽然它会使您兴奋,并会以很快的速度运行,但它可能不能按需配置服务器场;例如,它创建的数据库名称的格式为 name_GUID,其中 GUID 是随机生成的全局唯一标识符。此外,该场向导还会对默认的内容 Web 应用程序使用以应用程序池标识形式输入的帐户,并默认启动 Web Analytics Service,在生产服务器场上,这两项操作可能都不适当。

如果要创建快速原型,或者如果要在开发人员环境中使用 SharePoint,则使用向导可能就足够了。不过,如果其中任何环境受限于其 CPU 功耗或具有的内存量,则场向导可能不适用。例如,Web Analytics Service 使用大量 CPU,因此开发人员可能很想停止该服务。还有一些他们可能希望定期启动和停止的其他服务(尤其是在他们使用其计算机作为日常桌面连接时),他们可通过这些服务读取电子邮件、完成文档以及运行 SharePoint 进行开发或提供原型。

您可以使用工具(例如管理中心网站)来管理配置;不过,您可能会忘记执行完成配置更改所必需的全部任务。您可以改用 Windows PowerShell 脚本,(在您对其进行测试,以确保没有忘记任何任务后)该脚本将更加可靠无误地管理配置更改。在开发脚本后,您应该将这些脚本存储在一个集中位置,以便管理员能够使用这些脚本并将其合并到他们的环境中。您的开发人员也会感谢您开发这些脚本。这样的自动化任务可能包括以下项目。

  • 若要快速删除特定 Web 应用程序,请键入

    Get-SPWebApplication http://teams | Remove-SPWebApplication –Confirm

  • 若要删除 Web 应用程序、IIS 网站和所有关联的数据库,请键入

    Remove-SPWebApplication http://teams –Confirm –DeleteIISSite ' -RemoveContentDatabases

如果不运行场配置向导,您可能会发现您需要使用一个最初认为不需要的服务。例如,如果没有启动任何应用程序服务,然后尝试使用其中一个 SharePoint 2010 工作流,则不会显示工作流进度的 Microsoft Visio 图表。不过,若要解决该问题,必须执行比创建 Visio Service 应用程序更多的操作。还涉及其他依赖项,其中一个依赖项是 State Service 应用程序。只能使用场向导(作为管理员,您希望避免使用的对象)在管理中心网站中创建 State Service。若要使用 Windows PowerShell 创建 State Service,请键入以下命令。

PS: C:\Users\Peter>New-SPStateServiceDatabase -Name Contoso_StateService_DB |
>>New-SPStateServiceApplication -Name Contoso_StateService |
>>New-SPStateServiceApplicationProxy -Name Contoso_StateService_Proxy -Default
>><ENTER>

备注

如果关联的服务实例没有运行,表明该命令可能不能在您的环境中运行。有关更多综合脚本,请参阅 https://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=50(该链接可能指向英文页面) 上的“SP+PS 2010:用于创建服务应用程序的 PowerShell”。

每个服务应用程序都略有不同。例如,并非所有服务应用程序都需要数据库。第 7 章“扩展 SharePoint 场”包含有关此类内容的详细信息。不过,每个服务都需要一个服务应用程序代理,后者用于将 Web 应用程序连接到服务应用程序。

在升级过程中使用 Windows PowerShell

以下各节提供有关您在升级过程中发现有用的一些 Windows PowerShell 命令的信息。在第 22 章“升级到 SharePoint 2010”中,将详细介绍升级过程。

准备升级

在安装 SharePoint 2010 后以及在升级前,您可以使用 Test-SPContentDatabase cmdlet 检查 SharePoint Server 2007 数据库当前是否有问题或是否有潜在问题,例如孤立的数据、缺少网站定义、缺少功能或程序集。该 cmdlet 可以补充第 22 章中提到的升级前检查工具报告。检查这些问题不会中断安装 SharePoint,并且该 cmdlet 还可以测试 SharePoint 2010 数据库的状态,从而帮助您管理您所在环境的持续运行状况。以下示例显示了该命令及其示例输出。

Test-SPContentDatabase -name W_intranet -WebApplication http://www.contoso.msft

Category        : SiteOrphan
Error           : True
UpgradeBlocking : False
Message         : Database [W_intranet] contains a site (Id = [46ad6d70-9a5c-4d
                  e0-8daa-0f73f2466a6a], Url = [/]) whose id is already associa
                  ted with a different database (Id = [6987d2d8-6291-4ead-9eb0-
                  aefe7097a58e], name = [W_Intranet]) in the site map. Consider
                  deleting one of these sites which have conflicting ids.
Remedy          : The orphaned sites could cause upgrade failures. Try detach a
                  nd reattach the database which contains the orphaned sites. R
                  estart upgrade if necessary.

Category        : SiteOrphan
Error           : True
UpgradeBlocking : False
Message         : Database [W_intranet] contains a site (Id = [46ad6d70-9a5c-4d
                  e0-8daa-0f73f2466a6a], Url = [/]) whose url is already used b
                  y a different site, in database (Id = [6063e77c-991f-4c4b-b3a
                  c-68cb62e66502], name = [w_Internet]), in the same web applic
                  ation. Consider deleting one of the sites which have conflict
                  ing urls.
Remedy          : The orphaned sites could cause upgrade failures. Try detach a
                  nd reattach the database which contains the orphaned sites. R
                  estart upgrade if necessary.

执行升级后任务

升级过程分为两个组成部分:内容数据库升级和直观升级。通过分离这两个组成部分,SharePoint 工作组可以决定升级 Microsoft Office SharePoint Server 2007 Web 应用程序,而不使用户觉察到变化,因为他们的网站将保持原来的外观。借助浏览器,他们可以预览他们的网站使用新 SharePoint 2010 界面后的外观,然后决定何时永久切换到直观升级。在切换后,浏览器将不允许其切换回 SharePoint Server 2007 外观。

该 Set-SPWeb cmdlet 没有任何参数帮助完成该任务;您需要使用 SPWeb 对象的属性来完成该任务。如果要将网站切换回原来的外观,请键入以下命令。

Start-SPAssignment -Global
$web = Get-SPWeb http://teams ;
$web.UIVersion = 3;
$web.UIVersionConfigurationEnabled = $true;
$web.Update();
Stop-SPAssignment

备注

您在本章前面创建了变量来存储值和对象。变量名称使用美元符号 $ 作为前缀。在此处显示的示例代码中,您将看到使用的 $true。该变量与大量看似变量的其他关键字构成了特殊变量的示例。特殊变量应被视为不能在脚本中用于存储值或对象的保留字。特殊变量 $true 表示值 True,$false 表示 False,$null 表示 null,本章还使用了 $_,它包含当前的管道对象,可用于脚本块、筛选器和 Where cmdlet。

在运行这些命令后,网站将恢复 SharePoint Server 2007 外观。例如“网站操作”按钮位于右上角,而非左上角。“网站操作”菜单将提供“直观升级”选项,但在网站集级别,该选项可能未处于启用状态。若要在网站集级别启用“直观升级”选项,请使用以下命令。

$site = Get-SPSite http://teams
$site.UIVersionConfigurationEnabled = $true

在更新 SPSite 对象的属性时,没有任何更新方法;对 SPSite 属性的更改会立即生效。您可以键入以下命令行作为前两行命令的替代项。

(Get-SPSite http://teams).UIVersionConfigurationEnabled = $false

若要将网站集内的所有“工作组”网站重置回 SharePoint Server 2007 外观,请使用以下命令。

PS C:\Users\zzspfarm> Get-SPsite http://teams |
>> Get-SPWeb -Filter {$_.Template -eq "STS#0}|
>> ForEach-Object {
>> $_.UIVersion =3;
>> $_.UIVersionConfigurationEnabled = $false;
>> $_.Update();
>> }
>><ENTER>

备注

也可以在尚未升级的网站或网站集(即以版本 4 网站形式创建的网站)上运行这些命令,从而使 SharePoint 2010 网站看起来像 SharePoint 2007 网站。

摘要

本章介绍如何熟悉 SharePoint 2010 引入的新 Windows PowerShell cmdlet。本章将浏览 SharePoint 2010 Management Shell,以及如何使用一行 Windows PowerShell 命令完成一些简单但强大的管理任务。

现有 500 多个 SharePoint cmdlet。本章不可能介绍其中每个命令;其目标是提供一些有关在生产环境中使用 SharePoint PowerShell(例如配置和使用远程管理、自愿使用脚本和使用 –whatif 参数)的一般准则和良好实践。您不应该在生产环境中先实践或试验 Windows PowerShell 命令。如果您的脚本即将由不熟悉 Windows PowerShell 的管理员提供支持,请简化这些脚本,使用注释评注脚本,并且不要使用或创建别名。

本章详细介绍了两个重要的 cmdlet:Start-SPAssignment 和 Stop-SPAssignment。这些 cmdlet 能够为返回可处置的对象(例如 SPSite、SPWeb 和 SPSiteAdministration)的 cmdlet 提供帮助信息。引入其他 SharePoint cmdlet 旨在扩展您对 Windows PowerShell 技术的认识。第 12 章基于本章并使用搜索方案编写而成。下一章将继续讨论 SharePoint 2010 场管理,并具体介绍管理中心界面。