class WinRM::WSMV::CommandOutput

WSMV message to get output from a remote shell

Public Class Methods

new(session_opts, command_out_opts) click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 21
def initialize(session_opts, command_out_opts)
  raise 'command_out_opts[:shell_id] is required' unless command_out_opts[:shell_id]
  raise 'command_out_opts[:command_id] is required' unless command_out_opts[:command_id]

  @session_opts = session_opts
  @shell_id = command_out_opts[:shell_id]
  @command_id = command_out_opts[:command_id]
  @shell_uri = command_out_opts[:shell_uri] || RESOURCE_URI_CMD
  @out_streams = command_out_opts[:out_streams] || %w[stdout stderr]
end

Protected Instance Methods

create_body(body) click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 38
def create_body(body)
  body.tag!("#{NS_WIN_SHELL}:Receive") { |cl| cl << Gyoku.xml(output_body) }
end
create_header(header) click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 34
def create_header(header)
  header << Gyoku.xml(output_header)
end

Private Instance Methods

header_opts() click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 52
def header_opts
  {
    "#{NS_WSMAN_DMTF}:OptionSet" => {
      "#{NS_WSMAN_DMTF}:Option" => 'TRUE', :attributes! => {
        "#{NS_WSMAN_DMTF}:Option" => {
          'Name' => 'WSMAN_CMDSHELL_OPTION_KEEPALIVE'
        }
      }
    }
  }
end
output_body() click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 64
def output_body
  {
    "#{NS_WIN_SHELL}:DesiredStream" => @out_streams.join(' '), :attributes! => {
      "#{NS_WIN_SHELL}:DesiredStream" => {
        'CommandId' => @command_id
      }
    }
  }
end
output_header() click to toggle source
# File lib/winrm/wsmv/command_output.rb, line 44
def output_header
  merge_headers(shared_headers(@session_opts),
                resource_uri_shell(@shell_uri),
                action_receive,
                header_opts,
                selector_shell_id(@shell_id))
end