Forum: Ruby Ruby and WMI

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
timgerrlists (Guest)
on 2005-11-18 20:35
(Received via mailing list)
I have been playing with ruby for a few weeks now to do windows
administration.  I haved used ruby with WMI on harder scripts but cant
figure out what to do here.  I want to query remote computers and see
who is in the administratiors group.

require 'win32ole'

cpuName = '127.0.0.1'
mgmt = WIN32OLE.connect("WinNT://#{cpuName}/Administrators,group")
mgmt.InstancesOf("Members").each{|person| puts person.Name} <---- This
fails

The last line fails because I am not sure how to structure it.  Here is
the equivelent VBscript

Set objGroup = GetObject("WinNT://" & strComputer &
"/Administrators,group")
For Each mem In objGroup.Members
            WScript.echo vbTab & Right(mem.adsPath,Len(mem.adsPath) -
8)

I thank any help.
dave (Guest)
on 2005-11-19 15:54
(Received via mailing list)
timgerrlists wrote:
> fails
>
> The last line fails because I am not sure how to structure it.  Here is
> the equivelent VBscript
>
> Set objGroup = GetObject("WinNT://" & strComputer &
> "/Administrators,group")
> For Each mem In objGroup.Members
>            WScript.echo vbTab & Right(mem.adsPath,Len(mem.adsPath) -
> 8)

The following are semantically equivalent. Choose the prettier of the
two.

mgmt.Members.each {|person| puts person.AdsPath[8..-1] }

for person in mgmt.Members
  puts person.AdsPath[8..-1]
end

> I thank any help.

You're welcome.

Cheers,
Dave
timgerrlists (Guest)
on 2005-11-21 15:14
(Received via mailing list)
Dave B. wrote:
> > mgmt.InstancesOf("Members").each{|person| puts person.Name} <---- This
>
> You're welcome.
>
> Cheers,
> Dave

Dave thank you for the informaiton but I am getting some errors, "
Untitled2.rb:2: undefined local variable or method `cpuName' for
main:Object (NameError)" Not sure what to do here.

Thanks,
timgerr
dave (Guest)
on 2005-11-21 18:32
(Received via mailing list)
timgerrlists wrote:
> Dave thank you for the informaiton but I am getting some errors, "
> Untitled2.rb:2: undefined local variable or method `cpuName' for
> main:Object (NameError)" Not sure what to do here.

You haven't defined cpuName. If you post the script you're using, I can
be
more specific. The following script should work just like the VBScript
you
posted. (You might notice it also looks very similar.)

require 'win32ole'
strComputer = "localhost"
objGroup =
WIN32OLE.connect("WinNT://#{strComputer}/Administrators,group")
for mem in objGroup.Members
    puts "\t" + mem.adsPath[8..-1]
end

Cheers,
Dave
timgerrlists (Guest)
on 2005-11-21 20:33
(Received via mailing list)
Dave B. wrote:
> strComputer = "localhost"
> objGroup = WIN32OLE.connect("WinNT://#{strComputer}/Administrators,group")
> for mem in objGroup.Members
>     puts "\t" + mem.adsPath[8..-1]
> end
>
> Cheers,
> Dave

Thank you, it now works, can you tell me one thing, ( I am learning)
what does [8..-1] mean in the script "puts "\t" + mem.adsPath[8..-1]".

Thanks again.
rascal1182 (Guest)
on 2005-11-21 21:22
(Received via mailing list)
On 11/21/05, timgerrlists <removed_email_address@domain.invalid> wrote:
> Thank you, it now works, can you tell me one thing, ( I am learning)
> what does [8..-1] mean in the script "puts "\t" + mem.adsPath[8..-1]".

Indexing with a range [something..-1] will go to the end of the
array/string.

irb(main):001:0> a = [0, 1, 2, 3, 4]
=> [0, 1, 2, 3, 4]
irb(main):002:0> a[2..-1]
=> [2, 3, 4]
irb(main):003:0> b = "Hello, World!"
=> "Hello, World!"
irb(main):005:0> b[7..-1]
=> "World!"
This topic is locked and can not be replied to.