在PowerShell中,虽然我调用了LoadWithPartialName,但是没有加载对象

时间:2012-03-29 16:25:16

标签: sharepoint powershell wss-3.0

我有一个从PS提示符执行的.ps1文件。在文件的顶部我有:

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

以后在代码中,它有:

$site = new-object Microsoft.SharePoint.SPSite $url;

我收到以下错误:

  

无法找到类型[Microsoft.SharePoint.SPWeb]:请确保   加载包含此类型的程序集。

如果我直接从提示符运行LoadWithPartialName语句,那么我可以执行脚本。

我做错了什么?

- 更新 -

当我删除空格时,制作代码:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

错误未更改,因为LoadWithPartialName正在执行且没有错误。

- 新信息 -

它与添加带有SPWeb类型参数的函数有关。

这有效:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

这有效:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
function doSomething(){ }
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

但是这会打破if(你必须在问题出现之前开始一个新的PS会话。此外,如果函数在SPSite的第一次实例化之前或之后无关紧要:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
function doSomething(    [Microsoft.SharePoint.SPWeb] $web  ){ }
$url = "http://siteurl/"
$site = new-object Microsoft.SharePoint.SPSite $url;
$site.Dispose();

我认为一个辅助解决方法是不输入参数或将负载放在另一个ps1中。

1 个答案:

答案 0 :(得分:2)

此程序集是否可能不在GAC中?如果没有,那么它需要在PowerShell安装目录中为LoadWithPartialName找到它。仅供参考,LoadWithPartialName方法已过时,不推荐使用。如果您使用的是PowerShell V2,请尝试在文件系统上找到SharePoint.dll并使用Add-Type例如:

Add-Type -Path <path>\Microsoft.SharePoint.dll