# wql.rb # WS-Man Query Language (for WINRM) # # http://msdn.microsoft.com/en-us/library/aa394606(VS.85).aspx require 'test/unit' require 'rexml/document' require File.join(File.dirname(__FILE__),'_loadpath') require 'openwsman' require File.join(File.dirname(__FILE__), '_client') def handle_fault client, result unless result if client.last_error != 0 STDERR.puts "Client connection to #{client.scheme}://#{client.user}:#{client.password}@#{client.host}:#{client.port}/#{client.path} failed with #{client.last_error}, Fault: #{client.fault_string}" exit 1 end if client.response_code != 200 STDERR.puts "Client requested result #{client.response_code}, Fault: #{client.fault_string}" exit 1 end STDERR.puts "Client action failed for unknown reason" exit 1 end if result.fault? fault = Openwsman::Fault.new result STDERR.puts "Fault code #{fault.code}, subcode #{fault.subcode}" STDERR.puts "\treason #{fault.reason}" STDERR.puts "\tdetail #{fault.detail}" exit 1 end end class WsmanTest < Test::Unit::TestCase def test_wql client = Client.open options = Openwsman::ClientOptions.new options.flags = Openwsman::FLAG_ENUMERATION_OPTIMIZATION options.max_elements = 999 # options.set_dump_request namespace = "root/cimv2" classname = "*" # must be '*' for WQL uri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/#{namespace}/#{classname}" filter = Openwsman::Filter.new # see winenum.rb for more examples filter.wql "select * from Win32_NetworkAdapterConfiguration where IPEnabled=true" result = client.enumerate( options, filter, uri ) handle_fault client, result assert result if result.fault? puts "Enumerate returned fault" puts "\t #{client.last_error}:#{client.fault_string}" exit 1 end # puts "Result #{result.to_xml}" results = 0 faults = 0 loop do result.Items.each do |node| results += 1 puts "#{node.name}: IPEnabled: #{node.IPEnabled}" end context = result.context break unless context result = client.pull( options, nil, uri, context ) break unless result end puts "#{results} results, #{faults} faults" end end