Question

Tout d'abord désolé si cela est une question évidente, je recherche beaucoup, mais ne peut pas trouver la solution.

Quand j'ouvre un spsite dans Powershell comme ceci:

 $spsite = Get-SPSite "https://adress"

Et puis j'essaie d'obtenir toutes les âmes comme si

 $spsite.allwebs

je reçois l'erreur suivante:

$spsite.allwebs : Exception has been thrown by the target of an invocation
+ CategoryInfo          : NotSpecified: (:) [], TargetInvocationExcept
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException

Je ne comprends pas ce que je fais mal, sur mon autre serveur SP cela fonctionne très bien.

Merci à l'avance,

Modifier Pour être plus clair au sujet de mon problème, je vais poster 2 screenshots Ici vous pouvez voir que je suis connecté en tant sp_admin et je suis administrateur principal de la collection de sites.

entrer image description ici

Ici, vous voyez les commandes et j'exécutons l'erreur que je reçois.

entrer image description ici

Edit 2 Sortie $spsite.gettype:

PS C:\Users\sp_admin> $spsite.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    SPSite                                   System.Object
Était-ce utile?

La solution

Je pense que cela est un problème de permissions simple. Get-SPSite vous permettra de récupérer un objet SPSite (... au moins une partie) sans avoir des autorisations à cette collection de sites. Mais lorsque vous essayez d'accéder à la collection AllWebs il renvoie une erreur.

Pour valider cela, je crée une nouvelle collection de sites et a fait un autre que moi les admins de collection de sites primaire et secondaire. Je puis couru Get-SPSite contre cette collection de sites et renvoyer l'objet SPSite, mais quand j'accéder à la collection AllWebs jetai exactement la même erreur que vous voyez ci-dessus.

Autres conseils

Toutes les autorisations nécessaires pour corriger cette erreur:

  • administrateur du site Collection sur le SPSite (que ce soit donnée par Paramètres administrateur central ou site)
  • PowerShell script admin: add-spshelladmin domain\username
  • admin script PowerShell sur les bases de données de contenu: get-spcontentdatabase | add-spshelladmin domain\username

Notez que les commandes doivent être exécutées powershell par le compte de la batterie (ou quelqu'un d'autre qui a déjà ces autorisations)

La syntaxe est correcte. Avez-vous accès à tous les sites de la collection de sites avec l'utilisateur qui exécute l'invite Powershell? Peut-être un accès refusé chose sur l'un des sites ...

Ce code a fonctionné pour moi!

[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
#do something..
$web.Dispose()
}   
$Site.Dispose()
});  

Voir https://stackoverflow.com/questions/13142327/ ne peut-get-basic sharepoint à powershell-script run

Je trouve cette approche très fiable, car le message d'erreur peut également provenir du site étant verrouillée de l'administration centrale. autorisations dans ce scénario d'élévation sera toujours donné l'erreur. Voici ce qui a fonctionné pour moi.

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
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top