PCだい「ちゅき」

気がつけば庶事手伝い

目次

Blog 利用状況

ニュース

・H24/01/02
 Microsoft MVPを受賞しました
・H23/11/18
 MCTの憂鬱さんと相互リンクを張っていただきました^^
・H23/09/10
 プログラミング生放送でスピーカーさせていただきました^^ ・H22/12/18
 わんくま同盟でスピーカしました^^
さて、来年はどんな年になるかな。予想が当たるといいなぁ。
・H22/07/17
 わんくま同盟でスピーカしました^^
技術系のセッションは久しぶり。VB! VB!
・H22/03/13
 Tech FieldersでLTのスピーカしました^^
・H21/12/12
 わんくま同盟でスピーカしました^^
最近はずっとLT担当だったので、ちょっと新鮮でした^^
・H20/11/18
 Tech Fielders セミナー 大阪の
 Lightning Talkで優勝しました^^
・H20/8/23
 わんくま同盟で2回目のスピーカしちゃいました
 WCFと戯れてみました^^
・H20/5/17
 わんくま同盟でスピーカしちゃいました^^
 ちゃんとスピーカー持参しましたよんw
・H20/2/22
 なめ猫の参加証もらいました^^
・H20/1/22
 テンプレートを変えてみました^^
・H19/7/23
 ACEプログラムで、ナップサックをもらった上、工具セットももらえることになりました^^
・H19/1/11
 1が並ぶ縁起の良い日に投稿開始!。今後ともお付き合いよろしくお願いします
・H18/10/29
 参加させていただきました^^
ド・初心者ですがどうぞよろしくお願いします。

↓うーん、仕事しろ^^;
Chukiの脳内メーター

Chukiの脳内メーター

書庫

日記カテゴリ

ギャラリ

コミュニティ

相互リンク

PowerShellとCSVでグループに所属するユーザーを管理しよう

PowerShell Advent Calendar 2012」向け第3弾!!

グループとユーザーの管理といえば、Forefront Identity Managerでスマートに処理するとかVBScriptでゴリゴリ書いていたりしました。今の時代、サクっと作るのならPowerShellが楽ちんです。ということで、以下の要件で遊んでみます。

【要件】CSVでグループのメンバーを管理する

【テスト環境】

・OU:Osakaに以下の二人のユーザーが所属する。
 ・ユーザー:ChukiTestはou内のグループには入っていない
 ・ユーザー:hogehogeはadminグループとuserグループに所属している

【目標】

ユーザー:ChukiTestをOsakaのdirectorとuserグループに所属させ、hogehogeはuserグループのみとする

image

【方針】

CSV一行を読んだ後、そのユーザーが所属するグループすべて方一旦削除して、その後それぞれのグループへ所属させる

【CSV】

test.csv
name,group1,group2,group3
ChukiTest,”CN=director,OU=Osaka,OU=wankuma,DC=chukitest,DC=local”," CN=user,OU=Osaka,OU=wankuma,DC=chukitest,DC=local”
hogehoge,"CN=user,OU=Osaka,OU=wankuma,DC=chukitest,DC=local”


1、まず初めに困ること:CSVの取り込み

通常はユーザーごとに所属するグループ数が違うため、CSVの列も可変長になります。さて、ここで困るのがCSVが基本的には列の数が固定なので微妙に扱えない。可変長の場合、Excelを使って突っ込むなんてのが楽です。今回はActive Directoryの話に絞りたいので読み込みに関しては以下のリンク先などをご覧ください。
ご参考⇒フォルダー内にあるエクセルのデータをPowershell で取得する。 ≪ Windows Server 2012 Essentials と Windows SBS を中心とした雑記
http://wsbs.wordpress.com/2012/02/25/folder/

ということで、まずは読み込んだデータを突っ込むための変数を作ってみましょう。{名前、グループの配列}というオブジェクトを作ってみます

$objRow = New-Object PSObject| select Name,Groups
$objRow.Groups = New-Object System.Collections.ArrayList

とりあえず、オブジェクトには直接値を突っ込んでおきます。

$objRow.Name = "ChukiTest"
$objRow.Groups = @("CN=user,OU=Osaka,OU=wankuma,DC=chukitest,DC=local"
       ,"CN=director,OU=Osaka,OU=wankuma,DC=chukitest,DC=local")
 

2、現在所属しているグループから外す

ユーザーが入っているグループのうち、OUに所属するものだけを取得して削除しましょう。BUILTINなどから外すと後々面倒なので……
あと、-confirm:$falseをつけておかないと、毎行確認が表示されます。

$objUser = Get-ADUser hogehoge -Properties memberof
$objMemberGroup = $objUser | select MemberOf -ExpandProperty MemberOf | ? {$_ -like "*,OU=wankuma,*"}
$objMemberGroup | foreach { Remove-ADGroupMember $_ $objUser.Name -Confirm:$false }
 

3、Groupsに読み込まれた新しいグループへユーザーを追加する

ここは、単にforeachで回すだけです。
$objRow.Groups | foreach { Add-ADGroupMember $_ $objRow.Name}
 

4、あとは、これをCSVの行数分を繰り返すだけ

以上、さっくり出来上がり^^


従来のVBSと比べて楽になった点は、リダイレクトが多様できるため、いちいち変数に保存する必要がないため行数は短くなりました。
個人的な感想ではVBSとくらべて2/3位は減っていると思います。
また、VBSでゴリゴリ書くよりもITProに見やすくなっていると感じます。

ということで、是非ADの管理にはPowerShellを使いましょう^^/

投稿日時 : 2012年12月22日 6:21

Feedback

# Hi, I do believe this is an excellent site. I stumbledupon it ;) I am going to come back once again since I saved as a favorite it. Money and freedom is the best way to change, may you be rich and continue to help other people. 2019/04/11 2:27 Hi, I do believe this is an excellent site. I stum

Hi, I do believe this is an excellent site. I stumbledupon it ;
) I am going to come back once again since I saved as a favorite it.
Money and freedom is the best way to change, may
you be rich and continue to help other people.

# My partner and I stumbled over here coming from a different web address and thought I might as well check things out. I like what I see so i am just following you. Look forward to finding out about your web page repeatedly. 2019/05/13 22:23 My partner and I stumbled over here coming from a

My partner and I stumbled over here coming from a different web address and thought I might as well check things out.

I like what I see so i am just following you. Look forward to finding out about your web page repeatedly.

# Howdy just wanted to give you a quick heads up. The text in your article seem to be running off the screen in Safari. I'm not sure if this is a format issue or something to do with web browser compatibility but I figured I'd post to let you know. The de 2019/06/08 13:04 Howdy just wanted to give you a quick heads up. Th

Howdy just wanted to give you a quick heads up.
The text in your article seem to be running off the screen in Safari.
I'm not sure if this is a format issue or something to do with web browser compatibility but
I figured I'd post to let you know. The design look great though!
Hope you get the issue resolved soon. Cheers

# LPExDsGUzvyTT 2022/04/19 11:17 johnansaz

http://imrdsoacha.gov.co/silvitra-120mg-qrms

タイトル
名前
Url
コメント