Microsoft 365 プロフィール画像のコマンドで登録する方法

Microsoft 365のプロフィール画像をまとめて登録する方法を紹介する。

他のユーザのプロフィール画像を変更するための権限設定

他のユーザーのプロフィール画像をコマンドで変更するには、管理者権限が必要になる。全体的な管理者「グローバル管理者」権限のあるユーザーであれば可能。

また、細かい権限設定をする場合は、「Microsoft 365 管理センター」で特定のユーザーを選択し、「役割」セクションの「役割の管理」で「管理者の役割の管理」画面で、「Exchange 管理者」「ユーザー管理者」にチェックする。

パソコン毎の初期設定

パソコンごとに初回のみ下記のコマンドを実行する。PowerShellを「管理者として実行」で開き、下記のコマンドを実行する

Install-Module -Name ExchangeOnlineManagement

コマンドを実行するための準備

コマンドを実行するためには、事前にMicrosoft365(Exchange)に接続する必要がある。PowerShellを開き、下記のコマンドを実行して接続する。

Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline

上記のコマンドを実行する。

コマンドを実行すると、実行するユーザーのサインイン画面が表示される。設定権限があるユーザーでサインしよう。自分のユーザー以外でもサインイン可能。

プロフィール画像を登録するコマンド

PowerShellのコマンドで実行することができる。コマンド書式は下記となる。

Set-UserPhoto -Identity "[登録するアカウントのメールアドレス]" -PictureData ([System.IO.File]::ReadAllBytes("[画像のファイルパス]")) -Confirm:$false

一括でコマンドを作成する場合は、Excelでメールアドレスとファイル名の一覧を作り、コマンドを生成すれば良いだろう。

プロフィール画像を削除するコマンド

プロフィール画像を追加したが削除した場合は、下記のコマンドで削除することができる

Remove-UserPhoto -Identity "[削除するアカウントのメールアドレス]" -Confirm:$false

プロフィール画像を登録した後の対応

プロフィール画像を登録すると、Microsoft365の各サービスの画面に反映されていく。
SharepointやOutlookはすぐに反映される模様。
Teamsは反映されない場合があり、数日たっても反映されない。完全に反映させるには、現状はクライアントごとに一度サインアウト→サインインを実施する必要があるようだ。

プロフィール画像の登録コマンドツール作成

上記までで一括して登録はできただろう。その後、アカウントを追加するごとにコマンドを実行するのは面倒である。
ということで、PowerShellのコマンドファイルを作り、毎回コマンドファイルを実行して画像を登録できるようにしよう。

下記のようなコマンドを作成し、「SetUserPhoto.ps1」のファイル名で保存する。

####################################
### created by itmemo123.net
####################################
try {
    Import-Module ExchangeOnlineManagement
    Connect-ExchangeOnline

    ####### 画像選択画面を表示
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")

    $dialog = New-Object System.Windows.Forms.OpenFileDialog
    $dialog.Filter = "画像ファイル(*.PNG;*.JPG;*.GIF)|*.PNG;*.JPG;*.JPEG;*.GIF"
    $dialog.InitialDirectory = "C:\"
    $dialog.Title = "ファイルを選択してください"
    $dialog.Multiselect = $false
    $ImageFilePath = ""

    # ダイアログを表示
    if($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){
        # 複数選択を許可している時は $dialog.FileNames を利用する
        Write-Output ("画像ファイル: " + $dialog.FileName)
        $ImageFilePath = $dialog.FileName
    }
    else {
        Write-Output "処理を中止しました!"
        pause
        exit 1
    }

    ##### メールアドレスを入力
    # アセンブリの読み込み
    [void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

    $mailadr = [Microsoft.VisualBasic.Interaction]::InputBox("メールアドレスを入力してください", "メールアドレス入力")

    Write-Output ("メールアドレス: " + $mailadr)

    if($mailadr -eq "") {
        Write-Output "処理を中止しました!"
        pause
        exit 2
    }

    ##### 画像をアップロード
    Set-UserPhoto -Identity $mailadr -PictureData ([System.IO.File]::ReadAllBytes($ImageFilePath)) -Confirm:$false

    Write-Output "画像のアップロード処理が完了しました"
    Write-Output "エラーがなければアップロード完了です。"

    Disconnect-ExchangeOnline
    Pause
}
catch {
    Write-Output 画像の登録に失敗しました!"
    Pause
}

プロフィール画像の削除コマンドツール作成

削除も作っておくと良いだろう。
下記のようなコマンドを作成し、「RemoveUserPhoto.ps1」のファイル名で保存する。

####################################
### created by itmemo123.net
####################################
try {
    Import-Module ExchangeOnlineManagement
    Connect-ExchangeOnline

    ##### メールアドレスを入力
    # アセンブリの読み込み
    [void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

    $mailadr = [Microsoft.VisualBasic.Interaction]::InputBox("メールアドレスを入力してください", "メールアドレス入力")
    if($mailadr -eq "") {
        Write-Output "処理を中止しました!"
        pause
        exit 2
    }

    ##### 画像を削除
    Remove-UserPhoto -Identity $mailadr -Confirm:$false

    Write-Output "画像の削除が完了しました!"

    Disconnect-ExchangeOnline

    Pause
}
catch {
    Write-Output "画像の削除に失敗しました!"
    Pause
}

コメント

タイトルとURLをコピーしました