- - PR -
ユーザの所属するグループを取得するのに時間がかかる
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-28 18:28
PCに存在するユーザ名と、ユーザが所属するグループ名を取得するスクリプトを作成したいと思っています。
結果、WMIのWin32_GroupUserクラスを使用して、グループ名の取得はできました。 しかし、実行にとても時間がかかります(1ユーザあたり約1分程)。 下記のようなスクリプトにて実行をしているのですが、実行時間を短縮するのに 何か良い方法はありますでしょうか。 開発環境: WinXP+VBSCRIPT(WMI) コード: ---------------------------- 'ユーザの所属するグループをWin32_GroupUserクラスから取得 Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\CIMV2") Query = "SELECT * FROM Win32_GroupUser WHERE ( PartComponent = '" & _ "\\\\<マシン名>\\root\\cimv2:Win32_UserAccount.Domain= & _ ""<マシン名>"",Name=""" & <ユーザ名> & """')" Set colItems = objWMIService.ExecQuery(Query,,48) 'グループ名の取得 For Each objItem In colItems Set MemberPart = objWMIService.Get(objItem.PartComponent) Set MemberGroup = objWMIService.Get(objItem.GroupComponent) msgbox "ドメイン名=" & MemberPart.Domain & _ ",ユーザ名=" & MemberPart.Name & _ ",所属グループ=" & MemberGroup.Name Next ---------------------------- 調べてみると、上記のFor Each文の実行に時間がかかっています。 SWbemObjectSetコレクションからSWbemObjectオブジェクトを取得するところで 時間がかかっているかと思うのですが、何か解決策がありましたら よろしくお願いします。 | ||||||||
|
投稿日時: 2007-02-28 21:32
WMI で account を扱うのは得策ではありません。
素直に ADSI 使いましょう。 # 数倍違うはずですよ。 | ||||||||
|
投稿日時: 2007-03-01 15:45
情報ありがとうございます。
ADSIについては調べていなかったので、調べてみようと思います。 また、ActiveDirectoryを導入していない環境でも使用することを考えているのですが、 ADSI以外で良い方法はありますでしょうか? | ||||||||
|
投稿日時: 2007-03-01 23:06
WinNT provider を使えば、AD 以外の account も同様に扱えます。 また、AD 上の account を扱うのであれば、LDAP query を投げたほうが圧倒的に速いです。 WSH だと ADO ADSI provider を使うことで、LDAP query を投げられます。 _________________ | ||||||||
|
投稿日時: 2007-03-12 10:51
ちゃっぴ様ありがとうございました。 WinNT Providerを使用して瞬時にグループ名を取得できるようになりました。 (以下ユーザ名を指定して所属グループ名を取得するVBScript) ---- Dim usr,group,ComputerName,UserName,strADsPath ComputerName = "MyPC" 'コンピュータ名 UserName = "Administrator" 'ユーザ名 strADsPath = "WinNT://" & ComputerName & "/" & UserName & ",user" set usr = GetObject(strADsPath) For Each grp In usr.Groups wsh.echo "グループ名: " & grp.Name Next ---- 参考: MSND IADsUser http://msdn2.microsoft.com/en-us/library/aa746342.aspx 大変助かりました。情報ありがとうございました。 |
1