Gerenciar usuários com Microsoft Entra PowerShell

Os usuários representam uma conta corporativa ou escolar de usuário do Microsoft Entra, ou uma conta pessoal da Microsoft, no Microsoft Entra ID. O recurso de usuário no Microsoft Entra PowerShell é a representação de um usuário e inclui relações e recursos relevantes para o usuário.

O recurso de usuário fornece uma maneira simples de acessar e manipular recursos do usuário sem precisar executar chamadas extras, pesquisar informações de autenticação específicas e emitir consultas diretamente em relação a outros objetos do PowerShell Microsoft Entra.

Prerequisites

Para gerenciar usuários com Microsoft Entra PowerShell, você precisa:

Você pode acessar as informações de um usuário e gerenciar seus dados em seu nome ou como um aplicativo com sua própria identidade.

Integrar um usuário

Para integrar um usuário, crie uma nova conta de usuário no Microsoft Entra ID. Esse processo envolve a configuração do perfil do usuário, incluindo o nome de exibição, o endereço de email e a senha.

Criar um usuário

Este exemplo cria um novo usuário.

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

A saída exibe detalhes do usuário recém-criado.

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

Criar usuários em massa

Para criar vários usuários em massa, você pode usar um arquivo CSV. O arquivo CSV deve conter os atributos de usuário necessários, como DisplayName, UserPrincipalNamee 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
    }
Primeiro Nome Sobrenome DisplayName Endereço de Email Departamento MailNickName
Adele Vance Adele Vance adelev@contoso.com Marketing adelev

A saída exibe detalhes dos usuários recém-criados.

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

Atualizar a senha de um usuário

  1. Para atualizar a senha de um usuário pelo 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 atualizar a senha do usuário conectado (autoatendimento), 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
    

    Esse comando permite que os usuários alterem suas próprias senhas sem privilégios de administrador.

Enviar ou recuperar uma foto para o usuário

  1. Carregue uma foto para um usuário.

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

    Este exemplo define a foto em miniatura do usuário especificada com o parâmetro UserId para a imagem especificada com o parâmetro FilePath.

  2. Recupere a foto de um usuário.

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

    Este exemplo demonstra como recuperar a foto em miniatura de um usuário que é especificada por meio do valor do UserId parâmetro.

Conceder aos usuários funções administrativas em sua organização

A concessão de funções administrativas aos usuários em sua organização permite que eles executem tarefas específicas e gerenciem recursos. Você pode atribuir usuários a funções como Administrador de Grupo, Administrador de Usuário ou outras funções personalizadas.

Para saber como atribuir funções a usuários usando Microsoft Entra PowerShell, consulte Atribuir funções aos usuários.

Pesquisar usuários

Você pode pesquisar usuários em sua organização usando vários atributos, como displayName, e mailNicknameuserPrincipalNamedepartmentjobTitle. O exemplo a seguir mostra como pesquisar um usuário por userPrincipalName

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

A saída mostra os detalhes do usuário com base em uma pesquisa de userPrincipalName.

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

Auditar usuários por determinados critérios

Você pode auditar os usuários por determinados critérios, como atividade de entrada e associações de grupo. Esse recurso ajuda a controlar a atividade do usuário e gerenciar o acesso deles aos recursos.

Recuperar a atividade de entrada de um usuário

O exemplo a seguir mostra como recuperar a atividade de entrada de um usuário 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'

A saída mostra a atividade de login do usuário.

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

Baixar a atividade de login de todos os usuários

O exemplo a seguir recupera todas as contas de usuário licenciadas e sua última atividade de entrada bem-sucedida. Ele exporta os dados para um arquivo CSV para análise posterior.

# 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 exemplo recupera a última entrada e as últimas datas de entrada bem-sucedidas para todos os usuários em sua organização. Em seguida, os dados são exportados para um arquivo CSV nomeado lastSignIns.csv no C:\temp diretório.

Listar associações de grupo de um usuário

O exemplo a seguir lista os grupos dos quais um usuário é membro.

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

A saída mostra as associações do usuário.

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 estes comandos para listar as entidades às quais um usuário pertence:

Obter o gerente de um usuário, direcionar relatórios e atribuir um gerente a um usuário

  1. Obtenha o gerenciador de um usuário.

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

    A saída mostra o gerente do usuário.

    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. Liste os usuários que se reportam a um usuário 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
    

    A saída mostra o relatório direto do usuário.

    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. Atribuir um gerente a um usuário.

    Connect-Entra -Scopes 'User.ReadWrite.All'
    Set-EntraUserManager -UserId 'SawyerM@contoso.com' -ManagerId 'AdeleV@contoso.com'
    
    • -UserId– especifica a ID (como UserPrincipalName ou User ObjectId) de um usuário no Microsoft Entra ID.
    • -ManagerId - especifica a ID como UserPrincipalName ou User ObjectId do objeto do Microsoft Entra ID a ser atribuído como gerente.

Listar usuários sem gerentes

Este exemplo lista os usuários sem um gerente, ajudando a identificar contas órfãs, contas de serviço ou perfis configurados incorretamente para limpeza.

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

A saída lista usuários sem gerentes.

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

Listar usuários desabilitados

O exemplo a seguir gera uma lista de contas desabilitadas.

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

A saída lista usuários desabilitados.

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