Class: WinRM::Shells::Base

Inherits:
Object
  • Object
show all
Includes:
Retryable
Defined in:
lib/winrm/shells/base.rb

Overview

Base class for remote shell

Direct Known Subclasses

Cmd, Powershell

Constant Summary collapse

TOO_MANY_COMMANDS =
'2150859174'.freeze
ERROR_OPERATION_ABORTED =
'995'.freeze
SHELL_NOT_FOUND =
'2150858843'.freeze
FAULTS_FOR_RESET =
[
  '2150858843', # Shell has been closed
  '2147943418', # Error reading registry key
  TOO_MANY_COMMANDS, # Maximum commands per user exceeded
].freeze

Constants included from Retryable

Retryable::RETRYABLE_EXCEPTIONS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Retryable

#retryable

Constructor Details

#initialize(connection_opts, transport, logger, shell_opts = {}) ⇒ Base

Create a new Cmd shell

Parameters:

  • connection_opts (ConnectionOpts)

    The WinRM connection options

  • transport (HttpTransport)

    The WinRM SOAP transport

  • logger (Logger)

    The logger to log diagnostic messages to

  • shell_opts (Hash) (defaults to: {})

    Options targeted for the created shell



48
49
50
51
52
53
# File 'lib/winrm/shells/base.rb', line 48

def initialize(connection_opts, transport, logger, shell_opts = {})
  @connection_opts = connection_opts
  @transport = transport
  @logger = logger
  @shell_opts = shell_opts
end

Instance Attribute Details

#connection_optsConnectionOpts (readonly)

Returns connection options of the shell.

Returns:



62
63
64
# File 'lib/winrm/shells/base.rb', line 62

def connection_opts
  @connection_opts
end

#loggerLogger (readonly)

Returns logger used for diagnostic messages.

Returns:

  • (Logger)

    logger used for diagnostic messages



68
69
70
# File 'lib/winrm/shells/base.rb', line 68

def logger
  @logger
end

#shell_idString (readonly)

Returns shell id of the currently opn shell or nil if shell is closed.

Returns:

  • (String)

    shell id of the currently opn shell or nil if shell is closed



56
57
58
# File 'lib/winrm/shells/base.rb', line 56

def shell_id
  @shell_id
end

#shell_optsHash (readonly)

Returns Options targeted for the created shell.

Returns:

  • (Hash)

    Options targeted for the created shell



71
72
73
# File 'lib/winrm/shells/base.rb', line 71

def shell_opts
  @shell_opts
end

#shell_uriString (readonly)

Returns uri that SOAP calls use to identify shell type.

Returns:

  • (String)

    uri that SOAP calls use to identify shell type



59
60
61
# File 'lib/winrm/shells/base.rb', line 59

def shell_uri
  @shell_uri
end

#transportWinRM::HTTP::HttpTransport (readonly)

Returns transport used to talk with endpoint.

Returns:



65
66
67
# File 'lib/winrm/shells/base.rb', line 65

def transport
  @transport
end

Instance Method Details

#closeObject

Closes the shell if one is open



87
88
89
90
91
92
93
94
95
96
# File 'lib/winrm/shells/base.rb', line 87

def close
  return unless shell_id
  begin
    self.class.close_shell(connection_opts, transport, shell_id)
  rescue WinRMWSManFault => e
    raise unless [ERROR_OPERATION_ABORTED, SHELL_NOT_FOUND].include?(e.fault_code)
  end
  remove_finalizer
  @shell_id = nil
end

#run(command, arguments = [], &block) {|standard, standard| ... } ⇒ Object

Runs the specified command with optional arguments

Parameters:

  • command (String)

    The command or executable to run

  • arguments (Array) (defaults to: [])

    The optional command arguments

  • block (&block)

    The optional callback for any realtime output

Yield Parameters:

  • standard (string)

    out response text

  • standard (string)

    error response text

Yield Returns:



80
81
82
83
84
# File 'lib/winrm/shells/base.rb', line 80

def run(command, arguments = [], &block)
  with_command_shell(command, arguments) do |shell, cmd|
    response_reader.read_output(command_output_message(shell, cmd), &block)
  end
end