001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 | $props = ( "msDS-PhoneticDisplayName", #カナ氏名 "otherTelephone" #内線 ) $undef = @() #部、グループ名、カナ氏名、メールアドレス、内線を設定する $User | %{ $dn = $_.DistinguishedName if($emp = $obj104[$_.SamAccountName]){ #OUから会社名と部署名を取得 $ou = Get-ADOrganizationalUnit ` -Identity $dn.substring($dn.indexof(",")+1) ` -Properties description,displayname Set-ADUser -Identity $_ -Clear $props -PassThru | Set-ADUser -EmailAddress $emp.メールアドレス ` -Company $ou.DisplayName -Department $ou.Description ` -EmployeeNumber $emp.社員番号 ` -Add @{$props[0]="$($emp.カナ氏名)";$props[1]="$($emp.内線)"} }else{ $undef += $_.SamAccountName } } |
上記サンプルはスクリプトの一部を切り出したもの。
$obj104は別途管理されている社員情報から、アカウントをキーとしたハッシュテーブルとして組み立てている。
$Userは対象ユーザーを設定済み。
ユーザーの主なプロパティについてはSet-ADUserコマンドレットにて対応するパラメータが用意されているのでそれを使えば問題ない。
問題はパラメータの用意されていないプロパティを更新したい時。
ヘルプによるとその場合はRemove、Add、Replace、Clearの4つのパラメータを使用するとある。
しかし、Remove、Add、Replaceについてはどれも変更前の値を指定する必要があり単純に上書きで更新するわけには行かなそう。(コレクション型のプロパティに対応するためかなぁ・・・)
ClearしてからAddすれば良いのかと思ったが、AddとClearを同時に指定した場合はAddが先に実行されるらしい。
仕方が無いのでとりあえずはステップを分けて、ClearしてからAddすることとしたのが上記サンプルである。
もしかするともう少し直接的な設定方法があるのかもしれない。
また、書いてから気づいたが、上記if条件の書き方は誤解を招きそうな気もするのであまりよろしくないのかもしれない。
0 件のコメント:
コメントを投稿