erreur de retour SPSite.allwebs
-
16-10-2019 - |
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.
Ici, vous voyez les commandes et j'exécutons l'erreur que je reçois.
Edit 2
Sortie $spsite.gettype
:
PS C:\Users\sp_admin> $spsite.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SPSite System.Object
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
}
}