ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Microsoft365のユーザーアカウントの表示名に敬称を一括で付加するPowershellスクリプト

メンションに敬称を付加するかべきか否か問題の1つの回答?

Microsoft365を日本で利用しているかアカウントに一括で表示名の末尾に敬称を付加するPowershellスクリプトです。 幸い日本にはジェンダーフリーな敬称"さん”がありますので、一括で付与しても問題ありません。(…ないですよね?)
アカウントの表示名に'さん'がついていれば、メンションする際にわざわざ'さん'を付加する手間から解放されます。
同じ手順で敬称ではなく役職を付与する事も可能です。

冗談半分でアイデアを出したらうっかり真面目に検証することになったのですが、検討のみで正式採用には至りませんでした。 Powershellで3つのモジュールそれぞれの検証結果の備忘録です。
※いずれも適切な権限を持ったユーザーアカウントで実施する必要があります。

2024/2/21追記

Powershell MSOnline および AzureADは2024年3月30日で非推奨となることが予告されています。今後はMicrosoft Graph Powershellを使った方がよさそうです。 jpazureid.github.io

Powershell MSOnlineモジュールで行う

※このモジュールはArm版Windows 11ではインストールは可能ですが動作しません。  

Powershell MSOnline モジュールのインストール

初回はインストールが必要です。

Install-Module -Name MSOnline

実際の処理

#m365に接続
Connect-MsolService
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
Get-MsolUser -UsageLocation 'JP' |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 foreach {Set-MsolUser -UserPrincipalName $_.UserPrincipalName -DisplayName ($_.DisplayName + ' さん') }

コマンドを実行すると、利用場所(UsageLocation)が日本のユーザーアカウントに対し、表示名の末尾に' さん'を付与します。
メンションに敬称問題は日本以外の国であるのか不明である為、利用場所でフィルタリングしています。
共有メールボックスやリソースユーザーにはデフォルトではUsageLocationは付与されない為影響ありませんが、条件を変更する場合は注意が必要です。(ゲストユーザーはUsageLocationが付与されるようです)
検証環境ではこの条件で問題ありませんでしたが、条件には十分な検証が必要そうです。  

二重に付与しないように末尾が' さん'のユーザーアカウントは除外していますので、何度実行しても問題ありません。 このスクリプトだけではユーザーアカウントの利用場所(UsageLocation)を変更すること場合は想定していませんので、別途対応が必要になります。

変更が反映されるまで時間がかかる場合があります。

Powershell AzureAD モジュールで行う

※このモジュールはArm版Windows 11ではインストールは可能ですが動作しません。  

Powershell AzureAD モジュールのインストール

初回はインストールが必要です。

Install-Module -Name AzureAD

実際の処理

グローバル管理者などのアカウントでサインインします。

#AzureADに接続
Connect-AzureAD
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
Get-AzureADUser -Filter "UsageLocation eq 'JP'" |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 ForEach-Object { Set-AzureADUser -ObjectId  $($_.ObjectId) -DisplayName  ($($_.DisplayName) + ' さん')} 

処理内容はMSOnlineモジュールを使った場合と同じです。

PowerShell Microsoft Graph モジュールで行う

※このモジュールはArm版Windows 11で問題なく利用可能です。

Powershell AzureAD モジュールのインストール

Install-Module -Name Microsoft.Graph

実際の処理

Scopesには実行するコマンドに必要なアクセス権限を指定する必要があります。
今回はユーザーの読み書きを行いますので"User.ReadWrite.All"を指定します。

Connect-MgGraph -Scopes "User.ReadWrite.All"
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
 Get-MGUser -Filter "UsageLocation eq 'JP'" |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 ForEach-Object { Update-MgUser -UserId  $($_.Id) -DisplayName  ($($_.DisplayName) + ' さん')} 

処理内容はMSOnlineモジュールを使った場合と同じです。

#セッションを切断する
Disconnect-MgGraph

実行後

反映されるまで数日かかる場合もあります。
反映された後はメンション指定する際に気にする必要はなくなりました!

ただし表示名を変更していますので、Teamsのメンションだけでなく他にも影響は及びます。

Teams会議に参加すると外部参加者にも敬称付きで見えます  

これについては回避方法は見つけられませんでした。  

Exchange Online 外部宛のメール送信時の送信者にも敬称はつきます(回避方法あり)

既定値では外部にもFromのメールアドレスが"表示名 <username@domainname>"で送信されます。
この為、今回の'さん'をつける変更を行うと外部にもさん付けの送信者でメールが送られてしまいます。

これについては、2つの回避方法があります。
ExchangeOnlineには、英数字しか設定できないSimpleDisplayName属性があります。 ここに適切な英字名を設定することで、外部へのメール送信時のFromに使用する設定があります。
または、外部へのメール送信時にFromをメールアドレスのみとする対応も可能です。

Exchange Online Powershell モジュールのインストール

初回は管理者権限を持ったアカウントでインストールが必要です。

Import-Module ExchangeOnlineManagement

実際の処理

・外部へのメール送信時のFromにSimpleDisplayNameを使う

#ユーザーごとに設定が必要
Set-User sasami@xxxxxxx.onmicrosoft.com -SimpleDisplayName sasami

Set-RemoteDomain -Identity "Default" -DisplaySenderName $true  -UseSimpleDisplayName $true

・外部へのメール送信時のFromに送信者名を表示しない

Set-RemoteDomain -Identity "Default" -DisplaySenderName $false

※ 実行例 では既定のリモート ドメインである Defaultの設定を変更しています。

さいごに

Powershell でMS365に接続する手順の覚書として'さん'付け問題を例にしてみましたが、あくまで架空の例です。
個人的にはメンションする際に敬称は不要派です。ルールやマナーで決めるのではなく、各自で判断すればよい事かと考えます。