Saltar al contenido
Categoría: Seguridad
2020-05-19

Obteniendo Usuarios inactivos en Office 365 con PowerShell

Uno de los mayores problemas con los que nos encontramos al manejar cualquier plataforma es tener el control de los usuarios inactivos.

Este problema se agrava en Office365, ya que entre los usuarios que se dejan de usar y los usuarios invitados acabamos teniendo el Azure AD mal gestionado. Además, nos enfrentamos a las directivas de seguridad de Office365, que nos obligan a controlar a los usuarios que no se han conectado en los últimos 30 a 90 días.

Para obtener el listado de usuarios inactivos, vamos a seguir los siguientes pasos:

1. Modificar el guión de PowerShell

Empezamos con la modificación del guión de PowerShell.

https://github.com/OfficeDev/O365-InvestigationTooling/blob/master/InactiveUsersLast90Days.ps1

Este script, nos lleva a la directiva de crear un archivo CSV con el “UserPrincipalName” de los usuarios para generar un informe.

2. Ejecutando el guión

Para la ejecución del Script, tenemos que prestar atención a los puntos que tenemos que modificar para poner la cuenta de un Administrador del Tenant.

#Set admin UPN 
$UPN = 'e.rodado@contoso.com'

En la variable $UPN (UserPrincipalName) tendremos que poner el login del administrador de un Tenant. Esta variable se utiliza para abrir la conexión con el EXO de Exchange Online.

Si necesitamos conocer los usuarios inactivos con otro período de tiempo sólo tenemos que modificar la siguiente variable:

$startDate = (Get-Date).AddDays(-90).ToString('MM/dd/yyyy')

Si en la variable $startDate cambiamos “-90” por otra cantidad de días hará que generemos el informe de los usuarios inactivos con este período. Por ejemplo, si ponemos “-30” el informe que se generará será el de los usuarios inactivos que no hayan iniciado sesión durante 30 días o más.

3. Obtener la historial

El Script dejará el informe en “C:\Usuarios\”+ $DesktopUser +”\Documentos\N-Retorno\Auditorías_” + $fecha +”.csv” así que deberías haber creado la carpeta “Return” en tu carpeta “Documentos”. Este archivo que se crea tendrá la fecha y la hora del momento en que fue creado. De esta manera podrás tener un historial de usuarios inactivos.

Script Get Inactive Users.ps1

import-module MSOnline

 $date = Get-Date -UFormat "%Y%m%dT%H%M%S"

$DesktopUser = $env:USERNAME


    $ReturnFile = "C:\Users\"+ $DesktopUser +"\Documents\Return\Auditorias_" + $date +".csv"

    $Value = "UserPrincipalName"
    Add-Content -Path $ReturnFile -Value $Value

#Set admin UPN
$UPN = 'e.rodado@aleson-itc.com'

#This connects to Azure Active Directory & Exchange Online
Connect-MsolService
$EXOSession = New-ExoPSSession -UserPrincipalName $UPN
Import-PSSession $EXOSession -AllowClobber

$startDate = (Get-Date).AddDays(-90).ToString('MM/dd/yyyy')
$endDate = (Get-Date).ToString('MM/dd/yyyy')

$allUsers = @()
$allUsers = Get-MsolUser -All -EnabledFilter EnabledOnly | Select UserPrincipalName, ObjectId


$loggedOnUsers = @()
$loggedOnUsers = Search-UnifiedAuditLog -StartDate $startDate -EndDate $endDate -Operations UserLoggedIn, PasswordLogonInitialAuthUsingPassword, UserLoginFailed, CreationDate -ResultSize 5000

$inactiveInLastThreeMonthsUsers = @()
$inactiveInLastThreeMonthsUsers = $allUsers.UserPrincipalName | where {$loggedOnUsers.UserIds -NotContains $_}

Write-Output "The following users have no logged in for the last 90 days:"
Write-Output $inactiveInLastThreeMonthsUsers
Write-Host "`n"
foreach($USERID in $inactiveInLastThreeMonthsUsers)
{

    Write-Host "`tEl usuario es: " $UserID
    $Value = $UserID 
    Add-Content -Path $ReturnFile -Value $Value
}

Espero que os sea de utilidad a la hora de Identificar a los usuarios inactivos.

Si te ha parecido interesante, también puedes consultar mis posts sobre:

Si quiere que ayudemos a su negocio o empresa, contáctenos en info@aleson-itc.com o llámenos al +34 962 681 242