Aunque la interfaz gráfica de administración de Office 365 es más que aceptable, la gestión a través de Powershell es sin duda la opción a seguir para realizar nuestras tareas de la manera más rápida y eficiente. Hoy vamos a repasar los cmdlets esenciales para esta gestión de usuarios, contraseñas, licencias,etc..
La gestión de usuarios en Office 365 trabaja a través de Azure Active Directory por lo tanto para ejecutar los siguientes ejemplos necesitaremos instalar el módulo de Azure AD para Powershell. Como siempre en Powershell los límites los marcan vuestra imaginación a la hora de crear scripts ofreciendo unas capacidades (cuasi) ilimitadas, a continuación vamos a ver los que creemos cmdlets esenciales para contruir nuestros scripts.
Gestionando usuarios
- cmdlet Get-MsolUser
A través de este cmdlet podemos obtener información de nuestros usuarios, pudiendo filtrar los resultados por ejemplo por cualquiera de los parámetros asociados a cada usuario como podrían ser: City, Country, Department, DomainName, License, ObjectId, Title, UnlicensedUsersOnly, UsageLocation, UserPrincipalName,etc...
Los resultados si no especificamos nada vendrán limitados a 250. Podemos utilizar el parámetro “All” para recibirlos todos o limitarlos a cualquier valor con “MaxResults”. Vamos a ver algunos ejemplos
Obtener una lista de todos los usuarios
Get-MsolUser -All
Obtener una lista de los ID de todos los usuarios (refinando la anterior búsqueda)
Get-MsolUser -All | Select UserPrincipalName
Obtener una lista, limitada a 20 resultados, de User ID, Object ID y Título
Get-MsolUser -MaxResults 20 | Select UserPrincipalName, ObjectId, Title
Listar todos los usuarios de un determinado dominio
Get-MsolUser - All -DomainName cyberseguridad.net
Listar todos los usuarios que están sincronizados (desde nuestro AD local) y que aún no tienen licéncia
Get-MsolUser -All -SynchronizedUsers -UnlicensedUsersOnly
Como decíamos antes hay un montón de propiedades de usuario por las que nos puede interesar filtrar una búsqueda, podemos listar todas las de un usuario con el comando
Get-MsolUser -UserPrincipalName [email protected] | FL
- cmdlet Set-MsolUser
Igual que Get-MsolUser nos da información, el cmdlet para cambiar esta información es Set-MsolUser. Vamos a ver algunos ejemplos:
Para cambiar nombre y apellidos de un usuario
Set-MsolUser -UserPrincipalName [email protected] -LastName “Apellido” -DisplayName “Nombre”
Para establecer la ciudad a todos aquellos usuarios cuyo país sea España. Aquí vemos un ejemplo de tubería, para trabajar con resultados de una primera búsqueda.
Get-MsolUser -All -Country “España” | Set-MsolUser -City “Barcelona”
Cambiar una propiedad a partir de un listado de usuarios en un fichero .csv
Import-CSV “listado.csv” | Set-MsolUser -Department “Administracion”
- cmdlet Set-MsolUserPrincipalName
Este otro cmdlet nos permite a diferencia del anterior modificar el “principal name” que vendría a ser la dirección de correo principal, acción que no podemos llevar a cabo con el cmdlet Set-MsolUser
Cambiar el principal name de un usuario
Set-MsolUserPrincipalName -UserPrincipalName [email protected] -NewUserPrincipalName [email protected]
Gestión de contraseñas
En este apartado veremos como podemos cambiar desde una contraseña para un usuario como gestionar la política de contraseñas de nuestro dominio.
- cmdlet Set-MsolUser
Fijar una dirección de correo alternativa donde el usuario recibiría una recuperación de contraseña
Set-MsolUser -UserPrincipalName [email protected] -AlternateEmailAddresses [email protected]
Fijar la necesidad de una contraseña fuerte para el usuario. Aquí vemos el uso de variables $True / $False para determinadas propiedades.
Set-MsolUser -UserPrincipalName [email protected] -StrongPasswordRequired $True
Fijar que la contraseña para un usuario nunca expire
Set-MsolUser -UserPrincipalName [email protected] -PasswordNeverExpires $True
- cmdlet Set-MsolUserPassword
Cambiar la contraseña para un usuario (el sistema la generará aleatoriamente)
Set-MsolUserPassword -UserPrincipalName [email protected] -NewPassword “”
cambiar la contraseña para un usuario (especificándola y desactivando la obligación de cambiarla al hacer login)
Set-MsolUserPassword -UserPrincipalName [email protected] -NewPassword “Ejemplo1” -ForceChangePassword $False
- cmdlet Set-MsolPasswordPolicy
Este cmdlet nos servirá para cambiar a nivel de dominio la política de expiración de contraseñas. También podemos ver el estado actual de la misma con Get-MsolPasswordPolicy
Establecer que las contraseñas expiren cada 90 dias y que al usuario se le notifique con 15 días por adelantad
Set-MsolPasswordPolicy -DomainName Cyberseguridad.net -NotificationDays 15 ValidityDays 90
Gestión de grupos
- cmdlet Get-MsolGroup
Con este cmdlet podremos filtrar los resultados con algunos de lo siguientes parámetros: All (mostrar todos los resultados), GroupType (Security, MailEnabledSecurity o DistributionList), SearchString (para buscar por parte del nombre del grupo), UserPrincipalName (muestra los grupos donde un usuario sea miembro),etc... Seguidamente pudiendo filtrar los resultados anteriores por propiedades como CommonName (nombre del grupo), Description, DisplayName, EmailAddress, ManagedBy (por quien está dirigido),etc.. Vamos a ver algunos ejemplos:
Ver listado de todos los grupos y mostrar el nombre y su dirección de email
Get-MsolGroup -All | Select DisplayName, EmailAddress
Ver las propiedades de un grupo determinado
Get-MsolGroup -SearchString “staff” | fl
Ver los miembros de un grupo determinado
Get-MsolGroupMember -GroupObjectId iddeejemplo
- cmdlet Set-MsolGroup
Con este cmdlet podremos cambiar algunas de las propiedades del grupo como Description, DisplayName, ManagedBy (dueño del grupo),etc..
Cambiar nombre de un grupo
Set-MsolGroup -ObjectId iddeejemplo -Displayname “nuevo nombre”
- cmdlet New-MsolGroup
Con este cmdlet podemos crear nuevos grupo de seguridad, estableciendo Description, DisplayName o ManagedBy
Creación de un nuevo grupo
New-MsolGroup -DisplayName “nombre” -Description “descripcion” -Managedby [email protected]
Gestión de los usuarios de los grupos
- cmdlet Add-MsolGroupMember
Con este cmdlet podemos añadir usuarios o grupos a un grupo (ya que estos se pueden anidar). Debemos usar de nuevo los ID. Las variables serían GroupMemberObjectId (el ID del usuario o grupo que queremos añadir a otro), GroupMemberType (el tipo de usuario dentro del grupo destino como por ejemplo User) y el GroupObjectId (el ID del grupo destino)
Ejemplo
Add-MsolGroupMember -GroupObjectId idejemplo -GroupMemberObjectId idejemplo2 -GroupMemberType User
- cmdlet Remove-MsolGroupMember
Funciona de la misma manera que el anterior con la diferencia que especificamos el ID del usuario o grupo a quitar.
Ejemplo
Remove-MsolGroupMember -GroupObjectId idejemplo GroupMemberObjectId idejemplo2 -GroupMemberType User
- cmdlet Get-MsolGroupMember
Finalmente con este cmdlet podemos obtener un listado de los miembros de un grupo, pudiendo filtrar los resultados por diferentes propiedades de los miembros como DisplayName, EmailAddress,GroupMemberType,etc..
Obtener un listado de todos los miembros de un grupo
Get-MsolGroupMember -GroupObjectId idejemplo -All
Gestión de Licencias
Un elemento clave a controlar en Office 365 es el tema de licencias, tanto para no pagar más de lo necesario como para gestionar adecuadamente a los componentes que tiene acceso cada usuario. En este aspecto el cmdlet básico es “Get-MsolAccountSku” que nos devolverá un listado de todas nuestras subscripciones, la cantidad de licencias totales y disponibles, además del ID de subscripción (AccountSkuId) que utilizaremos a continuación en los ejemplos.
Para entender esto correctamente hemos de entender que cada plan cuenta con unos determinados servicios (Sharepoint, Yammer, Skype for Business..) que a su vez pueden ser deshabilitados total o parcialmente. Para ello, el siguiente cmdlet.
- cmdlet New-MsolLicenseOptions
Usaremos este cmdlet para crear objetos con opciones de licencia, utilizando el parametro de AccountSkuId y el parámetro DisabledPlans para especificar que queremos deshabilitar para el usuario dentro del plan.
- cmdlet Set-MsolUserLicense
Con este cmdlet podemos asignar, quitar o actualizar las licencias de cada usuario. Contaremos con opciones como AddLicenses, LicenseOptions, ObjectId (el ID de usuario), RemoveLicenses... vamos a ver algunos ejemplos
Ver la licencia asignada a un usuario
Get-MsolUser -SearchString “[email protected]” | Select DisplayName, Licenses
Asignar una licéncia a un usuario
Set-MsolUserLicense -UserPrincipalName [email protected] -AddLicenses ejemploAccountSkuId
Eliminar una licencia a un usuario
Set-MsolUserLicense -UserPrincipalName [email protected] -RemoveLicenses ejemploAccountSkuId
Crear un nuevo usuario con su correspondiente licencia
New-MsolUser -UserPrincipalName [email protected] -FirstName Nombre -LastName Apellido -DisplayName “Test” -LicenseAssignment AccountSkuId -UsageLocation “ES”
Estos son todos creemos ejemplos muy útiles para todos aquellos administradores de Office 365. A partir de aquí como siempre con Powershell el techo lo marca la habilidad de cada persona a la hora de crear scripts para automatizar todas estas funciones para hacer de la gestión diaria de esta plataforma un proceso fluido y ágil.