class WinRM::PSRP::MessageFactory

Creates WinRM::PSRP::Message instances for various PSRP messages

Public Class Methods

create_pipeline_message(runspace_pool_id, pipeline_id, command) click to toggle source

Creates a new PSRP message that creates pipline to execute a command. @param runspace_pool_id [String] The UUID of the remote shell/runspace pool. @param pipeline_id [String] The UUID to correlate the command/pipeline response. @param command [String] The command passed to Invoke-Expression.

# File lib/winrm/psrp/message_factory.rb, line 48
def create_pipeline_message(runspace_pool_id, pipeline_id, command)
  Message.new(
    runspace_pool_id,
    Message::MESSAGE_TYPES[:create_pipeline],
    render('create_pipeline', command: command.encode(xml: :text)),
    pipeline_id
  )
end
init_runspace_pool_message(runspace_pool_id) click to toggle source

Creates a new init runspace pool PSRP message. @param runspace_pool_id [String] The UUID of the remote shell/runspace pool.

# File lib/winrm/psrp/message_factory.rb, line 35
def init_runspace_pool_message(runspace_pool_id)
  Message.new(
    runspace_pool_id,
    Message::MESSAGE_TYPES[:init_runspacepool],
    render('init_runspace_pool')
  )
end
session_capability_message(runspace_pool_id) click to toggle source

Creates a new session capability PSRP message. @param runspace_pool_id [String] The UUID of the remote shell/runspace pool.

# File lib/winrm/psrp/message_factory.rb, line 25
def session_capability_message(runspace_pool_id)
  Message.new(
    runspace_pool_id,
    Message::MESSAGE_TYPES[:session_capability],
    render('session_capability')
  )
end

Private Class Methods

render(template, context = nil) click to toggle source

Renders the specified template with the given context @param template [String] The base filename of the PSRP message template. @param context [Hash] Any options required for rendering the template. @return [String] The rendered XML PSRP message. @api private

# File lib/winrm/psrp/message_factory.rb, line 64
def render(template, context = nil)
  template_path = File.expand_path(
    "#{File.dirname(__FILE__)}/#{template}.xml.erb"
  )
  template = File.read(template_path)
  case context
  when Hash
    b = binding
    locals = context.collect { |k, _| "#{k} = context[#{k.inspect}]; " }
    b.eval(locals.join)
  when Binding
    b = context
  when NilClass
    b = binding
  else
    raise ArgumentError
  end
  b.eval(Erubi::Engine.new(template).src)
end