Spsite.allwebs devuelve error
-
16-10-2019 - |
Pregunta
En primer lugar, lo siento si esta es una pregunta obvia, busqué mucho pero no puedo encontrar la solución.
Cuando abro un spsite
En PowerShell como este:
$spsite = Get-SPSite "https://adress"
Y luego trato de obtener todas las redes como así
$spsite.allwebs
Obtuve el siguiente error:
$spsite.allwebs : Exception has been thrown by the target of an invocation
+ CategoryInfo : NotSpecified: (:) [], TargetInvocationExcept
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException
No entiendo lo que estoy haciendo mal, en mi otro servidor SP funciona bien.
Gracias por adelantado,
Editar Para ser más claro sobre mi problema, publicaré 2 capturas de pantalla aquí, puedes ver que estoy conectado como sp_admin
Y soy un administrador principal en la colección del sitio.
Aquí ves los comandos que ejecuto y el error que recibo.
Edición 2
$spsite.gettype
producción:
PS C:\Users\sp_admin> $spsite.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SPSite System.Object
Solución
Creo que este es un problema sencillo de permisos. Get-Spsite le permitirá recuperar un objeto SPSITE (... al menos uno parcial) sin tener permisos para la colección de ese sitio. Pero cuando intenta acceder a la colección Allwebs, arroja un error.
Para validar esto, creo una nueva colección de sitios e hice a alguien que no sea yo los administradores de colección de sitios primario y secundario. Luego ejecuté Get-Spsite contra esa colección de sitios y devuelve el objeto SPSITE, pero cuando accedo a la colección Allwebs arrojó exactamente el mismo error que se ve arriba.
Otros consejos
Todos los permisos necesarios para corregir este error:
- Administrador de colección de sitios en el SPSIT (ya sea administrado a través de la configuración central de administración o sitio)
- PowerShell Scripting Admin:
add-spshelladmin domain\username
- PowerShell Scripting Admin en las bases de datos de contenido:
get-spcontentdatabase | add-spshelladmin domain\username
Tenga en cuenta que los comandos de PowerShell deben ser ejecutados por la cuenta de la granja (o alguien más que ya tiene estos permisos)
La sintaxis es correcta. ¿Accese a todos los sitios en la colección de sitios con el usuario que está ejecutando el aviso de PowerShell? Podría ser una cosa de acceso negada en uno de los sitios ...
¡Este código funcionó para mí!
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
$Site = Get-SPSite $siteUrl
Foreach ($web in $Site.AllWebs)
{
#do something..
$web.Dispose()
}
$Site.Dispose()
});
Ver https://stackoverflow.com/questions/13142327/cannot-get-basic-sharepoint-powershell-script-to-run
Encontré que este enfoque es muy confiable porque el mensaje de error también puede resultar de que el sitio se bloquee de la administración central. La elevación de los permisos en este escenario aún generará el error. Esto es lo que funcionó para mí.
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
}
}