先日に引き続き PowerShell で FIM を操作する小ネタです。
ID 管理システムを構築する時、一番多いのは CSV から従業員情報を取り込んで Active Directory など様々なリソースへアカウントを作成・変更・削除していく、というシナリオです。
当然のことながら FIM にも CSV からデータを取り込む Management Agent が用意されているので、着信同期規則(ISR)を設定すれば CSV 上のデータをもとにアカウント情報の保守を行うことが可能です。
もちろん本筋はこの機能を使って CSV データを取り込んで Metaverse を経由して FIM Service / Portal へアカウントを作成し、そこから Active Directory などへプロビジョニングを行う、というのがベストプラクティスですし、特に複数の CSV データソースがある場合、属性単位の優先順位設定などを行えたり、ログを取得出来たりするという点ではこの機能を使うべきです。
ただ、一時的な実装を行う場合や、あくまで例外的にユーザを差し込みたい場合などは FIM Portal に直接ユーザを作成したくなる場合もあるのが実情です。
そんな場合に今回紹介するスクリプトを使うことが出来ます。
記載サイト
http://social.technet.microsoft.com/wiki/contents/articles/2083.how-to-use-powershell-to-create-a-user-in-the-fim-portal-en-us.aspx
一応コードを転記しておきます。
#---------------------------------------------------------------------------------------------------------- set-variable -name URI -value "http://localhost:5725/resourcemanagementservice' " -option constant #---------------------------------------------------------------------------------------------------------- function SetAttribute { PARAM($object, $attributeName, $attributeValue) END { $importChange = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportChange $importChange.Operation = 1 $importChange.AttributeName = $attributeName $importChange.AttributeValue = $attributeValue $importChange.FullyResolved = 1 $importChange.Locale = "Invariant" if ($object.Changes -eq $null) {$object.Changes = (,$importChange)} else {$object.Changes += $importChange} } } #---------------------------------------------------------------------------------------------------------- function CreateObject { PARAM($objectType) END { $newObject = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportObject $newObject.ObjectType = $objectType $newObject.SourceObjectIdentifier = [System.Guid]::NewGuid().ToString() $newObject } } #---------------------------------------------------------------------------------------------------------- if(@(get-pssnapin | where-object {$_.Name -eq "FIMAutomation"} ).count -eq 0) {add-pssnapin FIMAutomation} clear-host if($args.count -ne 1) {throw "You need to specify your attribute values as parameter"} $attributes = ($args[0]).split("|") if(0 -ne [String]::Compare(($attributes[0]).split(":")[0],"displayname", $true)) {throw "You need to specify a display name"} $objectName = ($attributes[0]).split(":")[1] $exportObject = export-fimconfig -uri $URI ` -onlyBaseResources ` -customconfig "/Person[DisplayName='$objectName']" if($exportObject) {throw "L:User $objectName already exists"} $newUser = CreateObject -objectType "Person" foreach($attribute in $attributes) { $attrData = $attribute.split(":") SetAttribute -object $newUser ` -attributeName $($attrData[0]) ` -attributeValue $($attrData[1]) } $newUser | Import-FIMConfig -uri $URI write-host "`nUser created successfully`n" #---------------------------------------------------------------------------------------------------------- trap { $exMessage = $_.Exception.Message if($exMessage.StartsWith("L:")) {write-host "`n" $exMessage.substring(2) "`n" -foregroundcolor white -backgroundcolor darkblue} else {write-host "`nError: " $exMessage "`n" -foregroundcolor white -backgroundcolor darkred} Exit } #----------------------------------------------------------------------------------------------------------
使い方は上記サイトに記載されているコードを ps1 ファイルとして保存して実行します。(例では CreateFIMUser.ps1 として保存)
引数には「属性名1:属性値1|(パイプ)属性名2:属性値2」という形で「:(コロン)」区切りで属性名、属性値のペアを「|(パイプ)」で連結したものを指定します。
例えば、
・表示名(DisplayName):テスト太郎
・名(FirstName):太郎
・姓(LastName):テスト
というアカウントを FIM Portal 上に作成したければ、
.\CreateFIMUser.ps1 "DisplayName:テスト太郎|FirstName:太郎|LastName:テスト"
という形でスクリプトを実行します。
うまく行くと
User created successfully
というメッセージが表示されるので実際に FIM Portal を見てみるとユーザが作成されているはずです。
このスクリプトを応用すれば CSV ファイルから直接 FIM Portal へユーザを作成する、ということも可能なので、CSV Management Agent を使いたくない場合は工夫をしてみても良いと思います。
(あくまで本環境では CSV Management Agent + ISR を使うのを推奨します)
0 件のコメント:
コメントを投稿