Lección 5: Trabajar con TI para la gestión de permisos

Entiende cuándo involucrar al equipo de TI y cómo las herramientas automatizadas pueden ayudar a mantener los permisos a escala

⏱️ 10 minutos 👥 Enfoque empresarial 📊 Nivel de concienciación

🤝 Cuándo involucrar a tu equipo de TI

Como usuario de negocio, puedes manejar la mayor parte de la gestión diaria de permisos a través de la interfaz de SharePoint. Sin embargo, ciertos escenarios requieren soporte de TI o herramientas automatizadas:

🔔 Escala a TI cuando necesites:

  • Gestión masiva de usuarios: Añadir/eliminar más de 20 usuarios a la vez
  • Permisos entre sitios: Acceso coherente en múltiples sitios
  • Informes automatizados: Auditorías de permisos regulares e informes de cumplimiento
  • Escenarios complejos: Acceso temporal, cambios programados o requisitos personalizados
  • Solución de problemas: Cuando las herramientas estándar no pueden identificar problemas de permisos

Instalación de los módulos de PowerShell necesarios

La gestión moderna de permisos de SharePoint requiere tanto PnP PowerShell como Microsoft Graph PowerShell para gestionar grupos de Entra:

# Instalar PnP PowerShell para la gestión de SharePoint
Install-Module -Name PnP.PowerShell -Force -AllowClobber

# Instalar Microsoft Graph PowerShell para la gestión de grupos de Entra (recomendado)
Install-Module -Name Microsoft.Graph -Force -AllowClobber

# Verificar instalaciones
Get-Module -Name PnP.PowerShell -ListAvailable
Get-Module -Name Microsoft.Graph -ListAvailable

# Conectar a SharePoint
Connect-PnPOnline -Url "https://tutenant.sharepoint.com/sites/tusitio" -Interactive

# Conectar a Microsoft Graph (para gestión de grupos de Entra)
Connect-MgGraph -Scopes "Group.Read.All","Group.ReadWrite.All"
💡 Buena práctica 2025: Usa Microsoft Graph PowerShell para gestionar grupos de Entra (Azure AD) y luego asigna esos grupos a los sitios de SharePoint. Esto proporciona mejor escalabilidad y una gestión unificada en Microsoft 365.
💡 Consejo para empresas valencianas: Configura una máquina dedicada de «Administración de SharePoint» o usa Windows PowerShell ISE para una mejor gestión de scripts. Guarda los comandos de conexión más usados para un acceso rápido.

📋 Comandos esenciales de permisos

Domina estos comandos principales para manejar el 90% de las tareas de gestión de permisos:

1. Obtener los permisos actuales

Antes de hacer cambios, comprende siempre el estado actual:

# Obtener todos los permisos del sitio
$sitePermissions = Get-PnPSiteGroup
$sitePermissions | Format-Table Title, Users, Roles

# Obtener permisos detallados de un grupo específico
Get-PnPGroupMember -Identity "Site Members"
Qué hace: Lista todos los grupos de SharePoint y sus miembros. Esencial para entender los niveles de acceso actuales antes de hacer cambios.
# Obtener permisos de una biblioteca específica
$libraryPermissions = Get-PnPListPermission -Identity "Documents"
$libraryPermissions

# Comprobar si la biblioteca tiene permisos únicos
$list = Get-PnPList -Identity "Documents"
$list.HasUniqueRoleAssignments
Qué hace: Muestra quién tiene acceso a bibliotecas específicas y si tienen herencia rota respecto al nivel de sitio.
# Obtener todos los permisos de un usuario específico
$userEmail = "maria.garcia@empresa.com"
Get-PnPUserEffectivePermissions -Identity $userEmail -List "Documents"

# Encontrar todos los grupos a los que pertenece un usuario
Get-PnPUser -Identity $userEmail | Select-Object Groups
Qué hace: Muestra exactamente qué permisos tiene un usuario específico, incluidos los permisos heredados a través de grupos.

👥 Scripts de gestión masiva de usuarios

Estos scripts ahorran horas al gestionar equipos grandes o múltiples colecciones de sitios:

Añadir múltiples usuarios a grupos

