- - PR -
VB.NETを利用したグループの作成(ドメイン使用)について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-20 14:59
こんにちは。
ADSI経由でActiveDirectoryに新規グループを作成したいと考えています。 MSのActiveDirectorySDK2.5のヘルプ、MSDNライブラリを参照し、以下の ようなコードを次の環境にて実行したところ、エラーとなりグループ作成が できません。 ただし、一部のプロパティ設定を行わない場合、作成できます。 当該プロパティはグループ作成時には指定できないのでしょうか? 教えてください。(グループ作成は一応できるが、すっきりしません・・) 環境: プログラム実行環境 :WindowsXPsp2+vb.net2003 (ドメインのAdmin権限の あるユーザで実行) ドメインコントローラ:Windows2000serverでネイティブモード (初期にWin2Kで構築し、その後Win2003をバックアップDCとして追加) ---------------------------------------------------- Sub test() Dim cont As IADsContainer cont = GetObject("LDAP://Domain1.co.jp/CN=Users,DC=Domain1,DC=co,DC=jp") CreateSimpleGroup(cont,"test","test", _ ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED) End sub Sub CreateSimpleGroup(ByVal oDirObject As IDirectoryObject, _ ByVal sCommonName As String, _ ByVal sSAMAcctName As String, _ ByVal iGroupType As Long) Dim oNewObject As IADs Dim oIadsContDirObj As IADsContainer oIadsContDirObj = oDirObject oNewObject = oIadsContDirObj.Create("group", "CN=" & sCommonName) oNewObject.Put("sAMAccountName", sSAMAcctName) oNewObject.Put("GroupType", iGroupType) ←※ここでエラー発生 oNewObject.SetInfo() oNewObject = Nothing oIadsContDirObj = Nothing end sub ---------------------------------------------------- ※の箇所で、下記のエラーが表示されます。 「'System.Runtime.InteropServices.COMException' の ハンドルされていない例外が発生しました。追加情報: エラーを特定できません」 WSH でグループ登録を行うサンプルをネットから拾い、実行すると 登録ができます。違いは、※部分のGroupTypeを設定する箇所です。 ※部分をコメントアウトし、実行すると登録でき、そのグループの grouptype は一応、現在こちらが望む値になっています。。。 | ||||||||
|
投稿日時: 2006-07-20 15:17
HRESULT からの例外ではないのですね。(微妙ですね) 第 2 引数のプリフィクスが 'i' のわりには、型が 'Long' になっていますね。 Long (System.Int64) ではなく、Integer (System.Int32) でマッピングしてみてください。
ADS_GROUP_TYPE_GLOBAL_GROUP と ADS_GROUP_TYPE_SECURITY_ENABLED は、 いずれも System.Int32 とする。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-07-20 15:33
じゃんぬねっとさん、ありがとうございます。
ご指摘のとおり、Long型ではなく、Integer型に変更したところ、無事問題の箇所 (GrouptTypeプロパティの設定)は動作しました!! まったくお恥ずかしいかぎりです... 自分はVB6 での開発経験はあるのですが、今回ActiveDirectoryをイジるにあたり、 vb.netの方がWin32APIとか使わなくても組めそう、ということで、初めてvb.netを 利用しました。 へプル(MSDN)サンプルコードをコピペして、とりあえず動かしていたため、 よく理解せずにあたふたしてました・・。 おかげさまで、目的の処理が実装できます。ありがとうございました。 [ メッセージ編集済み 編集者: libble 編集日時 2006-07-20 15:34 ] | ||||||||
|
投稿日時: 2006-07-20 16:19
お役に立てたようで、良かったです。
仕様によっては、結局、Windows API を使わなければならなくなることもあります。 また、今回のように、COM を利用する場合は、むしろ VB6 以前の方が相性が良いと思います。 このユニットだけ、VB6 で作成していても良かったかもしれませんね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-07-21 07:13
.Net Framework には System.DirectoryService.DirectoryEntry という ActiveDS COM wrapper class があるんですがね。。。
| ||||||||
|
投稿日時: 2006-07-21 10:03
ご指摘ありがとうございます。 なにぶん、vb.netを初めて利用しているため、サンプルをネットで探して とりあえずADSIで出来るようだ、という取っ掛りで行っているため、十分に vb.netの機能を利用できていないです... ご指摘のclass について、試してみます。。 |
1