将自定义 Web 模板应用到网站集适用于 powershell ise,但不适用于 powershell 控制台

发布于 2024-09-26 16:58:10 字数 950 浏览 2 评论 0原文

我正在开发一个用于部署共享点项目的自动化脚本。我正在使用沙箱级别的 Web 模板,在创建站点时必须应用该模板。我在这样做时遇到了很多麻烦,因为似乎 sharepoint 缓存了 web 模板列表,而 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,版本= 1.0.0.0,文化=中性,PublicK eyToken=534c125b45123456' 或其依赖项之一。系统找不到 e 文件指定。” 在 C:\Build\SharePointBuild.p s1:318 字符:37 + $site.OpenWeb().ApplyWebTemplate <<<<< ($web_template_name) + 类别信息:未指定:(:) []、ParentContainsErrorRecordE 异象 + FullQualifiedErrorId : DotNetMethodException

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

有什么想法吗?谢谢!

I'm working on a automated script for deploying sharepoint projects. I'm using a sandbox level webtemplate that must be applied when de site is created. I had a lot of troubles doing that because it seems like sharepoint caches the list of webtemplates and get-spwebtemplate doens't find the new added one. The way I made it work is this:

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

As you can see, I'm using the .net sharepoint api instead of the cmdlets. This works sweet in PowerShell ISE but in the PowerShell console it throws an exception regarding a referenced DLL:

Exception calling "ApplyWebTemplate" with "1" argument(s): "Could not load file
or assembly 'XXX.SharePoint.Common, Version=1.0.0.0, Culture=neutral, PublicK
eyToken=534c125b45123456' or one of its dependencies. The system cannot find th
e file specified."
At C:\Build\SharePointBuild.p
s1:318 char:37
+ $site.OpenWeb().ApplyWebTemplate <<<< ($web_template_name)
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordE
xception
+ FullyQualifiedErrorId : DotNetMethodException

The assembly is perfectly registered in the GAC when installing the web template sandbox solution in the sitecollection.

Any ideas? thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

中性美 2024-10-03 16:58:10

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

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

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

Is there any chance you are running 64-bit ISE and 32-bit PowerShell console (or vice-versa)? If it's not that then another difference is that ISE runs in COM STA mode whereas PowerShell Console runs in MTA by default. This would only matter if SharePoint uses COM under the covers (which I think it does). You could verify this by running PowerShell Console in STA mode like so:

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

Assuming you're on PowerShell 2.0 for the Start-Process cmdlet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文