# cimenum.rb # enumerate/pull/release for any class require 'test/unit' require 'rexml/document' require File.join(File.dirname(__FILE__),'_loadpath') require 'openwsman' require '_client' def show_fault result return unless result.fault? fault = Openwsman::Fault.new result puts "Fault code #{fault.code}, subcode #{fault.subcode}" puts "\treason #{fault.reason}" puts "\tdetail #{fault.detail}" exit 1 end debug = nil namespace = "root/cimv2" classname = nil loop do opt = ARGV.shift break unless opt case opt when "-d" then debug = true when "-n" then namespace = ARGV.shift else classname = opt end end raise "No classname given" unless classname client = Client.open options = Openwsman::ClientOptions.new uri = Openwsman.epr_uri_for namespace, classname result = client.enumerate( options, nil, uri ) raise "Connection failed" unless result STDERR.puts result.to_xml if debug show_fault result count = 0 context = result.context while (context) count += 1 result = client.pull( options, nil, uri, context ) # puts "Response ##{count}" # puts "### #{result.to_xml}" result.body.PullResponse.Items.each do |child| puts "#{child.name}" child.each do |prop| puts "\t#{prop.name} = #{prop.text}" end end context = result.context end client.release( options, uri, context ) if context puts "Got #{count} responses"