PowerShellでUpdate-MgUserコマンドレットを使用する方法
PowerShell の Update-MgUser コマンドレットを使用すると、Microsoft 365 ユーザーの属性を更新できます。これは、ワークフローを自動化したり、複数のユーザーの属性を一度に更新する必要がある場合に特に便利です。
Microsoft 365でMgGraphを使用してユーザーを更新する前に、Get-MgUserコマンドレットを使用して最初にユーザーとその属性を確認することが常に良いアイデアです。
この記事では、Update-MgUserコマンドレットの使用方法について見ていきます。記事の最後には、CSVファイルとPowerShellを使用して複数の属性を更新できる無料のスクリプトを提供します。
要件
コマンドレットを使用する前に、Microsoft Graph PowerShell モジュールがインストールされていることを確認する必要があります。
Microsoft Graphに接続する際には、User.ReadWrite.Allスコープを使用する必要があります。これにより、ユーザーの属性を更新することができます。
Connect to Microsoft Graph
Connect-MgGraph -Scopes "User.ReadWrite.All" -NoWelcomeUpdate-MgUser を使用して
ユーザー属性を更新するには、UserIdを知る必要があります。これはUserPrincipalName(例:meganb@lazyadmin.nl)であるか、ユーザーの実際のObjectIdで、これはb8d3j4a1-xxxx-xxxx-xxxx-xxxxxxxxxxxxのようなGUIDです。
さて、多くの人が知らないのは、UserPrincipalNameを使用しているときに特定の更新ユーザーcmdletがあることです。このcmdlet、Update-MgUserByUserPrincipalNameは、UserPrincipalNameに基づいてのみユーザーオブジェクトを更新することを可能にします。それ以外には、違いはありません。
個人的には、あまり使っていません; 唯一の利点はコードの明確さかもしれません。しかし、あまり知られていないため、より多くの疑問を生むこともあります。
したがって、表示名のようなユーザー属性を単純に更新するには、次のようにします:
Update-MgUser -UserId meganb@lazyadmin.com -DisplayName "Megan Bowen"
This cmdlet does exactly the same:
Update-MgUserByUserPrincipalName -UserPrincipalName meganb@lazyadmin.com -DisplayName "Megan Bowen"他の一般的な例をいくつか見てみましょう:
ユーザーの職種と部署を変更する
一般的なアクションは、ユーザーの職名や部門を更新することです。以下の例に示すように、複数のフィールドを一度に更新することができます:
Update-MgUser -UserId meganb@lazyadmin.com -JobTitle "IT Support Specialist" -Department "IT Services"ユーザーアカウントを無効にする
このコマンドレットは、ユーザーアカウントを無効にするためにも使用できます。ユーザーが会社を去るとき、次のコマンドを使用することで、アカウントを簡単に(または自動的に)無効にすることができます:
Update-MgUser -UserId meganb@lazyadmin.com -AccountEnabled $false再度有効にするには、単に -AccountEnabled を $true に設定してください。
全体アドレス帳 (GAL) からユーザーを非表示にする
すべてのユーザーアカウントは自動的にグローバルアドレスリスト(GAL)に追加されます。しかし、時にはアカウントをそこから隠したい場合があります。これは、属性 -ShowInAddressList を false に設定することで実行できます。
Update-MgUser -UserId "svc.migration@lazyadmin.nl" -ShowInAddressList $falseユーザーのパスワードをリセットする
update-mguser コマンドレットを使用して、ユーザーのパスワードをリセットし、次回ログイン時に新しいパスワードを設定させることもできます。
Update-MgUser -UserId meganb@lazyadmin.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 コマンドレットは、複数のユーザーを更新する必要がある場合や、ワークフローやその他の自動化に基づいてユーザー属性を自動的に更新したい場合に便利です。
この記事を気に入っていただけたら幸いです。質問がある場合は、下にコメントを残してください。