Escenario: Tu oficina de Valencia ha contratado 10 nuevos miembros del equipo de marketing que necesitan acceso a los sitios de marketing.

🛠️ MARCADOR DE POSICIÓN DE SCRIPT — Añadir múltiples usuarios al grupo
Contenido a crear:
• Leer usuarios de un archivo CSV (Nombre, Correo, Grupo)
• Recorrer usuarios y añadirlos a los grupos apropiados
• Gestión de errores para usuarios duplicados
• Informes de progreso y registro
• Notificación por correo a nuevos usuarios
Guardar como: Add-BulkUsersToGroups.ps1
💡 Buena práctica: Prueba siempre con 2-3 usuarios antes de ejecutar operaciones masivas. Usa el parámetro -WhatIf cuando esté disponible para ver qué ocurriría sin hacer cambios.

Crear grupos de departamento

Escenario: Configurar estructuras de grupos coherentes en múltiples sitios de departamento.

🛠️ MARCADOR DE POSICIÓN DE SCRIPT — Crear grupos de departamento
Contenido a crear:
• Crear grupos con convención de nombres (Dpto_Colaboradores, Dpto_Lectores)
• Establecer niveles de permisos apropiados
• Añadir descripciones al grupo
• Configurar ajustes del grupo (visibilidad, etc.)
• Aplicar a múltiples sitios en un bucle
Guardar como: New-DepartmentGroups.ps1

📊 Informes y auditoría de permisos

Para auditorías de cumplimiento y seguridad, necesitas informes detallados de permisos:

Informe completo de permisos

Caso de uso: Generar informes detallados para cumplimiento del RGPD o auditorías de seguridad.

🛠️ MARCADOR DE POSICIÓN DE SCRIPT — Informe de auditoría de permisos
Contenido a crear:
• Escanear todos los sitios del tenant (o colección especificada)
• Exportar permisos de usuario a CSV
• Incluir estado de herencia
• Marcar usuarios externos
• Detalles de membresía de grupos
• Información del último acceso
Guardar como: Export-PermissionReport.ps1
# CRÍTICO: Monitorear permisos únicos (herencia rota)
# ADVERTENCIA: Los permisos únicos NO son buena práctica — ¡monitorea de cerca!

# Encontrar todos los elementos con herencia rota (PREOCUPACIÓN PRINCIPAL)
$brokenInheritance = Get-PnPList | Where-Object {$_.HasUniqueRoleAssignments -eq $true}
Write-Warning "Se encontraron $($brokenInheritance.Count) elementos con herencia rota — ¡esto debería minimizarse!"
$brokenInheritance | Select-Object Title, DefaultViewUrl | Export-Csv "HerenciaRota_$(Get-Date -Format 'yyyyMMdd').csv"

# Comprobar usuarios externos (riesgo de seguridad)
$externalUsers = Get-PnPUser | Where-Object {$_.Email -like "*#ext#*"}
$externalUsers | Select-Object Title, Email, Groups | Export-Csv "UsuariosExternos_$(Get-Date -Format 'yyyyMMdd').csv"

# Alertar si se encuentran demasiados permisos únicos
if ($brokenInheritance.Count -gt 20) {
    Write-Error "ALERTA: $($brokenInheritance.Count) elementos con permisos únicos supera el límite recomendado de 20!"
}

🚀 Escenarios avanzados de permisos

Acceso temporal basado en proyectos

Escenario empresarial para Valencia: Dar a consultores externos acceso temporal a carpetas de proyectos que expira automáticamente.

🛠️ MARCADOR DE POSICIÓN DE SCRIPT — Acceso temporal a proyecto
Contenido a crear:
• Crear carpetas específicas del proyecto con permisos únicos
• Añadir usuarios externos con fechas de caducidad
• Programar script de limpieza para eliminar acceso caducado
• Notificaciones por correo antes de la caducidad
• Registro para seguimiento de cumplimiento
Guardar como: New-TemporaryProjectAccess.ps1

⚠️ Advertencia de seguridad

Implementa siempre procesos de limpieza para el acceso temporal. Configura recordatorios de calendario y scripts automatizados para revisar y eliminar permisos caducados.

Sincronización de permisos entre sitios

