Office365導入準備の為のUPN一括変更

Office365 Deployment Readiness Toolの紹介でも書きましたが、Office365でIDフェデレーション環境を構築する場合、UPN名がインターネットから解決できる自社の保有するドメインである必要があります。

このため、example.localなどのUPN名でActive Directoryを構築済みである場合、ローカルのUPN名を変更する必要があります。また、NTドメインからアップグレードして、そのままのユーザ(UPN名が設定されていないユーザ)なども、ドメイン名ユーザ名の形式のNTログイン名の他、UPN名を設定する必要があります。

UPN変更の影響範囲が大きいので、ベータ版初期の頃より色々と皆様がUPNではなくmail属性で認証できるようになど試行錯誤されておりますが、Microsoftがサポート不可と言っている点や、検証した範囲でLyncやOutlookなどのリッチクライアントで対応が出来なさそうな点などから、逆に思い切ってUPNを変更してしまった方が、全体的な影響範囲は少なくなるかもしれません。

ユーザ数が少ない場合はユーザー プリンシパル名サフィックスを追加するなどを参考にして新しいUPNフィックスを追加後、Active DirectoryユーザーとコンピュータでGUIで変更しても良いのですが、数が多い場合はスクリプトで変更する必要があります。

PowerShellを利用する場合は、Set-ADUserコマンドレットを利用して、該当するユーザのUPNを変更します。例えば、ドメイン内でexample.localのUPN名を持つ全ユーザのUPNを、「ユーザ名@example.com」に変えるには、Get-ADUserのFilterで条件を指定した物を、Set-ADUserに入れてあげれば大丈夫です。簡単に書くなら

Import-Module ActiveDirectory
Get-ADUser -Filter { UserPrincipalName -like '*@example.local' } | % { Set-ADUser -id $_ -UserPrincipalName ($_.UserPrincipalName -replace '@example.local','@example.com') }

こんな感じでしょうか。example.localドメインのユーザOU配下のユーザーのうち、UPN名が空のユーザに対して「NTユーザ名@example.com」のUPN名を設定するには、少し丁寧に書くなら

Import-Module ActiveDirectory
$upn = $users = $null
$users = Get-ADUser -SearchBase 'OU=ユーザー,DC=example,DC=local' -filter *
ForEach($user in $users) {
 if([string]::isNullOrEmpty($user.UserPrincipalName)) {
  $upn = $user.SamAccountName +"@example.com"
  Set-ADUser -Identity $user.distinguishedName -UserPrincipalName $upn
 }
}

などとすれば大丈夫です。WSHで書きたければ、

Dim oADUser
Set oADUser=GetObject("LDAP://OU=ユーザー,DC=example,DC=local")
ModifyUPN oADUsers
Set oADUser = Nothing
WScript.Quit(0)

Sub ModifyUPN(argv)
  Dim ADUser
  argv.Filter = Array("user")
  For Each ADUser in argv
    If IsEmpty(ADUser.userPrincipalName) Then
      ADUser.Put "userPrincipalName" , ADUser.samAccountName & "@example.com"
      ADUser.SetInfo
    End If
  Next
End Sub

とかですかね(あ、再帰検索してないから動作違うか)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です