Administración de usuarios con Microsoft Entra PowerShell

Los usuarios representan una cuenta profesional o educativa de Microsoft Entra o una cuenta personal de Microsoft en Microsoft Entra ID. El recurso de usuario de Microsoft Entra PowerShell es la representación de un usuario e incluye relaciones y recursos relevantes para el usuario.

El recurso de usuario proporciona una manera sencilla de acceder a los recursos de usuario y manipularlos sin tener que realizar llamadas adicionales, buscar información de autenticación específica y emitir directamente consultas en otros objetos de PowerShell Microsoft Entra.

Prerrequisitos

Para administrar usuarios con Microsoft Entra PowerShell, necesita lo siguiente:

Puede acceder a la información de un usuario y administrar sus datos en su nombre o como una aplicación con su propia identidad.

Incorporación de un usuario

Para incorporar un usuario, cree una nueva cuenta de usuario en Microsoft Entra ID. Este proceso implica configurar el perfil del usuario, incluido su nombre para mostrar, dirección de correo electrónico y contraseña.

Creación de un usuario

En este ejemplo se crea un nuevo usuario.

Connect-Entra -Scopes 'User.ReadWrite.All'
$passwordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$passwordProfile.Password = '<Strong-Password>'
$userParams = @{
    DisplayName = 'New User'
    PasswordProfile = $passwordProfile
    UserPrincipalName = 'NewUser@contoso.com'
    AccountEnabled = $true
    MailNickName = 'NewUser'
}
New-EntraUser @userParams

La salida muestra los detalles del usuario recién creado.

DisplayName    Id                                     Mail    UserPrincipalName
-----------    --                                     ----    -----------------
New User       aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb           NewUser@contoso.com

Creación masiva de usuarios

Para crear varios usuarios de forma masiva, puede usar un archivo CSV. El archivo CSV debe contener los atributos de usuario necesarios, como DisplayName, UserPrincipalNamey PasswordProfile.

# Connect to Microsoft Entra PowerShell
Connect-Entra -Scopes 'User.ReadWrite.All'

# Create a new Password Profile for the new users. We'll be using the same password for all new users in this example
$PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.Password = '<Your-Password>'

# Import the csv file. You will need to specify the path and file name of the CSV file in this cmdlet
$NewUsers = import-csv -Path '<path-to-your-csv-file>'

# Loop through all new users in the file to create them in Microsoft Entra ID
ForEach ($user in $NewUsers) {
    # Create a new user in Microsoft Entra ID
    New-EntraUser -UserPrincipalName $user.'EmailAddress' -DisplayName $user.'DisplayName' -GivenName $user.'FirstName' -Surname $user.'LastName' -Department $user.'Department' -MailNickname $user.'MailNickname' -AccountEnabled $true -PasswordProfile $passwordProfile
    }
Primer Nombre Apellido DisplayName Dirección de correo electrónico Departamento MailNickName
Adele Vance Adele Vance adelev@contoso.com Mercadotecnia adelev

La salida muestra los detalles de los usuarios recién creados.

DisplayName Id                                   Mail UserPrincipalName
----------- --                                   ---- -----------------
Adele Vance aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb      adelev@contoso.com

Actualizar la contraseña de un usuario

  1. Para actualizar la contraseña de un usuario por administrador, use este comando:

    Connect-Entra -Scopes 'Directory.AccessAsUser.All'
    $newPassword = '<strong-password>'
    $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
    Set-EntraUserPasswordProfile -UserId 'SawyerM@contoso.com' -Password $securePassword
    
  2. Para actualizar la contraseña del usuario que ha iniciado sesión (autoservicio), use este comando:

    Connect-Entra -Scopes 'Directory.AccessAsUser.All'
    $currentPassword = ConvertTo-SecureString '<strong-password>' -AsPlainText -Force
    $newPassword = ConvertTo-SecureString '<strong-password>' -AsPlainText -Force
    Set-EntraSignedInUserPassword -CurrentPassword $currentPassword -NewPassword $newPassword
    

    Este comando permite a los usuarios cambiar sus propias contraseñas sin privilegios de administrador.

Cargar o recuperar una foto para el usuario.

  1. Cargue una foto para un usuario.

    Connect-Entra -Scopes 'User.ReadWrite.All'
    Set-EntraUserThumbnailPhoto -UserId 'SawyerM@contoso.com' -FilePath 'D:\UserThumbnailPhoto.jpg'
    

    En este ejemplo se establece la foto en miniatura del usuario especificado con el parámetro UserId en la imagen especificada con el parámetro FilePath.

  2. Recuperar la foto de un usuario.

    Connect-Entra -Scopes 'ProfilePhoto.Read.All'
    Get-EntraUserThumbnailPhoto -UserId 'SawyerM@contoso.com'
    

    En este ejemplo se muestra cómo recuperar la foto en miniatura de un usuario que se especifica a través del valor del UserId parámetro .

