Problema
Los entornos Microsoft 365 cambian con frecuencia: funcionalidades se retiran, parámetros de autenticación se modifican y los planes de precios se ajustan. Cuando una característica desaparece (por ejemplo, la creación de SharePoint Alerts en tenants nuevos) o una API pierde un parámetro (como -Credential en Connect-ExchangeOnline), los scripts y flujos de trabajo existentes dejan de funcionar. El síntoma típico es un error inesperado en la automatización o la imposibilidad de cumplir con una política de seguridad recién impuesta. El reto para el administrador es detectar el cambio, migrar la lógica a la alternativa recomendada y evitar interrupciones en la operación diaria.
Causa
- Retiro programado de funcionalidades – Microsoft anuncia la desactivación de una feature con antelación, pero la documentación a veces llega tarde o está dispersa.
- Cambios en la superficie de la API – Parámetros obsoletos se eliminan para alinear cmdlets con la arquitectura Zero Trust; los scripts que dependen de ellos fallan.
- Políticas de seguridad renovadas – Autenticación OTP para compartir externamente se sustituye por Entra B2B, lo que rompe flujos que todavía usan el método antiguo.
- Modelo de facturación por consumo – La introducción de “pay‑as‑you‑go” para archivado de archivos o almacenamiento extra obliga a revisar los límites y alertas de cuota.
- Retención de contenido en cuentas sin licencia – OneDrive implementa un ciclo de vida que elimina datos después de varios días sin licencia; los procesos de auditoría que asumen disponibilidad perpetua se ven afectados.
Solución
Adoptar un enfoque estructurado que convierta cualquier retiro de feature en una migración controlada:
1. Inventario automático de dependencias
Ejecuta un escaneo de PowerShell que recorra los tenant‑wide settings y busque referencias a la feature en cuestión. Por ejemplo, para SharePoint Alerts:
Get-SPOSite -Limit All | ForEach-Object {
$alerts = Get-PnPAlert -Web $_.Url -ErrorAction SilentlyContinue
if ($alerts) { Write-Output "$($_.Url) tiene alertas activas" }
}
Esto permite identificar rápidamente los sitios que todavía usan la funcionalidad.
2. Mapear la alternativa oficial
Microsoft suele ofrecer una ruta de migración. En el caso de los alerts, la alternativa es Power Automate o SharePoint Rules. Documenta los pasos de sustitución:
- Crea un flujo que se dispare en
When an item is created or modified. - Añade la acción
Send an emailoPost a messagesegún el caso de uso original. - Desactiva los alerts en los sitios afectados.
3. Refactorizar scripts que usan parámetros obsoletos
Para el cmdlet Connect-ExchangeOnline, elimina -Credential y usa la autenticación basada en Azure AD:
Connect-ExchangeOnline -UseDeviceAuthentication
Si la organización requiere autenticación sin interacción, habilita un App‑Only token y reemplaza la llamada por:
Connect-ExchangeOnline -AppId $appId -CertificateThumbprint $thumbprint
4. Ajustar políticas de retención y facturación
Revisa los planes de pay‑as‑you‑go activados en SharePoint y OneDrive:
- Usa el reporte de uso (
Get-SPOSiteUsageDetail) para detectar archivos que superan el umbral de archivado. - Configura una política de archivado a nivel de archivo mediante el centro de cumplimiento o mediante PowerShell:
Set-PnPListItem -List "Documents" -Identity $itemId -Values @{"ArchivePolicy"="LowCost"}
5. Automatizar la re‑licenciamiento de cuentas inactivas
Implementa un script que identifique usuarios sin licencia y envíe recordatorios antes de que se active la retención:
$users = Get-MsolUser -All | Where-Object { -not $_.IsLicensed }
foreach ($u in $users) {
Send-MailMessage -To $u.UserPrincipalName -Subject "Licencia pendiente" -Body "Asigna una licencia antes del $(Get-Date).AddDays(30)."
}
6. Centralizar la gestión de cambios
Mantén un repositorio Git con los scripts de migración y un changelog interno que marque cada retiro de feature y su solución asociada. Así, cualquier nuevo tenant o actualización se beneficia automáticamente del mismo proceso.
Cuándo aplicar esta solución
- Síntomas: errores de PowerShell al ejecutar cmdlets, flujos de Power Automate que nunca se disparan, alertas de auditoría que indican “feature no disponible”.
- Entorno: cualquier tenant con automatizaciones basadas en APIs de Microsoft 365, especialmente en entornos GCC High, DoD o multitenant.
- Exclusiones: si la organización ya ha migrado a la alternativa recomendada o si la feature retirada no estaba en uso, la solución completa no es necesaria; basta con validar la ausencia de dependencias.
Código
# 1. Detectar sitios con SharePoint Alerts activos
Get-SPOSite -Limit All | ForEach-Object {
$alerts = Get-PnPAlert -Web $_.Url -ErrorAction SilentlyContinue
if ($alerts) { Write-Output "$($_.Url) tiene alertas activas" }
}
# 2. Conectar a Exchange Online sin -Credential
Connect-ExchangeOnline -UseDeviceAuthentication
# 3. Enviar recordatorio de licencia a usuarios sin asignar
$users = Get-MsolUser -All | Where-Object { -not $_.IsLicensed }
foreach ($u in $users) {
Send-MailMessage -To $u.UserPrincipalName -Subject "Licencia pendiente" -Body "Asigna una licencia antes del $(Get-Date).AddDays(30)."
}
Verificación
- Alertas migradas – Revisa que los flujos de Power Automate aparecen en el portal y que la lista de
Get-PnPAlertya no devuelve resultados. - Conexión Exchange – Ejecuta un cmdlet cualquiera (
Get-Mailbox) y confirma que no aparece el error “Parameter -Credential not found”. - Retención OneDrive – Crea una cuenta sin licencia, sube un archivo y verifica que, tras el periodo de gracia (30 días), el archivo pasa a la zona de archivado y luego a eliminación según la política configurada.
- Facturación – Consulta el reporte de uso (
Get-SPOSiteUsageDetail) y comprueba que los archivos marcados con la política “LowCost” aparecen bajo la categoría de archivado de bajo costo.
Notas adicionales
- Pruebas en sandbox: siempre valida los cambios en un tenant de pruebas antes de aplicarlos en producción; los flujos de Power Automate pueden generar tráfico inesperado si se disparan en bucle.
- Control de versiones de PowerShell: algunos cmdlets requieren la versión 7.x del módulo
Microsoft.Graph. Mantén los módulos actualizados conUpdate-Module. - Impacto de pricing: los ajustes de precios no alteran la funcionalidad, pero pueden afectar los límites de archivado. Revisa el presupuesto mensual y ajusta las alertas de consumo.
- Documentación oficial: aunque la guía evita citarla directamente, la página de “Microsoft 365 Roadmap” sigue siendo la fuente más fiable para fechas de retiro.
- Comunicación interna: informa a los equipos de soporte y a los usuarios finales antes de desactivar alerts; un mensaje claro reduce tickets de “¿por qué ya no recibo notificaciones?”.