On Jan 16, 11:22 pm, Thufir <hawat.thu... / gmail.com> wrote:
> I want to iterate through the registry, getting results similar to
> "reg query"; what can I do with the "do |reg|", it seems that I need
> to pass something through the "chute":
>
> C:\code\reg>
> C:\code\reg>type reg.rb
> require 'rubygems'
> require 'win32/registry'
> include Win32
>
> #desired output to match the output of:
> #reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft
>
> Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE,'Software
> \Policies\Micr
> osoft')
>
> #do |reg|
> #       type, data = reg.read('DataBasePath')
>
> C:\code\reg>
> C:\code\reg>ruby reg.rb
>
> C:\code\reg>
> C:\code\reg>
>
> thanks,
>
> Thufir

I just threw this together. It seems to work though doesn't do quite
as well with the number of tabs separating value columns.

require 'win32/registry'

include Win32

require 'win32/registry'

include Win32

class Registry
  def query
    res = [self.name]

    self.each_key do |subkey, wtime|
      res << "#{self.name}\\#{subkey}"
    end
    self.each_value do |value, type, data|
      data = self.read(value, type)
      case type
        when REG_BINARY
          data[1] = data[1].unpack('H*') if type ==
Registry::REG_BINARY
        when REG_DWORD
          data[1] = "0x#{data[1].to_s(16)}"
      end
      res << "#{value}\t#{Registry.type2name(type)}\t#{data[1]}"
    end

    res
  end
end


puts Registry.open(Registry::HKEY_LOCAL_MACHINE, 'Software\Policies
\Microsoft').query.join("\n\n")