【问题标题】:Applying a custom webtemplate to a sitecollection works on powershell ise and not on powershell console将自定义 Web 模板应用于网站集适用于 powershell ise,而不适用于 powershell 控制台
【发布时间】:2010-10-07 17:30:14
【问题描述】:

我正在开发一个用于部署共享点项目的自动化脚本。我正在使用创建站点时必须应用的沙盒级 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,版本 = 1.0.0.0,文化 = 中性,PublicK eyToken=534c125b45123456' 或其依赖项之一。系统找不到 指定的文件。” 在 C:\Build\SharePointBuild.p s1:318 字符:37 + $site.OpenWeb().ApplyWebTemplate

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: sharepoint powershell powershell-ise


    【解决方案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。

    【讨论】:

    • 感谢您的回复!由于我有 64 和 x86 的 powershell 可执行文件,我认为两者都在 64 位上工作。我在打开powershell时尝试了-sta参数,它不起作用。不过,我会试试你的方法
    • 在这种情况下,您可以尝试使用 Windows SDK 中的 fuslogvw.exe 工具。它将显示有关程序集加载失败的更多信息。以下是有关如何使用此工具的帮助主题:msdn.microsoft.com/en-us/library/e74a18c4%28VS.71%29.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2019-08-31
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多