spsite.allwebsはエラーを返します
-
16-10-2019 - |
質問
まず、これが明らかな質問である場合、私は多くを検索しましたが、解決策を見つけることができません。
私が開くとき spsite
このようなPowerShellで:
$spsite = Get-SPSite "https://adress"
そして、私はそうするようなすべてのウェブを取得しようとします
$spsite.allwebs
次のエラーが発生します。
$spsite.allwebs : Exception has been thrown by the target of an invocation
+ CategoryInfo : NotSpecified: (:) [], TargetInvocationExcept
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException
私が間違っていることがわかりません。他のSPサーバーでは、これは正常に機能します。
前もって感謝します、
編集 私の問題についてもっと明確にするために、ここに2つのスクリーンショットを投稿します。 sp_admin
そして、私はサイトコレクションの主要な管理者です。
ここでは、私が実行するコマンドとエラーが表示されます。
編集2
$spsite.gettype
出力:
PS C:\Users\sp_admin> $spsite.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SPSite System.Object
解決
これは簡単な許可の問題だと思います。 get-spsiteを使用すると、そのサイトコレクションに許可を得ることなく、SPSiteオブジェクト(...少なくとも部分的なオブジェクト)を取得できます。しかし、AllWebsコレクションにアクセスしようとすると、エラーが発生します。
これを検証するために、新しいサイトコレクションを作成し、私以外の誰かをプライマリおよびセカンダリサイトコレクション管理者にしました。次に、そのサイトコレクションに対してget-spsiteを実行し、Spsiteオブジェクトを返しますが、Allwebsコレクションにアクセスすると、上記とまったく同じエラーを投げました。
他のヒント
このエラーを修正するために必要なすべての許可:
- SPSiteのサイトコレクション管理者(中央管理者またはサイト設定を介して与えられているかどうか)
- PowerShellスクリプト管理者:
add-spshelladmin domain\username
- コンテンツデータベースのPowerShellスクリプト管理者:
get-spcontentdatabase | add-spshelladmin domain\username
PowerShellコマンドは、ファームアカウント(またはこれらの許可をすでに持っている他の誰か)によって実行されなければならないことに注意してください。
構文は正しいです。 PowerShellプロンプトを実行しているユーザーを使用して、サイトコレクション内のすべてのサイトにアクセスできますか?サイトの1つでアクセス拒否されたものかもしれません...
このコードは私のために機能しました!
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
#do something..
$web.Dispose()
}
$Site.Dispose()
});
見る https://stackoverflow.com/questions/13142327/cannot-get-basic-sharepoint-powershell-script-to-run
このアプローチは、エラーメッセージが中央管理からロックされていることからもエラーメッセージが生じる可能性があるため、非常に信頼できることがわかりました。このシナリオでの権限の昇格は、エラーが引き続き生成されます。これが私のために働いたものです。
try{
$allWebs = ($site | Select-Object -ExpandProperty AllWebs)
foreach($web in $allWebs){
# do something
}
} catch {
if($_.Exception.Message -match "Access to this Web site has been blocked."){
Write-Warning "`nSite Collection Locked: '{0}'`n" -f $site.Url
} else {
# something else is needed like script access to db or site collection full control
}
}