Как использовать командлет 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 отлично подходит, когда вам нужно обновить несколько пользователей или когда вы хотите автоматически обновить атрибуты пользователей на основе рабочего процесса или другой автоматизации.
Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.