Daniel Berger
2009-Mar-02 05:54 UTC
[Win32utils-devel] Getting a list of groups for a given user
Hi, How does this look for finding a list of groups for a particular user? This is for the sys-admin library. Assume "self.name" is pretty much the same thing as Etc.getlogin would return. # admin.rb Class User def groups(domain=nil) host = Socket.gethostname cs = "winmgmts:{impersonationLevel=impersonate}!" cs << "//#{host}/root/cimv2" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => err raise Error, err end if domain query = " select * from Win32_GroupUser where partcomponent = " query << "\"Win32_UserAccount.Domain=''#{domain.upcase}'',Name=''#{self.name}''\"" else query = " select * from Win32_GroupUser where partcomponent = " query << "\"Win32_UserAccount.Domain=''#{host.upcase}'',Name=''#{self.name}''\"" end array = [] wmi.execquery(query).each{ |groupuser| array << groupuser.GroupComponent.split(''='').last.tr(''"'', '''') } array end end Regards, Dan
Berger, Daniel
2009-Mar-03 20:50 UTC
[Win32utils-devel] Getting a list of groups for a given user
> -----Original Message----- > From: win32utils-devel-bounces at rubyforge.org > [mailto:win32utils-devel-bounces at rubyforge.org] On Behalf Of > Daniel Berger > Sent: Sunday, March 01, 2009 10:54 PM > To: Development and ideas for win32utils projects > Subject: [Win32utils-devel] Getting a list of groups for a given user > > Hi, > > How does this look for finding a list of groups for a particular user? > > This is for the sys-admin library. Assume "self.name" is > pretty much the same thing as Etc.getlogin would return. > > # admin.rb > Class User > def groups(domain=nil) > host = Socket.gethostname > cs = "winmgmts:{impersonationLevel=impersonate}!" > cs << "//#{host}/root/cimv2" > > begin > wmi = WIN32OLE.connect(cs) > rescue WIN32OLERuntimeError => err > raise Error, err > end > > if domain > query = " select * from Win32_GroupUser where > partcomponent = " > query << > "\"Win32_UserAccount.Domain=''#{domain.upcase}'',Name=''#{self.name}''\"" > else > query = " select * from Win32_GroupUser where > partcomponent = " > query << > "\"Win32_UserAccount.Domain=''#{host.upcase}'',Name=''#{self.name}''\"" > end > > array = [] > > wmi.execquery(query).each{ |groupuser| > array << > groupuser.GroupComponent.split(''='').last.tr(''"'', '''') > } > > array > end > endNevermind this. It was easier to use the IADsUser interface: adsi = WIN32OLE.connect("WinNT://some_domain/some_user") adsi.groups.each{ |g| p g.name } Regards, Dan