- PR -

ASDIによるグループ名の取得について

1
投稿者投稿内容
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2004-03-12 12:03
こんにちは、お世話になります。
ADSIを使ってNTドメインのグループ名を取得するロジック(VB6)で
Set Container = GetObject("WinNT://" & ContainerName & ",computer")
Container.Filter = Array("Group")

Dim Group As IADsGroup
For Each Group In Container
Debug.Print (Group.Name)
Next
とすると、グループが取得できますが、
これをVisual Studio.NET(2002)で
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Container As IADsContainer
Dim ContainerName As String = "tkosq01"
Dim myArray() As Object


Container = GetObject("WinNT://" & ContainerName & ",computer")
Container.Filter = myArray("Group")
Dim Group As IADsGroup
For Each Group In Container
Debug.Write(Group.Name)
Next

End Sub
と記述すると、実行時に
「文字列"Group"から型'Integer'へのキャストが有効ではありません」
となり、エラーとなります。
Container.Filterにどのようなものを渡せばいいかが
わかりません。

ADSIではなくSystem.DirectoryServicesを使いなさいといわれそうですが、
手元にはADSIの情報しかありません。

よろしくお願いします。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-03-12 13:26
さ・おさん、こんにちは。

【VB6】
引用:

Container.Filter = Array("Group")


これは、VB6の Array 関数ですね。
この場合は"Group"という文字列の要素を一つだけ含む一次元の配列(を格納したVariant型)を返します。
なお、Array関数はVB.netでは廃止されており、同じように書くと System.Array クラスを意味してしまうのでコンパイラに弾かれてしまいます。

そこで、以下のように書き換えてみたんだと思いますが、「配列(n)」という書き方をする場合、n には、配列内の各要素を識別する、0 から始まるインデックス(数値)を指定します。その、数値を指定すべきところに文字列 "Group" を指定しているために「文字列"Group"から型'Integer'へのキャストが有効ではありません」という事になります。

【VB.net】
引用:

Dim myArray() As Object
Container.Filter = myArray("Group")



ですから、これを書き換えるとすれば、

コード:
Container.Filter = New Object() {"Group"}


というような書き方になると思います。

引用:

ADSIではなくSystem.DirectoryServicesを使いなさいといわれそうですが、
手元にはADSIの情報しかありません。


VS.netをお使いなんですよね?
であれば、MSDNライブラリのクラスライブラリリファレンスに、 System.DirectoryServices に関する情報もちゃんとありますよ。
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2004-03-12 14:46
きくちゃん さん ありがとうございます。
Container.Filter = New Object() {"Group"}
としましたら、グループ名を取得できました。
お世話になりました。
1

スキルアップ/キャリアアップ(JOB@IT)