Escenario: Mantener el acceso de usuario coherente en sitios relacionados (sitio principal, sitios de proyectos, sitios de archivo).

🛠️ MARCADOR DE POSICIÓN DE SCRIPT — Sincronización entre sitios
Contenido a crear:
• Definir sitio maestro para la membresía de grupos
• Sincronizar grupos en múltiples sitios relacionados
• Gestionar diferentes niveles de permisos por sitio
• Resolución de conflictos para permisos existentes
• Informes de progreso y gestión de errores
Guardar como: Sync-CrossSitePermissions.ps1

✅ Mejores prácticas de PowerShell para gestión de permisos

1. Probar siempre primero

# Usar el parámetro -WhatIf cuando esté disponible
Remove-PnPGroupMember -Identity "Site Members" -LoginName "usuario@empresa.com" -WhatIf

# Probar con un solo usuario antes de operaciones masivas
$testUser = "usuario.prueba@empresa.com"
Add-PnPGroupMember -Identity "Equipo de Marketing" -LoginName $testUser

2. Implementar registro completo

# Iniciar registro
$logFile = "C:\Logs\CambiosPermisos_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
Start-Transcript -Path $logFile

# Tus cambios de permisos aquí
Write-Host "Añadiendo usuario $userEmail al grupo $groupName" -ForegroundColor Green

# Detener registro
Stop-Transcript

3. Gestión de errores para scripts de producción

try {
    Add-PnPGroupMember -Identity "Site Members" -LoginName $userEmail
    Write-Host "Usuario $userEmail añadido correctamente" -ForegroundColor Green
}
catch {
    Write-Warning "Error al añadir $userEmail : $($_.Exception.Message)"
    # Registrar error para revisión
    Add-Content -Path $errorLog -Value "$userEmail : $($_.Exception.Message)"
}
💡 Consejo para empresas valencianas: Crea una plantilla de script estándar con registro, gestión de errores e informes de progreso. Esto hace que tus scripts sean más fiables y fáciles de depurar.

🔧 Problemas comunes de PowerShell y soluciones

Problema: Errores de «Acceso denegado»

Síntomas: Los scripts fallan con errores de permisos incluso cuando eres propietario del sitio.

Soluciones:

  1. Verifica que estás conectado al sitio correcto
  2. Comprueba si tienes derechos de Administrador de SharePoint
  3. Usa el parámetro -Force donde esté disponible
  4. Intenta conectarte con diferentes métodos de autenticación

Problema: El script se ejecuta lentamente

Síntomas: Los scripts de permisos tardan mucho en completarse.

Consejos de optimización:

  • Usa operaciones por lotes en lugar de comandos individuales
  • Filtra los resultados al principio en la canalización
  • Evita comandos Get- innecesarios en bucles
  • Procesa sitios en paralelo donde sea posible

Problema: No se encuentran usuarios

# Verificar que el usuario existe antes de añadirlo a grupos
$user = Get-PnPUser -Identity $userEmail -ErrorAction SilentlyContinue
if ($user) {
    Add-PnPGroupMember -Identity $groupName -LoginName $userEmail
} else {
    Write-Warning "Usuario $userEmail no encontrado en SharePoint"
}

📁 Plantillas de scripts para tu empresa

Estas plantillas proporcionan un punto de partida para tareas comunes de gestión de permisos:

📄 Alta de nuevo empleado

Añade automáticamente a los nuevos empleados a los grupos apropiados según departamento y rol.

New-EmployeeAccess.ps1

🚪 Baja de empleado

Elimina el acceso del empleado saliente de todos los sitios y grupos de forma sistemática.

Remove-EmployeeAccess.ps1

📊 Auditoría mensual

Genera informes mensuales de permisos para revisión de cumplimiento y seguridad.

Monthly-PermissionAudit.ps1

🔄 Sincronización de grupos

Mantén los grupos de departamento sincronizados en múltiples sitios de SharePoint.

Sync-DepartmentGroups.ps1
💡 Consejo de implementación: Empieza con una plantilla, personalízala para las necesidades de tu empresa, pruébala a fondo y luego implementa gradualmente las demás. Construye una biblioteca de scripts probados para escenarios comunes.

🎯 Conclusiones clave