Hi all,
Ruby 1.8.2
Windows XP
I'm trying to get computer hardware information about a specific user on
a specific domain. I can see how to get user info and computer info,
but I don't see how to get computer info based on a userid. I was
messing around with something like this:
adsi = WIN32OLE.connect("WinNT://#{domain}")
schema = WIN32OLE.connect(adsi.schema)
if schema.container
adsi.filter = ["computer"]
adsi.each{ |obj|
p obj.name
}
else
puts "No container"
end
However, I'd rather not iterate over the entire domain.
Plus, I can't tell what methods are available to "obj", i.e. if there's
a way to tie it back to a user and/or get more detailed hardware info.
If I try to call obj.ole_methods, I get "'ole_methods': Failed to
GetTypeInfo (RuntimeError)". I get that for all of the ole_ methods on
'obj'.
Any ideas on how I can get computer info for a specific userid? Or why
obj#ole_methods fails?
Thanks.
Dan
Hi Dan,
Your variable, schema, is an IADsClass representing the class of adsi
(a Domain) - it has methods MandatoryProperties (empty) and
OptionalProperties (useful).
And there's the long way:
You can use obj.Class (or cLaSs or any other case variation from class,
which is a Ruby method) or obj.invoke("class") to find out what adsi's
class is. (i.e. "Computer")
Then you can find the class in the list here:
http://msdn.microsoft.com/library/en-us/adsi/adsi/adsi_objects_of_winnt.asp
Then you can follow the links to the documentation on each of the
interfaces the class. (For Computer: IADs,
IADsComputer,
IADsComputerOperations,
IADsContainer,
IADsPropertyList)
But that documentation is useful.
User objects are meant to have a LoginWorkstations property and a
SeeAlso; both of these seem not to work for me; I get "The directory
property cannot be found in the cache."
Session objects should be obtainable from a "LanmanServer" or
fso = WIN32OLE.connect("WinNT://computer_name/LanmanServer")
ss = fso.Sessions
That much works, but I can't get anything useful out of ss using each.
The Sessions contained in that collection should have Computer and User
properties. Maybe I don't have sufficient priveleges on the domain to
get this info (I'm only a developer here).
If you get it to work, please let me know.
Cheers,
Dave
Same here... I'm def interested!
···
On 8/30/05, dave.burt@gmail.com <dave.burt@gmail.com> wrote:
Hi Dan,
Your variable, schema, is an IADsClass representing the class of adsi
(a Domain) - it has methods MandatoryProperties (empty) and
OptionalProperties (useful).
And there's the long way:
You can use obj.Class (or cLaSs or any other case variation from class,
which is a Ruby method) or obj.invoke("class") to find out what adsi's
class is. (i.e. "Computer")
Then you can find the class in the list here:
Microsoft Learn: Build skills that open doors in your career
Then you can follow the links to the documentation on each of the
interfaces the class. (For Computer: IADs,
IADsComputer,
IADsComputerOperations,
IADsContainer,
IADsPropertyList)
But that documentation is useful.
User objects are meant to have a LoginWorkstations property and a
SeeAlso; both of these seem not to work for me; I get "The directory
property cannot be found in the cache."
Session objects should be obtainable from a "LanmanServer" or
fso = WIN32OLE.connect("WinNT://computer_name/LanmanServer")
ss = fso.Sessions
That much works, but I can't get anything useful out of ss using each.
The Sessions contained in that collection should have Computer and User
properties. Maybe I don't have sufficient priveleges on the domain to
get this info (I'm only a developer here).
If you get it to work, please let me know.
Cheers,
Dave