none
ADユーザーのユーザー名をpowershellで変更する方法 RRS feed

  • 質問

  • ADユーザーのユーザ名の変更をスクリプトで実施しようとしています。

    $old_name=$args[0]
    $new_name=$args[1]
    
    $user = Get-ADUser "$old_name"
    
    $userprincipalname_array = $user.UserPrincipalName.Split("@")
    $UserPrincipalName = $new_name+"@"+$userprincipalname_array[1]
    
    $user.SamAccountName = "$new_name"
    $user.UserPrincipalName = "$UserPrincipalName"
    
    Set-ADUser -Instance $user
    
    参考サイトをもとに、スクリプトを作成したのですが、以下のエラーが発生致します。

    「"SamAccountName" の設定中に例外が発生しました: "アダプターでプロパティ "SamAccountName" の値を設定できません。"」
    発生場所 C:\work\script\AD-setting\ユーザー名変更\user-name.ps1:19 文字:1
    + $user.SamAccountName = "$new_name"
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException
        + FullyQualifiedErrorId : CatchFromBaseAdapterSetValue


    ユーザのプロパティを確認すると、SamAccountNameは変更されず、UserPrincipalNameのみ変更されておりました。

    $user.SamAccountName/$user.UserPrincipalName を片方ずつコメントアウトして実行すると、$user.SamAccountNameを実行すると同じエラーになってしまいました。

    SamAccountNameは変更できないものなのでしょうか。

    2017年4月8日 4:44

回答

  • SamAccountNameについては、プロパティ値を「.」を用いて直接代入することはできないようです。

    やり方としてはいくつかありますが、以下のようにするのが簡便かと思います。

    Set-ADUser -Identity $user -SamAccountName $new_name -UserPrincipalName $UserPrincipalName

    • 回答としてマーク mekamori 2017年4月9日 0:29
    2017年4月8日 8:54
    モデレータ

すべての返信

  • SamAccountNameについては、プロパティ値を「.」を用いて直接代入することはできないようです。

    やり方としてはいくつかありますが、以下のようにするのが簡便かと思います。

    Set-ADUser -Identity $user -SamAccountName $new_name -UserPrincipalName $UserPrincipalName

    • 回答としてマーク mekamori 2017年4月9日 0:29
    2017年4月8日 8:54
    モデレータ
  • 私も少し調べてみたのですが、-Identityで指定可能な

    • DistinguishedName
    • SID
    • SamAccountName

    がプロパティを直接変更できない様にされている様です。一応Get-ADUserなどの検索により取得された場合だけ制限される様ですが、それ以外のケースというのはちょっと思いつかず、基本的に変更できないものと考えるのが良さそうです。

    変更の仕方は牟田口さんの方法が良いかと思います。

    2017年4月8日 9:10
  • 牟田口様、stknohg様

    回答頂きありがとうございます。

    牟田口様に回答頂いたコマンドで変更することができました。ありがとうございました。

    2017年4月9日 0:31