Вопрос

Прежде всего, извините, если это очевидный вопрос, я много искал, но не могу найти решение.

Когда я открываю 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 Scripting Admin: add-spshelladmin domain\username
  • Администратор сценариев PowerShell в базах данных контента: get-spcontentdatabase | add-spshelladmin domain\username

Обратите внимание, что команды PowerShell должны управлять учетной записью фермы (или кем -то еще, у кого уже есть эти разрешения)

Синтаксис правильный. Вы получаете доступ ко всем сайтам в коллекции сайтов с пользователем, который выполняет подсказку PowerShell? Может быть, доступом отказано на одном из сайтов ...

Этот код сработал для меня!

[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