在企业环境中,SharePoint 2013 提供了一种称为“应用模型”的新方式来扩展和定制网站功能。这种模型包括两个主要部分:一个直接部署到 SharePoint 2013 站点的 SharePoint 应用,以及一个单独部署的 Web 应用程序。如果这个 Web 应用程序是基于 ASP.NET 的,可以使用 Visual Studio 2013 的 Office 开发者工具来创建这个“提供者托管应用”的两个组成部分。
尽管SharePoint2013 提供了丰富的扩展性,但是部署和发布一个提供者托管的应用可能是一个复杂且耗时的过程。MSDN 上有一篇详细的文章,解释了发布 SharePoint 提供者托管应用所需的过程和步骤。
在 SharePoint 2013 环境中注册应用的标准过程是使用 appregnew.aspx
页面(例如:http://sitecollection/_layouts/15/appregnew.aspx),并生成一个客户端 ID,这个 ID 用于在 SharePoint 和提供者托管应用之间建立通信,实现高信任关系。
然而,当组织内有多个环境(如开发、测试、验收、生产环境)时,这种生成客户端 ID 的方法可能会变得繁琐。不想让应用管理员在安装过程中因为生成客户端 ID 而感到困扰,也不想让他们在多个地方(如 .app 包、web.config 等)更改它。
不仅如此,当多个开发者共同工作时,他们都需要为各自的机器生成自己的客户端 ID,这可能会导致混乱。已经检入的 web.config 和源代码控制器中的 app 包可能会造成不必要的混乱。
为了解决这个问题,PowerShell可以提供帮助,通过生成一个客户端 ID 并使用它在不同环境中注册 SharePoint 应用。是的,不仅仅是在 DTAP 环境中,还可以在多个开发者的机器上共同工作于一个产品。
下面是一个PowerShell脚本片段,它可以自动化整个注册应用的过程,并使用给定的客户端 ID 安装它到 SharePoint。
$clientID = "74599670-eb74-4348-9e7a-f9dc07c576a2"
$appFile = "C:\Temp\MyApp.app"
$siteCollection = "http://manasbhardwaj.net"
$appName = "My App"
$web = Get-SPWeb -Identity $siteCollection
$realm = Get-SPAuthenticationRealm -ServiceContext $web.Site;
$appIdentifier = $clientID + '@' + $realm;
# Register the App with given ClientId
Register-SPAppPrincipal -DisplayName $appName -NameIdentifier $appIdentifier -Site $web | Out-Null
$app = Import-SPAppPackage -Path $appFile -Site $siteCollection -Source ObjectModel -Confirm:$false
# Install the App
Install-SPApp -Web $siteCollection -Identity $app | Out-Null
这个脚本使用了 Register-SPAppPrincipal
命令,这个命令允许本地或 SharePoint Online 管理员注册一个应用主体,这意味着也可以使用它来为 Office 365 注册应用。