我有一个简单的PowerShell脚本,旨在操纵Sharepoint 2010.我已将其剥离到最低限度以说明问题。
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”循环时失败(因此Snap-in加载OK并且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
问题不在于行:1脚本,消息引用行:我输入的命令中的1运行它(我更改了脚本的名称,并且字符:12相应地更改)。如我所说,错误是由foreach循环生成的,代码出现在网络上的许多示例中,因此我的本地SharePoint存在一些问题。有什么建议吗?
答案 0 :(得分:4)
这是一个迟到的答案,但我是从谷歌搜索来到这里的,我想为以后的访问者解决这个问题。
此处描述完全相同的问题/原因:https://sharepoint.stackexchange.com/questions/17247/spsite-allwebs-returns-error
基本上,这是一个权限问题。如果您添加了正在运行脚本的帐户以了解相关网站集的权限,则此错误应该消失。
答案 1 :(得分:1)
尝试此更改:
$siteURL = "http://intranet/"
$site = Get-SPWeb($siteURL)
foreach ($web in $site.Site.AllWebs)
答案 2 :(得分:0)
使用提升权限块解决了我。 另外,不要忘记处理sharepoint SPSite和SPWeb对象。
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
#do something..
$web.Dispose()
}
$Site.Dispose()
});
答案 3 :(得分:-1)
错误消息中的 FullyQualifiedErrorId 可能会提示问题的根本原因?
这似乎表明$ siteURL需要包含FQDN。也许代替$siteURL = "http://intranet/"
,您需要 $siteURL = "http://intranet.yourdomain.com"
。