SpSite.AllWebs gibt Fehler zurück
-
16-10-2019 - |
Frage
Tut mir zunächst, wenn dies eine offensichtliche Frage ist, habe ich viel gesucht, aber die Lösung nicht finden.
Wenn ich eine öffne spsite
In PowerShell wie folgt:
$spsite = Get-SPSite "https://adress"
Und dann versuche ich, alle Netze so zu bekommen
$spsite.allwebs
Ich bekomme den folgenden Fehler:
$spsite.allwebs : Exception has been thrown by the target of an invocation
+ CategoryInfo : NotSpecified: (:) [], TargetInvocationExcept
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException
Ich verstehe nicht, was ich falsch mache, auf meinem anderen SP -Server funktioniert das gut.
Danke im Voraus,
Bearbeiten Um mein Problem klarer zu machen, werde ich hier 2 Screenshots veröffentlichen sp_admin
Und ich bin primärer Administrator in der Site -Sammlung.
Hier sehen Sie die Befehle, die ich ausführte und den Fehler, den ich bekomme.
Bearbeiten 2
$spsite.gettype
Ausgang:
PS C:\Users\sp_admin> $spsite.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SPSite System.Object
Lösung
Ich denke, dies ist ein unkompliziertes Problem. Mit Get-Sspite können Sie ein Sp-Ort-Objekt (... mindestens ein teilweise) abrufen, ohne Berechtigungen für diese Site-Sammlung zu haben. Wenn Sie jedoch versuchen, auf die AllWebs -Sammlung zuzugreifen, macht sie einen Fehler.
Um dies zu validieren, erstelle ich eine neue Site -Sammlung und habe jemanden als mich zu den primären und sekundären Site -Sammlungsadministern gemacht. Ich habe dann Get-sspite gegen diese Site-Sammlung durchgeführt und es gab das Sp-Site-Objekt zurück, aber wenn ich auf die AllWebs-Sammlung zugreife, warf sie genau den gleichen Fehler wie oben.
Andere Tipps
Alle Berechtigungen, die erforderlich sind, um diesen Fehler zu korrigieren:
- Site -Sammlung -Administrator auf der Sp -Site (ob über zentrale Administrator- oder Standorteinstellungen angegeben)
- PowerShell Scripting Admin:
add-spshelladmin domain\username
- PowerShell Scripting Admin in den Inhaltsdatenbanken:
get-spcontentdatabase | add-spshelladmin domain\username
Beachten Sie, dass die Befehle von PowerShell vom Farmkonto (oder von jemand anderem, der diese Berechtigungen bereits hat), betrieben werden muss.
Die Syntax ist korrekt. Greifen Sie mit dem Benutzer, der die PowerShell -Eingabeaufforderung ausführt, auf alle Websites in der Site -Sammlung zu? Könnte ein Zugang verweigert, der auf einer der Websites verweigert wird ...
Dieser Code hat für mich funktioniert!
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
#do something..
$web.Dispose()
}
$Site.Dispose()
});
Sehen https://stackoverflow.com/questions/13142327/cannot-get-basic-sharepoint-powerShell-script-to-run
Ich fand diesen Ansatz sehr zuverlässig, da die Fehlermeldung auch aus der Site aus der zentralen Verwaltung resultieren kann. Die Erhöhung der Berechtigungen in diesem Szenario ergibt den Fehler. Hier ist, was für mich funktioniert hat.
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
}
}