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