winrm 2.0.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -10
  3. data/.rubocop.yml +26 -26
  4. data/.travis.yml +11 -11
  5. data/Gemfile +3 -3
  6. data/README.md +260 -233
  7. data/Rakefile +34 -34
  8. data/Vagrantfile +6 -6
  9. data/WinrmAppveyor.psm1 +31 -31
  10. data/appveyor.yml +51 -51
  11. data/changelog.md +104 -101
  12. data/lib/winrm.rb +39 -39
  13. data/lib/winrm/connection.rb +83 -82
  14. data/lib/winrm/connection_opts.rb +91 -91
  15. data/lib/winrm/exceptions.rb +76 -76
  16. data/lib/winrm/http/response_handler.rb +96 -96
  17. data/lib/winrm/http/transport.rb +424 -424
  18. data/lib/winrm/http/transport_factory.rb +68 -68
  19. data/lib/winrm/output.rb +59 -59
  20. data/lib/winrm/psrp/create_pipeline.xml.erb +167 -167
  21. data/lib/winrm/psrp/fragment.rb +70 -70
  22. data/lib/winrm/psrp/init_runspace_pool.xml.erb +224 -224
  23. data/lib/winrm/psrp/message.rb +130 -130
  24. data/lib/winrm/psrp/message_data.rb +42 -42
  25. data/lib/winrm/psrp/message_data/base.rb +49 -49
  26. data/lib/winrm/psrp/message_data/error_record.rb +68 -68
  27. data/lib/winrm/psrp/message_data/pipeline_host_call.rb +32 -32
  28. data/lib/winrm/psrp/message_data/pipeline_output.rb +49 -49
  29. data/lib/winrm/psrp/message_data/pipeline_state.rb +40 -40
  30. data/lib/winrm/psrp/message_data/runspacepool_host_call.rb +32 -32
  31. data/lib/winrm/psrp/message_data/runspacepool_state.rb +39 -39
  32. data/lib/winrm/psrp/message_data/session_capability.rb +36 -36
  33. data/lib/winrm/psrp/message_defragmenter.rb +62 -62
  34. data/lib/winrm/psrp/message_factory.rb +75 -75
  35. data/lib/winrm/psrp/message_fragmenter.rb +60 -60
  36. data/lib/winrm/psrp/powershell_output_decoder.rb +139 -139
  37. data/lib/winrm/psrp/receive_response_reader.rb +97 -97
  38. data/lib/winrm/psrp/session_capability.xml.erb +7 -7
  39. data/lib/winrm/psrp/uuid.rb +40 -40
  40. data/lib/winrm/shells/base.rb +180 -175
  41. data/lib/winrm/shells/cmd.rb +65 -65
  42. data/lib/winrm/shells/power_shell.rb +202 -202
  43. data/lib/winrm/shells/retryable.rb +45 -45
  44. data/lib/winrm/shells/shell_factory.rb +58 -50
  45. data/lib/winrm/version.rb +7 -7
  46. data/lib/winrm/wsmv/base.rb +59 -59
  47. data/lib/winrm/wsmv/cleanup_command.rb +61 -61
  48. data/lib/winrm/wsmv/close_shell.rb +50 -50
  49. data/lib/winrm/wsmv/command.rb +101 -101
  50. data/lib/winrm/wsmv/command_output.rb +76 -76
  51. data/lib/winrm/wsmv/command_output_decoder.rb +55 -55
  52. data/lib/winrm/wsmv/configuration.rb +46 -46
  53. data/lib/winrm/wsmv/create_pipeline.rb +66 -66
  54. data/lib/winrm/wsmv/create_shell.rb +119 -119
  55. data/lib/winrm/wsmv/header.rb +203 -203
  56. data/lib/winrm/wsmv/init_runspace_pool.rb +95 -95
  57. data/lib/winrm/wsmv/iso8601_duration.rb +60 -60
  58. data/lib/winrm/wsmv/keep_alive.rb +68 -68
  59. data/lib/winrm/wsmv/receive_response_reader.rb +126 -126
  60. data/lib/winrm/wsmv/send_data.rb +68 -68
  61. data/lib/winrm/wsmv/soap.rb +51 -51
  62. data/lib/winrm/wsmv/wql_query.rb +79 -79
  63. data/lib/winrm/wsmv/write_stdin.rb +88 -88
  64. data/tests/integration/auth_timeout_spec.rb +18 -18
  65. data/tests/integration/cmd_spec.rb +131 -110
  66. data/tests/integration/config-example.yml +16 -16
  67. data/tests/integration/issue_59_spec.rb +26 -26
  68. data/tests/integration/powershell_spec.rb +165 -165
  69. data/tests/integration/spec_helper.rb +65 -65
  70. data/tests/integration/transport_spec.rb +99 -99
  71. data/tests/integration/wql_spec.rb +16 -16
  72. data/tests/matchers.rb +60 -60
  73. data/tests/spec/configuration_spec.rb +184 -184
  74. data/tests/spec/connection_spec.rb +39 -39
  75. data/tests/spec/exception_spec.rb +50 -50
  76. data/tests/spec/http/transport_factory_spec.rb +68 -68
  77. data/tests/spec/http/transport_spec.rb +44 -44
  78. data/tests/spec/output_spec.rb +127 -127
  79. data/tests/spec/psrp/fragment_spec.rb +62 -62
  80. data/tests/spec/psrp/message_data/base_spec.rb +13 -13
  81. data/tests/spec/psrp/message_data/error_record_spec.rb +41 -41
  82. data/tests/spec/psrp/message_data/pipeline_host_call_spec.rb +25 -25
  83. data/tests/spec/psrp/message_data/pipeline_output_spec.rb +32 -32
  84. data/tests/spec/psrp/message_data/pipeline_state_spec.rb +40 -40
  85. data/tests/spec/psrp/message_data/runspace_pool_host_call_spec.rb +25 -25
  86. data/tests/spec/psrp/message_data/runspacepool_state_spec.rb +16 -16
  87. data/tests/spec/psrp/message_data/session_capability_spec.rb +30 -30
  88. data/tests/spec/psrp/message_data_spec.rb +35 -35
  89. data/tests/spec/psrp/message_defragmenter_spec.rb +47 -47
  90. data/tests/spec/psrp/message_fragmenter_spec.rb +105 -105
  91. data/tests/spec/psrp/powershell_output_decoder_spec.rb +100 -100
  92. data/tests/spec/psrp/psrp_message_spec.rb +70 -70
  93. data/tests/spec/psrp/recieve_response_reader_spec.rb +172 -172
  94. data/tests/spec/psrp/uuid_spec.rb +28 -28
  95. data/tests/spec/response_handler_spec.rb +61 -61
  96. data/tests/spec/shells/base_spec.rb +202 -202
  97. data/tests/spec/shells/cmd_spec.rb +75 -75
  98. data/tests/spec/shells/powershell_spec.rb +175 -175
  99. data/tests/spec/spec_helper.rb +47 -47
  100. data/tests/spec/stubs/clixml/error_record.xml.erb +84 -84
  101. data/tests/spec/stubs/clixml/pipeline_state.xml.erb +88 -88
  102. data/tests/spec/stubs/responses/get_command_output_response.xml.erb +13 -13
  103. data/tests/spec/stubs/responses/get_command_output_response_not_done.xml.erb +10 -10
  104. data/tests/spec/stubs/responses/get_powershell_keepalive_response.xml.erb +10 -10
  105. data/tests/spec/stubs/responses/get_powershell_output_response.xml.erb +12 -12
  106. data/tests/spec/stubs/responses/get_powershell_output_response_not_done.xml.erb +9 -9
  107. data/tests/spec/stubs/responses/open_shell_v1.xml +19 -19
  108. data/tests/spec/stubs/responses/open_shell_v2.xml +20 -20
  109. data/tests/spec/stubs/responses/soap_fault_v1.xml +36 -36
  110. data/tests/spec/stubs/responses/soap_fault_v2.xml +42 -42
  111. data/tests/spec/stubs/responses/wmi_error_v2.xml +41 -41
  112. data/tests/spec/wsmv/cleanup_command_spec.rb +22 -22
  113. data/tests/spec/wsmv/close_shell_spec.rb +17 -17
  114. data/tests/spec/wsmv/command_output_decoder_spec.rb +37 -37
  115. data/tests/spec/wsmv/command_output_spec.rb +45 -45
  116. data/tests/spec/wsmv/command_spec.rb +19 -19
  117. data/tests/spec/wsmv/configuration_spec.rb +17 -17
  118. data/tests/spec/wsmv/create_pipeline_spec.rb +31 -31
  119. data/tests/spec/wsmv/create_shell_spec.rb +38 -38
  120. data/tests/spec/wsmv/init_runspace_pool_spec.rb +36 -36
  121. data/tests/spec/wsmv/keep_alive_spec.rb +21 -21
  122. data/tests/spec/wsmv/receive_response_reader_spec.rb +123 -123
  123. data/tests/spec/wsmv/send_data_spec.rb +30 -30
  124. data/tests/spec/wsmv/wql_query_spec.rb +13 -13
  125. data/tests/spec/wsmv/write_stdin_spec.rb +22 -22
  126. data/winrm.gemspec +42 -42
  127. metadata +2 -2
