Gestire gli utenti con Microsoft Entra PowerShell

Gli utenti sono la rappresentazione di un account utente aziendale o dell'istituto di istruzione Microsoft Entra o di un account Microsoft personale in Microsoft Entra ID. La risorsa utente in Microsoft Entra PowerShell è la rappresentazione di un utente e include relazioni e risorse rilevanti per l'utente.

La risorsa utente offre un modo semplice per accedere e modificare le risorse utente senza dover eseguire chiamate aggiuntive, cercare informazioni di autenticazione specifiche ed eseguire direttamente query su altri oggetti di PowerShell Microsoft Entra.

Prerequisiti

Per gestire gli utenti con Microsoft Entra PowerShell, è necessario:

È possibile accedere alle informazioni di un utente e gestire i propri dati per loro conto o come app con la propria identità.

Inserire un utente

Per eseguire l'onboarding di un utente, creare un nuovo account utente in Microsoft Entra ID. Questo processo comporta la configurazione del profilo dell'utente, inclusi il nome visualizzato, l'indirizzo di posta elettronica e la password.

Creare un utente

In questo esempio viene creato un nuovo utente.

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

L'output visualizza i dettagli dell'utente appena creato.

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

Creare utenti in blocco

Per creare più utenti in blocco, è possibile usare un file CSV. Il file CSV deve contenere gli attributi utente necessari, ad esempio 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
    }
Nome Cognome DisplayName Indirizzo email Dipartimento MailNickName
Adele Vance Adele Vance adelev@contoso.com Marketing adelev

L'output visualizza i dettagli degli utenti appena creati.

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

Aggiornare la password di un utente

  1. Per aggiornare la password di un utente da parte dell'amministratore, usare questo 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. Per aggiornare la password per l'utente connesso (self-service), usare questo 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
    

    Questo comando consente agli utenti di modificare le proprie password senza privilegi di amministratore.

Caricare o recuperare una foto per l'utente

  1. Caricare una foto per un utente.

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

    In questo esempio la foto di anteprima dell'utente specificata con il parametro UserId viene impostata sull'immagine specificata con il parametro FilePath.

  2. Recuperare la foto di un utente.

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

    In questo esempio viene illustrato come recuperare la foto di anteprima di un utente specificato tramite il valore del UserId parametro .

Concedere agli utenti ruoli amministrativi nell'organizzazione

La concessione di ruoli amministrativi agli utenti nell'organizzazione consente loro di eseguire attività specifiche e gestire le risorse. È possibile assegnare utenti a ruoli come Amministratore gruppo, Amministratore utenti o altri ruoli personalizzati.

Per informazioni su come assegnare ruoli agli utenti usando Microsoft Entra PowerShell, vedere Assegnare ruoli agli utenti.

Cerca utenti

È possibile cercare gli utenti nell'organizzazione usando vari attributi, ad displayNameesempio , mailNicknameuserPrincipalName, department e jobTitle. Nell'esempio seguente viene illustrato come cercare un utente in base a userPrincipalName

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

L'output mostra i dettagli dell'utente sulla base di una ricerca userPrincipalName.

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

Controllare gli utenti in base a determinati criteri

È possibile controllare gli utenti in base a determinati criteri, ad esempio l'attività di accesso e le appartenenze ai gruppi. Questa funzionalità consente di tenere traccia delle attività degli utenti e di gestire l'accesso alle risorse.

Recuperare l'attività di accesso di un utente

Nell'esempio seguente viene illustrato come recuperare l'attività di accesso di un utente specifico.

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'

L'output mostra l'attività di accesso dell'utente.

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

Scarica l'attività di accesso di tutti gli utenti

Nell'esempio seguente vengono recuperati tutti gli account utente con licenza e l'ultima attività di accesso riuscita. Esporta i dati in un file CSV per un'ulteriore analisi.

# 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: $_"
 }

Questo esempio recupera sia le ultime date di accesso che le ultime date di accesso riuscite per tutti gli utenti dell'organizzazione. I dati vengono quindi esportati in un file CSV denominato lastSignIns.csv nella C:\temp directory .

Elencare le appartenenze ai gruppi di un utente

Nell'esempio seguente vengono elencati i gruppi di cui un utente è membro.

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

L'output mostra le appartenenze dell'utente.

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

Usare questi comandi per elencare le entità a cui appartiene un utente:

Ottenere il responsabile di un utente, indirizzare i report e assegnare un responsabile a un utente

  1. Ottieni il responsabile di un utente.

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

    L'output mostra il responsabile dell'utente.

    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. Elencare gli utenti che segnalano a un utente specifico.

    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
    

    L'output mostra il report diretto dell'utente.

    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. Assegnare un manager a un utente.

    Connect-Entra -Scopes 'User.ReadWrite.All'
    Set-EntraUserManager -UserId 'SawyerM@contoso.com' -ManagerId 'AdeleV@contoso.com'
    
    • -UserId: specifica l'ID (come UserPrincipalName o User ObjectId) di un utente in Microsoft Entra ID.
    • -ManagerId - specifica l'ID, come UserPrincipalName o User ObjectId, dell'oggetto Microsoft Entra ID da assegnare come manager.

Elencare gli utenti senza manager

Questo esempio elenca gli utenti senza un responsabile, consentendo di identificare account orfani, account di servizio o profili non configurati correttamente per la pulizia.

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

L'output elenca gli utenti senza manager.

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

Elencare gli utenti disabilitati

Nell'esempio seguente viene generato un elenco di account disabilitati.

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

L'output elenca gli utenti disabilitati.

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