Mengelola pengguna dengan Microsoft Entra PowerShell

Pengguna merupakan representasi dari akun pengguna kerja atau sekolah Microsoft Entra atau Akun Microsoft pribadi di Microsoft Entra ID. Sumber daya pengguna di Microsoft Entra PowerShell adalah representasi pengguna, dan menyertakan hubungan dan sumber daya yang relevan dengan pengguna.

Sumber daya pengguna menyediakan cara mudah bagi Anda untuk mengakses dan memanipulasi sumber daya pengguna tanpa harus melakukan panggilan tambahan, mencari informasi autentikasi tertentu, dan langsung mengeluarkan kueri terhadap objek PowerShell Microsoft Entra lainnya.

Prasyarat

Untuk mengelola pengguna dengan Microsoft Entra PowerShell, Anda memerlukan:

Anda dapat mengakses informasi pengguna dan mengelola data mereka atas nama mereka atau sebagai aplikasi dengan identitasnya sendiri.

Tambahkan pengguna

Untuk onboarding pengguna, Anda membuat akun pengguna baru di Microsoft Entra ID. Proses ini melibatkan pengaturan profil pengguna, termasuk nama tampilan, alamat email, dan kata sandi mereka.

Buat pengguna

Contoh ini membuat pengguna baru.

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

Keluaran menampilkan detail dari pengguna yang baru dibuat.

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

Membuat pengguna secara massal

Untuk membuat beberapa pengguna secara massal, Anda dapat menggunakan file CSV. File CSV harus berisi atribut pengguna yang diperlukan, seperti DisplayName, , UserPrincipalNamedan 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
    }
Nama Depan NamaBelakang DisplayName Alamat Email Departemen MailNickName
Adele Vance Adele Vance adelev@contoso.com Marketing adelev

Output tersebut menampilkan detail pengguna yang baru saja dibuat.

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

Memperbarui kata sandi pengguna

  1. Untuk memperbarui kata sandi pengguna oleh administrator, gunakan perintah ini:

    Connect-Entra -Scopes 'Directory.AccessAsUser.All'
    $newPassword = '<strong-password>'
    $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
    Set-EntraUserPasswordProfile -UserId 'SawyerM@contoso.com' -Password $securePassword
    
  2. Untuk memperbarui kata sandi untuk pengguna yang masuk (layanan mandiri), gunakan perintah ini:

    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
    

    Perintah ini memungkinkan pengguna untuk mengubah kata sandi mereka sendiri tanpa hak istimewa admin.

Mengunggah atau mengambil foto untuk pengguna

  1. Unggah foto untuk pengguna.

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

    Contoh ini menetapkan foto mini pengguna yang ditentukan dengan parameter UserId menjadi gambar yang ditentukan dengan parameter FilePath.

  2. Ambil foto pengguna.

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

    Contoh ini menunjukkan cara mengambil foto miniatur pengguna yang ditentukan melalui nilai parameter UserId.

Memberikan peran administratif kepada pengguna di organisasi Anda

Memberikan peran administratif kepada pengguna di organisasi Anda memungkinkan mereka melakukan tugas tertentu dan mengelola sumber daya. Anda dapat menetapkan pengguna ke peran seperti Administrator Grup, Administrator Pengguna, atau peran kustom lainnya.

Untuk mempelajari cara menetapkan peran kepada pengguna menggunakan Microsoft Entra PowerShell, lihat Menetapkan peran kepada pengguna.

Mencari pengguna

Anda dapat mencari pengguna di organisasi Anda menggunakan berbagai atribut seperti displayName, , mailNicknameuserPrincipalName, department dan jobTitle. Contoh berikut menunjukkan cara mencari pengguna dengan userPrincipalName

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

Output menampilkan detail pengguna berdasarkan pencarian userPrincipalName.

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

Mengaudit pengguna berdasarkan kriteria tertentu

Anda dapat mengaudit pengguna berdasarkan kriteria tertentu, seperti aktivitas masuk, dan keanggotaan grup. Fitur ini membantu Anda melacak aktivitas pengguna dan mengelola akses mereka ke sumber daya.

Mendapatkan aktivitas masuk pengguna

Contoh berikut menunjukkan cara mengambil aktivitas masuk pengguna tertentu.

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'

Output menunjukkan aktivitas masuk pengguna.

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

Unduh semua aktivitas masuk pengguna

Contoh berikut mengambil semua akun pengguna berlisensi dan aktivitas masuk terakhir mereka yang berhasil. Ini mengekspor data ke file CSV untuk analisis lebih lanjut.

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

Contoh ini mengambil tanggal masuk terakhir dan tanggal terakhir berhasil masuk untuk semua pengguna di organisasi Anda. Data kemudian diekspor ke file CSV bernama lastSignIns.csv di C:\temp direktori.

Mencantumkan keanggotaan grup pengguna

Contoh berikut mencantumkan grup tempat pengguna menjadi anggota.

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

Output menunjukkan keanggotaan pengguna.

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

Gunakan perintah ini untuk mencantumkan entitas milik pengguna:

Dapatkan manajer pengguna, bawahan langsung, dan tetapkan manajer untuk pengguna

  1. Dapatkan manajer pengguna.

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

    Keluaran menampilkan manajer pengguna.

    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. Mencantumkan pengguna yang melapor ke pengguna tertentu.

    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
    

    Output menunjukkan laporan langsung pengguna.

    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. Tetapkan seorang manajer untuk seorang pengguna.

    Connect-Entra -Scopes 'User.ReadWrite.All'
    Set-EntraUserManager -UserId 'SawyerM@contoso.com' -ManagerId 'AdeleV@contoso.com'
    
    • -UserId- menentukan ID (sebagai UserPrincipalName atau User ObjectId) pengguna di Microsoft Entra ID.
    • -ManagerId - menentukan ID berupa UserPrincipalName atau User ObjectId) dari objek Microsoft Entra ID yang akan ditetapkan sebagai manajer.

Mencantumkan pengguna tanpa manajer

Contoh ini menampilkan pengguna tanpa manajer, sehingga membantu mengidentifikasi akun yatim, akun layanan, atau profil yang salah dikonfigurasi untuk dibersihkan.

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

Keluaran mencantumkan pengguna tanpa manajer.

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

Mencantumkan pengguna yang dinonaktifkan

Contoh berikut menghasilkan daftar akun yang dinonaktifkan.

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

Output tersebut mencantumkan pengguna yang dinonaktifkan.

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