2

我有一个用于操作 Sharepoint 2010 的简单 powershell 脚本。我已将其精简到最低限度以说明问题。

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$siteURL = "http://intranet/"
$site = Get-SPSite($siteURL)

foreach ($web in $site.AllWebs) {
    Write-Host "Inspecting " $web.Title
}

当我引入“foreach”循环时它失败了(因此管理单元加载正常并且 Get-SPSite($siteURL) 似乎不会导致错误)。

错误信息是

C:\temp\sp_dm.PS1 : Exception has been thrown by the target of an invocation.
At line:1 char:12
+ .\sp_dm.PS1 <<<<
    + CategoryInfo          : NotSpecified: (:) [sp_dm.PS1], TargetInvocationExceptio
    + FullyQualifiedErrorId : System.Reflection.TargetInvocationException,sp_dm.PS1

问题不在于脚本的 line:1,消息指的是我键入运行它的命令的 line:1(我更改了脚本的名称,并且 char:12 相应地更改了)。但是正如我所说,错误是由 foreach 循环生成的,并且代码出现在网络上的许多示例中,因此我的本地 SharePoint 有一些问题。有什么建议么?

4

4 回答 4

4

这是一个迟到的答案,但我是通过谷歌搜索来到这里的,我想为任何未来的访问者解决这个问题。

此处描述了完全相同的问题/原因:https ://sharepoint.stackexchange.com/questions/17247/spsite-allwebs-returns-error

基本上,这是一个权限问题。如果您添加了正在运行脚本的帐户,以了解相关网站集的权限,则此错误应该会消失。

于 2013-04-02T21:09:52.963 回答
1

试试这个改变:

$siteURL = "http://intranet/"
$site = Get-SPWeb($siteURL)

    foreach ($web in $site.Site.AllWebs)
于 2012-10-30T15:31:57.650 回答
0

通过使用提升的权限块为我解决了问题。另外,不要忘记处理 sharepoint SPSite 和 SPWeb 对象。

[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
    #do something..
    $web.Dispose()
}   
$Site.Dispose()
}); 
于 2016-02-29T00:40:37.837 回答
-1

也许错误消息中的FullyQualifiedErrorId提示了问题的根本原因?

这似乎表明 $siteURL 需要包含 FQDN。也许而不是$siteURL = "http://intranet/"你需要$siteURL = "http://intranet.yourdomain.com".

于 2012-10-30T20:07:15.933 回答