Active Directoryのユーザーアカウントには、 thumbnailPhotoという特別な属性があります。これは少し変わっていますが、ユーザーの写真を保存できる便利なものです。これらの写真は、Outlook、OWA、Word、Excel、Skype for Business、Teams、SharePointでアバターとして表示されるだけでなく、デスクトップのログイン画像としても表示されます。しかし、これらの写真の管理は分かりにくく、アップロードした写真がどこにも表示されない場合や、ADから一括更新や写真の取得をしようとする場合など、様々な問題が発生することがあります。このガイドでは、ADでユーザーの写真を追加、更新、またはトラブルシューティングする方法について説明します。これは、多数のアカウントを管理している場合や、ユーザープロファイルの外観に一貫性を持たせたい場合に特に役立ちます。
通常、これらの写真は属性の下にバイナリデータとして保存されますthumbnailPhoto。PowerShell、Active Directory ユーザーとコンピューター スナップイン(少し拡張機能が必要)、あるいはサードパーティ製のツールを使用して設定または更新できます。注意点としては、画像のサイズ、解像度、形式が重要です。最適なパフォーマンスと互換性を得るには、約10KB、96×96ピクセルのJPEG画像が推奨されます。大きな画像を使用すると、ADデータベースのサイズとトラフィックが膨れ上がる可能性があります。これは当然のことながら、Windows 側で必要以上に処理を複雑にする必要があるためです。
PowerShell を使用して AD でユーザーの写真を追加/更新する方法
方法1: PowerShellコマンドを直接使用して写真をアップロードする
では、なぜこれが役立つのでしょうか?PowerShellを使えば、GUIやサードパーティ製ソフトウェアを煩わすことなく、ADに写真をアップロードできます。特に、自動化や一括操作が必要な場合に便利です。JPEG、PNG、またはBMP形式のファイルをADユーザーに添付したい場合で、CLIを少しいじっても構わないという場合に役立ちます。画像をRAWバイトに変換した後、ADがこの情報をドメイン全体に複製すると、Outlook/Exchangeなどのアプリで写真が表示されます。
通常、プロセスは次のようになります。まず、画像をバイト配列に変換します。
$photo = [byte[]](Get-Content C:\PS\jkuznetsov_photo.jpg -Encoding byte)
次に、以下を使用してアップロードします。
Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=$photo}
これはADに現在の写真を置き換える(または、写真がない場合は設定する)よう指示します。ワンライナーバージョンが便利です。
Set-ADUser jkuznetsov -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\jkuznetsov_photo.jpg" -Encoding byte))}
注意すべき点が1つあります。互換性を確保するには、画像が100KB以下で、JPEG形式であることを確認してください。環境によっては、この操作を実行しても写真がすぐに表示されない場合があります。Outlookを更新したり、レプリケーションを待ったりする必要がある場合があり、少し面倒です。特定のマシンでは属性がすぐに更新されないこともありますが、Outlookの再起動やキャッシュの問題が原因であることが多いです。
あるいは、一括更新の場合は、次のような CSV を準備することもできます。
AD_username, Photo asmith, C:\PS\asmith.jpg john.doe, C:\PS\john_doe.png jkuznetsov, C:\PS\jkuznetsov.jpg
次に以下を実行します:
Import-Csv C:\PS\import.csv | %{ Set-ADUser -Identity $_. AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_. Photo -Encoding byte))} }
これは特に多くのアカウントを管理する場合に時間を節約できる方法です。ただし、Outlookの連絡先の画像を表示したい場合は、Outlookのオプションで「ユーザーの写真がある場合は表示する」を有効にする必要があるかもしれません。WindowsやOutlookはデフォルトでこの機能を非表示にしているためです。
方法2: ADから写真を抽出し、JPGとして保存する
他の場所で使用したり、単にバックアップするために AD から写真を取り出そうとしている場合は、バイト配列を取得してファイルとして保存するだけです。
$ADuser = Get-ADUser jkuznetsov -Properties thumbnailPhoto $ADuser.thumbnailPhoto | Set-Content c:\PS\jkuznetsov.jpg -Encoding byte
問題は、一部のマシンではバイト配列をファイルに保存しても必ずしもきれいに動作しないということです。適切なエンコードを確認したり、サードパーティ製のツールを使用したりする必要がある場合もあります。しかし、特に後で画像を監査したり再アップロードしたりする必要がある場合は、これで通常は問題なく動作します。
PowerShell または OWA を使用してユーザーの写真を Exchange にインポートする
Exchange Server (2013、2016、2019) をご利用で、写真を Outlook またはグローバルアドレス一覧に表示したい場合は、Set-UserPhotoコマンドを使用します。このコマンドは AD とは少し異なり、メールボックス自体に保存されるため、エンドユーザーへの表示としてはより信頼性が高くなります。
Exchange モジュールをロードして実行します。
Add-PSSnapin Microsoft. Exchange. Management. PowerShell. SnapIn Set-UserPhoto -Identity jkuznetsov -PictureData ([System. IO. File]::ReadAllBytes("C:\PS\jkuznetsov_photo.jpg")) -Confirm:$False
または、写真を削除したい場合は、次の手順に従ってください。
Remove-UserPhoto -Identity jkuznetsov
2010 などの以前のバージョンの Exchange の場合は、次を使用します。
Import-RecipientDataProperty -Identity jkuznetsov -Picture -FileData ([Byte[]](Get-Content -Path "C:\PS\jkuznetsov.jpg" -Encoding Byte -ReadCount 0))
注: Microsoft Graph 経由で Exchange Online の写真を管理するには、Set-MgUserPhotoContentなどの新しいコマンドレットが必要です。少し面倒ですが、問題なく動作します。
ユーザーは、Outlook Web Access でプロフィール写真を直接アップロードまたは変更することもできます。プロフィールアイコンをクリックし、「情報の編集」 → 「写真」を選択して新しい写真を選択します。PowerShell よりも GUI を好む場合は、これが最も簡単な方法です。
サードパーティ製ツールを使用してADUCに写真タブを追加する
PowerShellやOutlookが苦手な方には、CodeTwo Active Directory PhotosやAD Photo Editなどのサードパーティ製ツールがあります。これらのツールはADUCにGUIタブを追加し、写真管理をはるかにシンプルにします。ただし、セキュリティ上の理由から外部ソフトウェアに頼るのはあまり好ましくありませんが、スクリプト作成が苦手な方にはより使いやすいでしょう。
勇気のある方は、 AdExt.dllという小さなDLLを使ってADUCコンソールに「写真」タブを直接追加できます。.NET FrameworkInstallUtil.exeディレクトリ内にこれを登録し、dsa.msc を再起動するだけで、写真タブが表示されます。このDLLを使って画像をアップロードすると、サムネイルやjpegPhotoなどの選択した属性に基づいて、自動的にサイズ調整または圧縮されます。
後で登録を解除するには、次のコマンドを実行します。
InstallUtil.exe /u c:\ps\ad\AdExt.dll
注意:画像はリサイズ、圧縮、または96×96ピクセル、最大10KBに制限されるため、高解像度のポートレートは期待できません。しかし、ADUCで何も考えずにクリックして画像が固定されるのを待つよりはましです。
全体的に見て、スクリプトを使うか、GUIを使うか、サードパーティ製のアドオンを使うかに関わらず、ADでユーザーの写真を管理することは可能です。ただ、少し面倒です。この方法が、私が経験した終わりのない試行錯誤を誰かが回避するのに役立つことを願っています。
まとめ
- PowerShell を使用して画像をバイト配列に変換し、thumbnailPhoto 属性を設定します。
- 一括更新ですか? CSV + PowerShell ループで管理しやすくなります。
- Outlook または OWA で写真が必要ですか? Set-UserPhoto を使用するか、GUI 経由で直接アップロードしてください。
- GUI が必要ですか? サードパーティのツールや DLL 拡張機能を使用すると管理が簡素化されますが、セキュリティ上の懸念に注意してください。
- データベースの肥大化やレプリケーションの遅延を防ぐため、イメージのサイズを小さく一定に保ちます。
まとめ
Active Directoryでユーザーの写真を管理するのは簡単ではありませんが、これらのコツを使えば簡単に管理できます。特に、一括更新や画像不足のトラブルシューティングを行う場合は効果的です。一括処理やスクリプトによるタスクにはPowerShellが依然として最適ですが、スクリプトを使用しない場合はGUIソリューションでも問題ありません。重要なのは、小さく最適化された画像です。大きい画像が良いというわけではありません。この記事が、誰かの写真管理に苦労している時間を少しでも節約したり、正しい方向へ導いたりするのに役立つことを願っています。頑張ってください!