Concesión de roles administrativos a los usuarios en su organización

Conceder a los usuarios roles administrativos en su organización les permite realizar tareas específicas y administrar recursos. Puede asignar usuarios a roles como Administrador de grupos, Administrador de usuarios u otros roles personalizados.

Para obtener información sobre cómo asignar roles a los usuarios mediante Microsoft Entra PowerShell, consulte Asignación de roles a los usuarios.

Buscar usuarios

Puede buscar usuarios de su organización mediante varios atributos, como displayName, mailNickname, userPrincipalNamedepartment y jobTitle. En el ejemplo siguiente se muestra cómo buscar un usuario por userPrincipalName

Connect-Entra -Scopes 'User.Read.All'
Get-EntraUser -Filter "userPrincipalName eq 'SawyerM@contoso.com'"

La salida muestra los detalles del usuario basados en una búsqueda userPrincipalName.

DisplayName      Id                                   Mail                 UserPrincipalName     
-----------      --                                   ----                 -----------------     
Sawyer Miller   aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb SawyerM@contoso.com  SawyerM@contoso.com   

Auditar a los usuarios según determinados criterios

Puede auditar a los usuarios según determinados criterios, como la actividad de inicio de sesión y las pertenencias a grupos. Esta característica le ayuda a realizar un seguimiento de la actividad del usuario y a administrar su acceso a los recursos.

Recuperación de la actividad de inicio de sesión de un usuario

En el ejemplo siguiente se muestra cómo recuperar la actividad de inicio de sesión de un usuario específico.

Connect-Entra -Scopes 'User.Read.All','AuditLog.Read.All'
Get-EntraUser -UserId 'SawyerM@contoso.com' -Property 'SignInActivity' | 
  Select-Object -Property Id, DisplayName, UserPrincipalName -ExpandProperty 'SignInActivity'

La salida muestra la actividad de inicio de sesión del usuario.

lastNonInteractiveSignInRequestId : bbbbbbbb-1111-2222-3333-aaaaaaaaaaaa
lastSignInRequestId               : cccccccc-2222-3333-4444-dddddddddddd
lastSuccessfulSignInDateTime      : 9/9/2024 1:12:13 PM
lastNonInteractiveSignInDateTime  : 9/9/2024 1:12:13 PM
lastSuccessfulSignInRequestId     : bbbbbbbb-1111-2222-3333-aaaaaaaaaaaa
lastSignInDateTime                : 9/7/2024 9:15:41 AM
id                                : aaaaaaaa-bbbb-cccc-1111-222222222222
displayName                       : Sawyer Miller
userPrincipalName                 : SawyerM@contoso.com

Descargar la actividad de inicio de sesión de todos los usuarios

En el ejemplo siguiente se recuperan todas las cuentas de usuario con licencia y su última actividad de inicio de sesión correcta. Exporta los datos a un archivo CSV para su posterior análisis.

# Connect to Microsoft Entra PowerShell  

Connect-Entra -Scopes 'User.Read.All','AuditLog.Read.All','Directory.Read.All'