@@ -1,45 +1,45 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- # Copyright 2015 Matt Wrock <matt@mattwrock.com>
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- require_relative '../exceptions'
19
-
20
- module WinRM
21
- module Shells
22
- # Shell mixin for retrying an operation
23
- module Retryable
24
- RETRYABLE_EXCEPTIONS = lambda do
25
- [
26
- Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
27
- Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH, ::WinRM::WinRMWSManFault,
28
- ::WinRM::WinRMHTTPTransportError, ::WinRM::WinRMAuthorizationError,
29
- HTTPClient::KeepAliveDisconnected, HTTPClient::ConnectTimeoutError
30
- ].freeze
31
- end
32
-
33
- # Retries the operation a specified number of times with a delay between
34
- # @param retries [Fixnum] The number of times to retry
35
- # @param delay [Fixnum] The number of seconds to wait between retry attempts
36
- def retryable(retries, delay)
37
- yield
38
- rescue *RETRYABLE_EXCEPTIONS.call
39
- raise unless (retries -= 1) > 0
40
- sleep(delay)
41
- retry
42
- end
43
- end
44
- end
45
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ # Copyright 2015 Matt Wrock <matt@mattwrock.com>
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require_relative '../exceptions'
19
+
20
+ module WinRM
21
+ module Shells
22
+ # Shell mixin for retrying an operation
23
+ module Retryable
24
+ RETRYABLE_EXCEPTIONS = lambda do
25
+ [
26
+ Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
27
+ Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH, ::WinRM::WinRMWSManFault,
28
+ ::WinRM::WinRMHTTPTransportError, ::WinRM::WinRMAuthorizationError,
29
+ HTTPClient::KeepAliveDisconnected, HTTPClient::ConnectTimeoutError
30
+ ].freeze
31
+ end
32
+
33
+ # Retries the operation a specified number of times with a delay between
34
+ # @param retries [Fixnum] The number of times to retry
35
+ # @param delay [Fixnum] The number of seconds to wait between retry attempts
36
+ def retryable(retries, delay)
37
+ yield
38
+ rescue *RETRYABLE_EXCEPTIONS.call
39
+ raise unless (retries -= 1) > 0
40
+ sleep(delay)
41
+ retry
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,50 +1,58 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- require_relative 'base'
18
- require_relative 'cmd'
19
- require_relative 'power_shell'
20
-
21
- module WinRM
22
- module Shells
23
- # Factory for creating concrete shell instances
24
- class ShellFactory
25
- # Creates a new ShellFactory instance
26
- # @param connection_opts [ConnectionOpts] The WinRM connection options
27
- # @param transport [HttpTransport] The WinRM SOAP transport for sending messages
28
- # @param logger [Logger] The logger to log messages to
29
- def initialize(connection_opts, transport, logger)
30
- @connection_opts = connection_opts
31
- @transport = transport
32
- @logger = logger
33
- end
34
-
35
- # Creates a new shell instance based off the shell_type
36
- # @param shell_type [Symbol] The shell type :cmd or :powershell
37
- # @return The ready to use shell instance
38
- def create_shell(shell_type)
39
- type = shell_type.to_s.capitalize.to_sym
40
- if Shells.constants.include?(type)
41
- WinRM::Shells.const_get(type).new(@connection_opts, @transport, @logger)
42
- else
43
- message = "#{type} is not a valid WinRM shell type. " \
44
- 'Expected either :cmd, :powershell or pluggable shell.'
45
- raise WinRM::InvalidShellError, message
46
- end
47
- end
48
- end
49
- end
50
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'base'
18
+ require_relative 'cmd'
19
+ require_relative 'power_shell'
20
+
21
+ module WinRM
22
+ module Shells
23
+ # Factory for creating concrete shell instances
24
+ class ShellFactory
25
+ # Creates a new ShellFactory instance
26
+ # @param connection_opts [ConnectionOpts] The WinRM connection options
27
+ # @param transport [HttpTransport] The WinRM SOAP transport for sending messages
28
+ # @param logger [Logger] The logger to log messages to
29
+ def initialize(connection_opts, transport, logger)
30
+ @connection_opts = connection_opts
31
+ @transport = transport
32
+ @logger = logger
33
+ end
34
+
35
+ # Creates a new shell instance based off the shell_type
36
+ # @param shell_type [Symbol] The shell type :cmd or :powershell
37
+ # @param shell_opts [Hash] Options targeted for the created shell
38
+ # @return The ready to use shell instance
39
+ def create_shell(shell_type, shell_opts = {})
40
+ type = shell_type.to_s.capitalize.to_sym
41
+ args = [
42
+ @connection_opts,
43
+ @transport,
44
+ @logger
45
+ ]
46
+ # winrm-elevated has an initializer with no shell_opts so don't break it
47
+ args << shell_opts unless shell_opts.nil? || shell_opts.empty?
48
+ if Shells.constants.include?(type)
49
+ WinRM::Shells.const_get(type).new(*args)
50
+ else
51
+ message = "#{type} is not a valid WinRM shell type. " \
52
+ 'Expected either :cmd, :powershell or pluggable shell.'
53
+ raise WinRM::InvalidShellError, message
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,7 +1,7 @@
1
- # encoding: UTF-8
2
-
3
- # WinRM module
4
- module WinRM
5
- # The version of the WinRM library
6
- VERSION = '2.0.3'.freeze
7
- end
1
+ # encoding: UTF-8
2
+
3
+ # WinRM module
4
+ module WinRM
5
+ # The version of the WinRM library
6
+ VERSION = '2.1.0'.freeze
7
+ end
@@ -1,59 +1,59 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- require 'base64'
18
- require 'builder'
19
- require 'gyoku'
20
- require_relative 'soap'
21
- require_relative 'header'
22
-
23
- module WinRM
24
- module WSMV
25
- # Base class for all WSMV message classes
26
- class Base
27
- include WinRM::WSMV::SOAP
28
- include WinRM::WSMV::Header
29
-
30
- # Builds the WSMV message XML payload
31
- def build
32
- builder = Builder::XmlMarkup.new
33
- builder.instruct!(:xml, encoding: 'UTF-8')
34
- builder.tag! :env, :Envelope, namespaces do |env|
35
- env.tag!(:env, :Header) do |env_header|
36
- create_header(env_header)
37
- end
38
- env.tag!(:env, :Body) do |env_body|
39
- create_body(env_body)
40
- end
41
- end
42
- end
43
-
44
- protected
45
-
46
- def create_header
47
- raise NotImplementedError
48
- end
49
-
50
- def create_body
51
- raise NotImplementedError
52
- end
53
-
54
- def encode_bytes(bytes)
55
- Base64.strict_encode64(bytes.pack('C*'))
56
- end
57
- end
58
- end
59
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'base64'
18
+ require 'builder'
19
+ require 'gyoku'
20
+ require_relative 'soap'
21
+ require_relative 'header'
22
+
23
+ module WinRM
24
+ module WSMV
25
+ # Base class for all WSMV message classes
26
+ class Base
27
+ include WinRM::WSMV::SOAP
28
+ include WinRM::WSMV::Header
29
+
30
+ # Builds the WSMV message XML payload
31
+ def build
32
+ builder = Builder::XmlMarkup.new
33
+ builder.instruct!(:xml, encoding: 'UTF-8')
34
+ builder.tag! :env, :Envelope, namespaces do |env|
35
+ env.tag!(:env, :Header) do |env_header|
36
+ create_header(env_header)
37
+ end
38
+ env.tag!(:env, :Body) do |env_body|
39
+ create_body(env_body)
40
+ end
41
+ end
42
+ end
43
+
44
+ protected
45
+
46
+ def create_header
47
+ raise NotImplementedError
48
+ end
49
+
50
+ def create_body
51
+ raise NotImplementedError
52
+ end
53
+
54
+ def encode_bytes(bytes)
55
+ Base64.strict_encode64(bytes.pack('C*'))
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,61 +1,61 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- require_relative 'base'
18
-
19
- module WinRM
20
- module WSMV
21
- # WSMV message to execute a command inside a remote shell
22
- class CleanupCommand < Base
23
- def initialize(session_opts, opts)
24
- raise 'opts[:shell_id] is required' unless opts[:shell_id]
25
- raise 'opts[:command_id] is required' unless opts[:command_id]
26
- @session_opts = session_opts
27
- @shell_id = opts[:shell_id]
28
- @command_id = opts[:command_id]
29
- @shell_uri = opts[:shell_uri] || RESOURCE_URI_CMD
30
- end
31
-
32
- protected
33
-
34
- def create_header(header)
35
- header << Gyoku.xml(cleanup_header)
36
- end
37
-
38
- def create_body(body)
39
- body.tag!("#{NS_WIN_SHELL}:Signal", 'CommandId' => @command_id) do |cl|
40
- cl << Gyoku.xml(cleanup_body)
41
- end
42
- end
43
-
44
- private
45
-
46
- def cleanup_header
47
- merge_headers(shared_headers(@session_opts),
48
- resource_uri_shell(@shell_uri),
49
- action_signal,
50
- selector_shell_id(@shell_id))
51
- end
52
-
53
- def cleanup_body
54
- {
55
- "#{NS_WIN_SHELL}:Code" =>
56
- 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/signal/terminate'
57
- }
58
- end
59
- end
60
- end
61
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'base'
18
+
19
+ module WinRM
20
+ module WSMV
21
+ # WSMV message to execute a command inside a remote shell
22
+ class CleanupCommand < Base
23
+ def initialize(session_opts, opts)
24
+ raise 'opts[:shell_id] is required' unless opts[:shell_id]
25
+ raise 'opts[:command_id] is required' unless opts[:command_id]
26
+ @session_opts = session_opts
27
+ @shell_id = opts[:shell_id]
28
+ @command_id = opts[:command_id]
29
+ @shell_uri = opts[:shell_uri] || RESOURCE_URI_CMD
30
+ end
31
+
32
+ protected
33
+
34
+ def create_header(header)
35
+ header << Gyoku.xml(cleanup_header)
36
+ end
37
+
38
+ def create_body(body)
39
+ body.tag!("#{NS_WIN_SHELL}:Signal", 'CommandId' => @command_id) do |cl|
40
+ cl << Gyoku.xml(cleanup_body)
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def cleanup_header
47
+ merge_headers(shared_headers(@session_opts),
48
+ resource_uri_shell(@shell_uri),
49
+ action_signal,
50
+ selector_shell_id(@shell_id))
51
+ end
52
+
53
+ def cleanup_body
54
+ {
55
+ "#{NS_WIN_SHELL}:Code" =>
56
+ 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/signal/terminate'
57
+ }
58
+ end
59
+ end
60
+ end
61
+ end