質問

まず、これが明らかな質問である場合、私は多くを検索しましたが、解決策を見つけることができません。

私が開くとき 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 そして、私はサイトコレクションの主要な管理者です。

enter image description here

ここでは、私が実行するコマンドとエラーが表示されます。

enter image description here

編集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
  }
}
ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top