class WinRM::WSMV::WqlQuery
WSMV
message to query Windows via WQL
Public Class Methods
new(transport, session_opts, wql, namespace = nil)
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 22 def initialize(transport, session_opts, wql, namespace = nil) @session_opts = session_opts @wql = wql @namespace = namespace @transport = transport end
Public Instance Methods
process_response(response, &block)
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 29 def process_response(response, &block) parser = Nori.new( parser: :rexml, advanced_typecasting: false, convert_tags_to: ->(tag) { tag.snakecase.to_sym }, strip_namespaces: true ) @items = Hash.new { |h, k| h[k] = [] } hresp = parser.parse(response.to_s)[:envelope][:body][:enumerate_response] process_items hresp[:items], &block # Perform WS-Enum PULL's until we have all the elements enumeration_context = hresp[:enumeration_context] until enumeration_context.nil? query = WqlPull.new(@session_opts, @namespace, enumeration_context) hresp = query.process_response(@transport.send_request(query.build))[:pull_response] process_items hresp[:items], &block enumeration_context = hresp[:enumeration_context] end @items end
Protected Instance Methods
create_body(body)
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 59 def create_body(body) body.tag!("#{NS_ENUM}:Enumerate") { |en| en << Gyoku.xml(wql_body) } end
create_header(header)
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 55 def create_header(header) header << Gyoku.xml(wql_header) end
Private Instance Methods
process_items(items) { |k, val| ... }
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 65 def process_items(items, &block) return if items.nil? items.each_pair do |k, v| # Normalize items so the type always has an array even if it's just a single item. v_ary = v.is_a?(Array) ? v : [v] if block v_ary.each { |val| yield k, val } else @items[k] += v_ary end end end
wql_body()
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 83 def wql_body { "#{NS_WSMAN_DMTF}:OptimizeEnumeration" => nil, "#{NS_WSMAN_DMTF}:MaxElements" => '32000', "#{NS_WSMAN_DMTF}:Filter" => @wql, "#{NS_WSMAN_MSFT}:SessionId" => "uuid:#{@session_opts[:session_id]}", :attributes! => { "#{NS_WSMAN_DMTF}:Filter" => { 'Dialect' => 'http://schemas.microsoft.com/wbem/wsman/1/WQL' } } } end
wql_header()
click to toggle source
# File lib/winrm/wsmv/wql_query.rb, line 79 def wql_header merge_headers(shared_headers(@session_opts), resource_uri_wmi(@namespace), action_enumerate) end