1

我正在开发一个用于部署共享点项目的自动化脚本。我正在使用创建站点时必须应用的沙盒级 web 模板。这样做我遇到了很多麻烦,因为似乎 sharepoint 缓存了 webtemplates 列表,而 get-spwebtemplate 找不到新添加的列表。我使它工作的方式是这样的:

[system.reflection.assembly]::LoadWithPartialName("Microsoft.Sharepoint")
$site= new-Object Microsoft.SharePoint.SPSite($web_application_complete_url)
$site.OpenWeb().ApplyWebTemplate($web_template_name)
$site.Dispose()

如您所见,我使用的是 .net sharepoint api 而不是 cmdlet。这在 PowerShell ISE 中很有效,但在 PowerShell 控制台中它会引发有关引用的 DLL 的异常:

使用“1”参数调用“ApplyWebTemplate”的异常:“无法加载文件或程序集 'XXX.SharePoint.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=534c125b45123456' 或其依赖项之一。系统找不到指定的文件。” 在 C:\Build\SharePointBuild.p s1:318 char:37 + $site.OpenWeb().ApplyWebTemplate <<<< ($web_template_name) + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordE xception + FullyQualifiedErrorId : DotNetMethodException

在站点集合中安装 Web 模板沙盒解决方案时,程序集已在 GAC 中完美注册。

有任何想法吗?谢谢!

4

1 回答 1

1

您是否有机会运行 64 位 ISE 和 32 位 PowerShell 控制台(反之亦然)?如果不是这样,那么另一个区别是 ISE 在 COM STA 模式下运行,而 PowerShell 控制台默认在 MTA 中运行。仅当 SharePoint 在幕后使用 COM(我认为确实如此)时,这才有意义。您可以通过在 STA 模式下运行 PowerShell 控制台来验证这一点,如下所示:

C:\> Start-Process PowerShell -arg -sta

假设您使用的是 PowerShell 2.0 的 Start-Process cmdlet。

于 2010-10-07T17:37:16.713 回答