class WinRM::WSMV::WqlPull

WSMV message to ‘pull’ rest of enumeration results from Windows via WQL

Public Class Methods

new(session_opts, namespace, enumeration_context) click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 8
def initialize(session_opts, namespace, enumeration_context)
  @session_opts = session_opts
  @namespace = namespace
  @enumeration_context = enumeration_context
end

Public Instance Methods

process_response(response) click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 14
def process_response(response)
  parser = Nori.new(
    parser: :rexml,
    advanced_typecasting: false,
    convert_tags_to: ->(tag) { tag.snakecase.to_sym },
    strip_namespaces: true
  )
  parser.parse(response.to_s)[:envelope][:body]
end

Protected Instance Methods

create_body(body) click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 30
def create_body(body)
  body.tag!("#{NS_ENUM}:Pull") { |en| en << Gyoku.xml(wql_body) }
end
create_header(header) click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 26
def create_header(header)
  header << Gyoku.xml(wql_header)
end

Private Instance Methods

wql_body() click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 44
def wql_body
  {
    "#{NS_ENUM}:EnumerationContext" => @enumeration_context,
    "#{NS_WSMAN_DMTF}:OptimizeEnumeration" => nil,
    "#{NS_ENUM}:MaxElements" => '32000',
    "#{NS_WSMAN_MSFT}:SessionId" => "uuid:#{@session_opts[:session_id]}"
  }
end
wql_header() click to toggle source
# File lib/winrm/wsmv/wql_pull.rb, line 36
def wql_header
  merge_headers(
    shared_headers(@session_opts),
    resource_uri_wmi(@namespace),
    action_enumerate_pull
  )
end