Ruby and WMI

T

timgerrlists

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.
 
D

Dave Burt

timgerrlists said:
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)

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
 
T

timgerrlists

Dave said:
timgerrlists said:
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)

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

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
 
D

Dave Burt

timgerrlists said:
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
 
T

timgerrlists

Dave said:
timgerrlists said:
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

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.
 
R

Rob Rypka

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/strin=
g.

irb(main):001:0> a =3D [0, 1, 2, 3, 4]
=3D> [0, 1, 2, 3, 4]
irb(main):002:0> a[2..-1]
=3D> [2, 3, 4]
irb(main):003:0> b =3D "Hello, World!"
=3D> "Hello, World!"
irb(main):005:0> b[7..-1]
=3D> "World!"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,681
Members
48,796
Latest member
Greg L.

Latest Threads

Top