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.

enter image description here

Aquí ves los comandos que ejecuto y el error que recibo.

enter image description here

Edición 2 $spsite.gettype producción:

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

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    SPSite                                   System.Object
¿Fue útil?

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
  }
}
Licenciado bajo: CC-BY-SA con atribución
scroll top