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

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

在代码的后面,它具有:
$site = new-object Microsoft.SharePoint.SPSite $url;

我收到以下错误:



如果直接从提示符处运行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();

但这会中断(如果您必须先启动一个新的PS session ,那么这是一个问题。该函数是否在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中。

最佳答案

此程序集是否可能不在GAC中?如果不是,则需要在PowerShell安装目录中LoadWithPartialName才能找到它。仅供引用,不推荐使用LoadWithPartialName方法。如果您使用的是PowerShell V2,请尝试在文件系统上找到SharePoint.dll,然后使用Add-Type例如:

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

关于sharepoint - 在PowerShell中,虽然我调用LoadWithPartialName,但对象未加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9929452/

10-16 10:29