try {
     Get-EntraUser -All -Property Id, UserPrincipalName, DisplayName, SignInActivity -ErrorAction Stop |
         Select-Object `
             Id, `
             UserPrincipalName, `
             DisplayName, `
             @{ Name = 'LastSignInDateTime';           Expression = { $_.SignInActivity.LastSignInDateTime } }, `
             @{ Name = 'LastSuccessfulSignInDateTime'; Expression = { $_.SignInActivity.LastSuccessfulSignInDateTime } } |
         Export-Csv -Path 'C:\temp\lastSignIns.csv' -NoTypeInformation -Encoding UTF8 -ErrorAction Stop

     Write-Host "Sign-in activity exported successfully to lastSignIns.csv"
 }
 catch {
     Write-Error "Failed to retrieve or export data: $_"
 }

Este ejemplo recupera tanto las fechas del último inicio de sesión como las del último inicio de sesión correcto de todos los usuarios de su organización. A continuación, los datos se exportan a un archivo CSV denominado lastSignIns.csv en el C:\temp directorio .

Enumerar las pertenencias a grupos de un usuario

En el ejemplo siguiente se enumeran los grupos de los que es miembro un usuario.

Connect-Entra -Scopes 'User.Read'
Get-EntraUserMembership -UserId 'SawyerM@contoso.com' |
 Select-Object Id, displayName, createdDateTime, '@odata.type' |
 Format-Table -AutoSize

La salida muestra la pertenencia del usuario a grupos.

Id                                   displayName                         createdDateTime      @odata.type
--                                   -----------                         ---------------      -----------
00aa00aa-bb11-cc22-dd33-44ee44ee44ee Contoso                             2024-10-06T08:49:16Z #microsoft.graph.group
22cc22cc-dd33-ee44-ff55-66aa66aa66aa Contoso marketing                   2024-10-07T01:17:28Z #microsoft.graph.group
55ff55ff-aa66-bb77-cc88-99dd99dd99dd Pacific Admin Unit                                       #microsoft.graph.administrativeUnit

Use estos comandos para enumerar las entidades a las que pertenece un usuario:

Obtener el responsable de un usuario, sus subordinados directos y asignar un responsable a un usuario

  1. Obtener el responsable de un usuario.

    Connect-Entra -Scopes 'User.Read.All'
    Get-EntraUserManager -UserId 'SawyerM@contoso.com' |
        Select-Object Id, displayName, userPrincipalName, createdDateTime, accountEnabled, userType |
        Format-Table -AutoSize
    

    La salida muestra el administrador del usuario.

    id                                    displayName     userPrincipalName                    createdDateTime           accountEnabled  userType
    --                                    -----------     -----------------                    ---------------           --------------  --------
    11bb11bb-cc22-dd33-ee44-55ff55ff55ff  Patti Fernandez PattiF@Contoso.com                 10/7/2024 12:32:01 AM      True           Member
    
  2. Enumerar los usuarios que informan a un usuario específico.

    Connect-Entra -Scopes 'User.Read','User.Read.All'
    Get-EntraUserDirectReport -UserId 'SawyerM@contoso.com' |
        Select-Object Id, displayName, userPrincipalName, createdDateTime, accountEnabled, userType |
        Format-Table -AutoSize
    

    La salida muestra el informe directo del usuario.

    id                                    displayName     userPrincipalName           createdDateTime       accountEnabled  userType
    --                                    -----------     -----------------           ---------------       --------------  --------
    bbbbbbbb-1111-2222-3333-cccccccccccc  Christie Cline  ChristieC@Contoso.com       10/7/2024 12:32:25 AM  True           Member
    aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb  Isaiah Langer   IsaiahL@Contoso.com         10/7/2024 12:33:16 AM  True           Member
    
  3. Asignar un administrador a un usuario.

    Connect-Entra -Scopes 'User.ReadWrite.All'
    Set-EntraUserManager -UserId 'SawyerM@contoso.com' -ManagerId 'AdeleV@contoso.com'
    
    • -UserId: especifica el identificador (como UserPrincipalName o User ObjectId) de un usuario en Microsoft Entra ID.
    • -ManagerId: especifica el ID (como UserPrincipalName o User ObjectId) del objeto de Microsoft Entra ID que se va a asignar como responsable.

Enumerar usuarios sin administradores

En este ejemplo se enumeran los usuarios sin un administrador, lo que ayuda a identificar cuentas huérfanas, cuentas de servicio o perfiles mal configurados para la limpieza.

Connect-Entra -Scopes 'User.Read.All'
$allUsers = Get-EntraUser -All
$usersWithoutManagers = foreach ($user in $allUsers) {
    $manager = Get-EntraUserManager -UserId $user.Id -ErrorAction SilentlyContinue
    if (-not $manager) {
        [PSCustomObject]@{
            Id                = $user.Id
            DisplayName       = $user.DisplayName
            UserPrincipalName = $user.UserPrincipalName
            UserType          = $user.userType
            AccountEnabled    = $user.accountEnabled
            CreatedDateTime   = $user.createdDateTime
        }
    }
}
$usersWithoutManagers | Format-Table Id, DisplayName, UserPrincipalName, CreatedDateTime, UserType, AccountEnabled  -AutoSize

La salida enumera los usuarios sin administradores.

Id                                   DisplayName         UserPrincipalName                           CreatedDateTime           UserType   AccountEnabled
--                                   -----------         -----------------                           ---------------           --------   --------------
cccccccc-2222-3333-4444-dddddddddddd New User           NewUser@tenant.com                         10/7/2024 2:24:26 PM      Member     True
bbbbbbbb-1111-2222-3333-cccccccccccc Sawyer Miller     SawyerM@contoso.com                        10/7/2024 12:33:36 AM     Member     True

Enumerar usuarios deshabilitados

En el ejemplo siguiente se genera una lista de cuentas deshabilitadas.

Connect-Entra -Scopes 'User.ReadWrite.All'
Get-EntraUser -Filter "accountEnabled eq false" | Select-Object DisplayName, Id, Mail, UserPrincipalName

La salida enumera los usuarios deshabilitados.

DisplayName    Id                                   Mail userPrincipalName
-----------    --                                   ---- -----------------
Sawyer Miller  hhhhhhhh-7777-8888-9999-iiiiiiiiiiii      SawyerM@contoso.com
Kez Michael    eeeeeeee-4444-5555-6666-ffffffffffff      KezM@contoso.com