Поиск по сайту:

Как использовать командлет Update-MgUser в PowerShell


Командлет Update-MgUser в PowerShell позволяет обновлять атрибуты пользователей Microsoft 365. Это особенно полезно, когда вы автоматизируете рабочие процессы или вам нужно обновить атрибуты нескольких пользователей одновременно.

Перед тем как обновить пользователя в Microsoft 365 с помощью MgGraph, всегда полезно сначала проверить пользователя и его атрибуты с помощью команды Get-MgUser.

В этой статье мы рассмотрим, как использовать командлет Update-MgUser, а в конце статьи я предоставлю бесплатный скрипт, который позволяет обновлять несколько атрибутов, используя файл CSV и PowerShell.

Требования

Прежде чем использовать cmdlet, вам необходимо убедиться, что вы установили модуль Microsoft Graph PowerShell.

Когда вы подключаетесь к Microsoft Graph, вам нужно использовать область User.ReadWrite.All. Это позволяет вам обновлять атрибуты пользователя.

Connect to Microsoft Graph
Connect-MgGraph -Scopes "User.ReadWrite.All" -NoWelcome

Используя Update-MgUser

Чтобы обновить атрибут пользователя, нам нужно знать UserId. Это может быть либо UserPrincipalName (например, meganb@a-d.site), либо фактический ObjectId пользователя, который является GUID, например b8d3j4a1-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Теперь, что большинство не знает, так это то, что существует специфическая команда обновления пользователя, когда вы используете UserPrincipalName. Команда Update-MgUserByUserPrincipalName позволяет вам обновлять объект пользователя только на основе UserPrincipalName. Кроме того, нет никаких отличий.

Лично я на самом деле не использую это; единственное преимущество, возможно, это ясность кода. Но будучи менее известным, это также вызывает больше вопросов.

Итак, чтобы просто обновить атрибут пользователя, например, отображаемое имя, вы можете сделать так:

Update-MgUser -UserId meganb@a-d.com -DisplayName "Megan Bowen"

This cmdlet does exactly the same:
Update-MgUserByUserPrincipalName -UserPrincipalName meganb@a-d.com -DisplayName "Megan Bowen"

Давайте рассмотрим некоторые другие распространённые примеры:

Изменить должность и отдел пользователя

Общее действие - обновить должность пользователя и/или отдел. Как видно из примера ниже, вы можете обновить несколько полей одновременно:

Update-MgUser -UserId meganb@a-d.com -JobTitle "IT Support Specialist" -Department "IT Services"

Отключить учетную запись пользователя

Командлет также можно использовать для отключения учетной записи пользователя. Когда пользователь покидает компанию, вы можете легко (или автоматически) отключить учетную запись, используя следующую команду:

Update-MgUser -UserId meganb@a-d.com -AccountEnabled $false

Чтобы снова включить его, просто установите -AccountEnabled в $true.

Скрыть пользователя из глобального адресного списка (GAL)

Все учетные записи пользователей автоматически добавляются в Глобальный адресный список (GAL). Но иногда вы хотите скрыть учетную запись от него. Это можно сделать, установив атрибут -ShowInAddressList в значение false.

Update-MgUser -UserId "svc.migration@a-d.site" -ShowInAddressList $false

Сбросить пароль пользователя

Мы также можем использовать командлет update-mguser, чтобы сбросить пароль пользователя и заставить его установить новый пароль при следующем входе.

Update-MgUser -UserId meganb@a-d.com -PasswordProfile @{
    password = "LazyTempPass#123"
    forceChangePasswordNextSignIn = $true
}

Обновление нескольких пользователей сразу

С помощью PowerShell мы, конечно, можем обновить несколько пользователей одновременно. Существует несколько способов сделать это. Мы можем использовать CSV файл с пользователями и полями, которые хотим обновить, или получить список пользователей и обновить поля.

Предположим, название отдела изменилось. Это означает, что нам нужно обновить название для нескольких пользователей. Мы можем просто получить пользователя сначала, используя командлет Get-MgUser с фильтром, а затем пройтись по ним с помощью цикла ForEach и обновить пользователей:

Get-MgUser -Filter "Department eq 'Sales'" -All |
ForEach-Object {
    Update-MgUser -UserId $_.Id -Department "Business Development"
}

Обновить пользователей с помощью файла CSV

Если вам нужно обновить нескольких пользователей и, возможно, даже несколько полей, использование CSV-файла в качестве входных данных часто является лучшей идеей. Это также позволяет передать заполнение деталей другому отделу, например, кадровому, так что вы можете легко обновить все атрибуты.

Скрипт ниже обновит должность и отдел пользователя, когда они указаны в файле CSV. Если поле пустое, то существующие данные в атрибуте не будут удалены.

Сначала он попытается получить пользователя на основе UserPrincipalName, а если не получится, то использует отображаемое имя. Полный скрипт вы можете найти здесь в моем репозитории на GitHub.

$csv = Import-Csv "C:\Scripts\UserUpdates.csv"

foreach ($row in $csv) {
    # Try to get the user by UPN or DisplayName
    if (![string]::IsNullOrEmpty($row.UserPrincipalName)) {
        $user = Get-MgUser -UserId $row.UserPrincipalName -ErrorAction SilentlyContinue
    }
    elseif (![string]::IsNullOrEmpty($row.DisplayName)) {
        $user = Get-MgUser -Filter "displayName eq '$($row.DisplayName)'" -ErrorAction SilentlyContinue
    }
    else {
        Write-Warning "No identifier provided for row: $($row | Out-String)"
        continue
    }

    if (-not $user) {
        Write-Warning "User not found: $($row.UserPrincipalName ?? $row.DisplayName)"
        continue
    }

    # Build properties to update only if values are provided
    $updateProps = @{}
    if (![string]::IsNullOrEmpty($row.JobTitle)) {
        $updateProps["JobTitle"] = $row.JobTitle
    }
    if (![string]::IsNullOrEmpty($row.Department)) {
        $updateProps["Department"] = $row.Department
    }

    if ($updateProps.Count -gt 0) {
        Update-MgUser -UserId $user.Id @updateProps
        Write-Host "Updated user $($user.UserPrincipalName)"
    }
    else {
        Write-Host "No changes for $($user.UserPrincipalName)"
    }
}

Заключение

Командлет Update-MgUser отлично подходит, когда вам нужно обновить несколько пользователей или когда вы хотите автоматически обновить атрибуты пользователей на основе рабочего процесса или другой автоматизации.

Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.