トップ回答者
AD属性値の設定について

質問
-
こちらのサイトで色々勉強させていただきながらADの階層型アドレス帳のメンテナンスを簡素化できるように
Powershellで設定できないかと考えているのですが、以下のコマンドで実行するとエラーになってしまうのですが属性名は、ADExplorer.exeを使って確認しているので間違えていないと思うのですが、間違えているところがあればご指摘いただけますと幸いです
###msDS-HABSeniorityIndex(役職順の並びを設定するための項目)
$data = Import-Csv "D:\IDShare\adgroup_Jemie\sorts.csv"
$data |ForEach {Set-ADUser -Identity(Get-aduser $_.UserPrincipalName) -Add @{'ms-DS-HAB-Seniority-Index' =$_.'msDS-HABSeniorityIndex'}}et-ADUser : 指定されたディレクトリ サービス属性または値が存在しません。
パラメーター名:ms-DS-HAB-Seniority-Index
発生場所 行:3 文字:17
+ $data |ForEach {Set-ADUser -Identity(Get-aduser $_.UserPrincipalName) -Add @{'ms ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (CN=t_yamagishi,...mco,DC=co,DC=jp:ADUser) [Set-ADUser]、ArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser
というエラーになってしまいます。読み込んでいるファイルの内容は
"UserPrincipalName","msDS-HABSeniorityIndex"
"aaa","680000"
"bbb","400000"
回答
-
チャブーンです。
この件ですが、Get-ADUserで属性の参照や書き込みをしたい場合、自動的に読み込まれる(基本的な)属性以外は、-propertiesオプションで明示指定する必要があります。したのように変更してみてはどうでしょうか?
$data = Import-Csv "D:\IDShare\adgroup_Jemie\sorts.csv" # -Proreries で msDS-HABSeniorityIndex を指定すること、-ADD @{}の名前の属性名も msDS-HABSeniorityIndex とすること
追記:(今回は)-Propertiesの方はなくても大丈夫で、-ADD @{}の名前の属性名が間違っていたことが原因、のようですね。-Addによる「対象属性に(無条件に)値を設定」というところで、Get-ADUserで値を拾わなくても大丈夫、ということかと思います。
$data | ForEach {Set-ADUser -Identity(Get-ADUser $_.UserPrincipalName -properties msDS-HABSeniorityIndex) -Add @{'msDS-HABSeniorityIndex' =$_.'msDS-HABSeniorityIndex'}}
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
すべての返信
-
チャブーンです。
この件ですが、Get-ADUserで属性の参照や書き込みをしたい場合、自動的に読み込まれる(基本的な)属性以外は、-propertiesオプションで明示指定する必要があります。したのように変更してみてはどうでしょうか?
$data = Import-Csv "D:\IDShare\adgroup_Jemie\sorts.csv" # -Proreries で msDS-HABSeniorityIndex を指定すること、-ADD @{}の名前の属性名も msDS-HABSeniorityIndex とすること
追記:(今回は)-Propertiesの方はなくても大丈夫で、-ADD @{}の名前の属性名が間違っていたことが原因、のようですね。-Addによる「対象属性に(無条件に)値を設定」というところで、Get-ADUserで値を拾わなくても大丈夫、ということかと思います。
$data | ForEach {Set-ADUser -Identity(Get-ADUser $_.UserPrincipalName -properties msDS-HABSeniorityIndex) -Add @{'msDS-HABSeniorityIndex' =$_.'msDS-HABSeniorityIndex'}}
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャープ―ン様
勉強不足の私にご丁寧なご指導ありがとうございます。大変勉強になりました。精進いたします。m(__)m
度々申し訳ございません。
ご指導いただいたコマンド実行させていただいたところ 複数の値が指定されましたとなってしまいました。属性値が違うのでしょうか? 申し訳ございません。m(__)m
$data = Import-Csv "D:\IDShare\adgroup_Jemie\sorts.csv"
$data| ForEach {Set-ADUser -Identity $_.UserPrincipalName -Add @{'msDS-HABSeniorityIndex' =$_.'msDS-HABSeniorityIndex'}}Set-ADUser : 値を 1 つしか持つことができない属性に対して、複数の値が指定されました。
発生場所 行:3 文字:17
+ $data| ForEach {Set-ADUser -Identity $_.UserPrincipalName -Add @{'msDS-HABSenior ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (t_yamagishi:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8321,Microsoft.ActiveDirectory.Management.Commands.SetADUser