winrm 2.0.1 → 2.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b23f30eeef61764dafa663e77588acda56160b5
4
- data.tar.gz: cfbde1991563fd9b6d9dc9bc08171c5404cd330c
3
+ metadata.gz: 8513f8bd7975beaf571799996f1a2a799d5f9703
4
+ data.tar.gz: 18d6d880eb43e8038048e587ce4530472a09798f
5
5
  SHA512:
6
- metadata.gz: 2b28caeef7b43e428caafd1bd1406e9a1c9bf7a7e889683e1f7aad4ec6519b5f9831cad6f4014970d2be6fc3f12c01f1e321b0cf6622863f714637050c55b60b
7
- data.tar.gz: 0c0c4ab172e632e70c9baf09bc58217f9a0e9b8c9412c12f3fbefc9a083b8a4e93cd197c185b65a530d680e55ed2169aaf7ba9d66f9d1d8c4f608baba558b3b2
6
+ metadata.gz: d71061fcb4154162b517fead0f4392d0e012494e5fe506aa7c712beab933a45ac8f90e154e028f2f50166bcec9cf19245422f30f66c8081adc923455595db4d6
7
+ data.tar.gz: 15ea773970783c2fdcf4cd1220d057c4cbee4a66d998e00ff444b2c9002cceb38aeff61b3f442b2a2ad753fed169559547592a382a1f89e0096b37ec2829d0d0
data/README.md CHANGED
@@ -27,10 +27,11 @@ opts = {
27
27
  }
28
28
  conn = WinRM::Connection.new(opts)
29
29
  conn.shell(:powershell) do |shell|
30
- shell.run('$PSVersionTable') do |stdout, stderr|
30
+ output = shell.run('$PSVersionTable') do |stdout, stderr|
31
31
  STDOUT.print stdout
32
32
  STDERR.print stderr
33
33
  end
34
+ puts "The script exited with exit code #{output.exitcode}"
34
35
  end
35
36
  ```
36
37
 
@@ -1,5 +1,10 @@
1
1
  # WinRM Gem Changelog
2
2
 
3
+ # 2.0.2
4
+ - Constrain to rubyntlm `>= 0.6.1` to avoid mutating frozen strings
5
+ - When using certificate authentication, do not validate presense of user and password
6
+ - Handle failed `PIPELINE_STATE` messages so that `throw` errors are not swallowed
7
+
3
8
  # 2.0.1
4
9
  - Fixed Powershell shell leakage when not explicitly closed
5
10
  - Fixed cmd commands with responses that extend beyond one stream
@@ -66,8 +66,12 @@ module WinRM
66
66
 
67
67
  def validate_required_fields
68
68
  raise 'endpoint is a required option' unless self[:endpoint]
69
- raise 'user is a required option' unless self[:user]
70
- raise 'password is a required option' unless self[:password]
69
+ if self[:client_cert]
70
+ raise 'path to client key is required' unless self[:client_key]
71
+ else
72
+ raise 'user is a required option' unless self[:user]
73
+ raise 'password is a required option' unless self[:password]
74
+ end
71
75
  end
72
76
 
73
77
  def validate_data_types
@@ -18,6 +18,7 @@ require_relative 'message_data/base'
18
18
  require_relative 'message_data/error_record'
19
19
  require_relative 'message_data/pipeline_output'
20
20
  require_relative 'message_data/pipeline_host_call'
21
+ require_relative 'message_data/pipeline_state'
21
22
  require_relative 'message_data/runspacepool_host_call'
22
23
  require_relative 'message_data/runspacepool_state'
23
24
  require_relative 'message_data/session_capability'
@@ -17,7 +17,7 @@
17
17
  module WinRM
18
18
  module PSRP
19
19
  module MessageData
20
- # pipeline host call message type
20
+ # error record message type
21
21
  class ErrorRecord < Base
22
22
  def exception
23
23
  @exception ||= property_hash('Exception')
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2016 Matt Wrock <matt@mattwrock.com>
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
+ module WinRM
18
+ module PSRP
19
+ module MessageData
20
+ # pipeline state message type
21
+ class PipelineState < Base
22
+ NOT_STARTED = 0
23
+ RUNNING = 1
24
+ STOPPING = 2
25
+ STOPPED = 3
26
+ COMPLETED = 4
27
+ FAILED = 5
28
+ DISCONNECTED = 6
29
+
30
+ def pipeline_state
31
+ clixml[:i32].to_i
32
+ end
33
+
34
+ def exception_as_error_record
35
+ @exception_as_error_record ||= ErrorRecord.new(raw) if pipeline_state == FAILED
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -16,11 +16,13 @@
16
16
 
17
17
  require 'base64'
18
18
  require_relative 'message'
19
+ require_relative 'message_data/pipeline_state'
19
20
 
20
21
  module WinRM
21
22
  module PSRP
22
23
  # Handles decoding a raw powershell output response
23
24
  class PowershellOutputDecoder
25
+ # rubocop:disable Metrics/CyclomaticComplexity
24
26
  # Decode the raw SOAP output into decoded PSRP message,
25
27
  # Removes BOM and replaces encoded line endings
26
28
  # @param raw_output [String] The raw encoded output
@@ -35,8 +37,13 @@ module WinRM
35
37
  decode_host_call(message)
36
38
  when WinRM::PSRP::Message::MESSAGE_TYPES[:error_record]
37
39
  decode_error_record(message)
40
+ when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state]
41
+ if message.parsed_data.pipeline_state == WinRM::PSRP::MessageData::PipelineState::FAILED
42
+ decode_error_record(message)
43
+ end
38
44
  end
39
45
  end
46
+ # rubocop:enable Metrics/CyclomaticComplexity
40
47
 
41
48
  protected
42
49
 
@@ -66,15 +73,19 @@ module WinRM
66
73
  def decode_error_record(message)
67
74
  parsed = message.parsed_data
68
75
  text = begin
69
- case parsed.fully_qualified_error_id
70
- when 'Microsoft.PowerShell.Commands.WriteErrorException'
71
- render_write_error_exception(parsed)
72
- when 'NativeCommandError'
73
- render_native_command_error(parsed)
74
- when 'NativeCommandErrorMessage'
75
- parsed.exception[:message]
76
+ if message.type == WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state]
77
+ render_exception_as_error_record(parsed.exception_as_error_record)
76
78
  else
77
- render_exception(parsed)
79
+ case parsed.fully_qualified_error_id
80
+ when 'Microsoft.PowerShell.Commands.WriteErrorException'
81
+ render_write_error_exception(parsed)
82
+ when 'NativeCommandError'
83
+ render_native_command_error(parsed)
84
+ when 'NativeCommandErrorMessage'
85
+ parsed.exception[:message]
86
+ else
87
+ render_exception(parsed)
88
+ end
78
89
  end
79
90
  end
80
91
 
@@ -106,6 +117,14 @@ EOH
106
117
  EOH
107
118
  end
108
119
 
120
+ def render_exception_as_error_record(parsed)
121
+ <<EOH
122
+ #{parsed.exception[:message]}
123
+ + CategoryInfo : #{parsed.error_category_message}
124
+ + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id}
125
+ EOH
126
+ end
127
+
109
128
  private
110
129
 
111
130
  def hex_decode(text)
@@ -78,6 +78,10 @@ module WinRM
78
78
  type = :stderr
79
79
  when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_host_call]
80
80
  type = :stderr if message.data.include?('WriteError')
81
+ when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state]
82
+ if message.parsed_data.pipeline_state == WinRM::PSRP::MessageData::PipelineState::FAILED
83
+ type = :stderr
84
+ end
81
85
  end
82
86
  type
83
87
  end
@@ -3,5 +3,5 @@
3
3
  # WinRM module
4
4
  module WinRM
5
5
  # The version of the WinRM library
6
- VERSION = '2.0.1'.freeze
6
+ VERSION = '2.0.2'.freeze
7
7
  end
@@ -13,6 +13,12 @@ describe 'winrm client powershell' do
13
13
  it { should have_no_stderr }
14
14
  end
15
15
 
16
+ describe 'throw' do
17
+ subject(:output) { @powershell.run("throw 'an error occured'") }
18
+ it { should have_exit_code 0 }
19
+ it { should have_stderr_match(/an error occured/) }
20
+ end
21
+
16
22
  describe 'exit' do
17
23
  subject(:output) { @powershell.run('exit 5') }
18
24
  it { should have_exit_code 5 }
@@ -2,13 +2,82 @@
2
2
  require 'winrm/connection_opts'
3
3
 
4
4
  describe WinRM::ConnectionOpts do
5
+ shared_examples 'invalid options' do
6
+ it 'throws a validation error' do
7
+ expect { WinRM::ConnectionOpts.create_with_defaults(overrides) }.to raise_error
8
+ end
9
+ end
10
+
5
11
  context 'when there are no overrides' do
6
- describe '#create_with_defaults' do
7
- it 'throws a validation error' do
8
- expect { WinRM::ConnectionOpts.create_with_defaults({}) }.to raise_error
9
- end
12
+ it_behaves_like 'invalid options'
13
+ end
14
+
15
+ context 'when there are only username and password' do
16
+ let(:overrides) do
17
+ {
18
+ user: 'Administrator',
19
+ password: 'password'
20
+ }
21
+ end
22
+
23
+ it_behaves_like 'invalid options'
24
+ end
25
+
26
+ context 'when there are only username and endpoint' do
27
+ let(:overrides) do
28
+ {
29
+ user: 'Administrator',
30
+ endpoint: 'http://localhost:5985/wsman'
31
+ }
32
+ end
33
+
34
+ it_behaves_like 'invalid options'
35
+ end
36
+
37
+ context 'when there are only password and endpoint' do
38
+ let(:overrides) do
39
+ {
40
+ password: 'password',
41
+ endpoint: 'http://localhost:5985/wsman'
42
+ }
10
43
  end
44
+
45
+ it_behaves_like 'invalid options'
11
46
  end
47
+
48
+ context 'when there are only certificate and key' do
49
+ let(:overrides) do
50
+ {
51
+ client_cert: 'path/to/cert',
52
+ client_key: 'path/to/key'
53
+ }
54
+ end
55
+
56
+ it_behaves_like 'invalid options'
57
+ end
58
+
59
+ context 'when there are only certificate and endpoint' do
60
+ let(:overrides) do
61
+ {
62
+ client_cert: 'path/to/cert',
63
+ endpoint: 'http://localhost:5985/wsman'
64
+ }
65
+ end
66
+
67
+ it_behaves_like 'invalid options'
68
+ end
69
+
70
+ context 'when there are only key and endpoint' do
71
+ let(:overrides) do
72
+ {
73
+ client_key: 'path/to/key',
74
+ endpoint: 'http://localhost:5985/wsman'
75
+ }
76
+ end
77
+
78
+ it_behaves_like 'invalid options'
79
+ end
80
+
12
81
  context 'when username, password, and endpoint are given' do
13
82
  let(:overrides) do
14
83
  {
@@ -26,6 +95,25 @@ describe WinRM::ConnectionOpts do
26
95
  end
27
96
  end
28
97
  end
98
+
99
+ context 'when certificate, key and endpoint are given' do
100
+ let(:overrides) do
101
+ {
102
+ client_cert: 'path/to/cert',
103
+ client_key: 'path/to/key',
104
+ endpoint: 'http://localhost:5985/wsman'
105
+ }
106
+ end
107
+ describe '#create_with_defaults' do
108
+ it 'creates a ConnectionOpts object' do
109
+ config = WinRM::ConnectionOpts.create_with_defaults(overrides)
110
+ expect(config[:client_cert]).to eq(overrides[:client_cert])
111
+ expect(config[:client_key]).to eq(overrides[:client_key])
112
+ expect(config[:endpoint]).to eq(overrides[:endpoint])
113
+ end
114
+ end
115
+ end
116
+
29
117
  context 'when overrides are provided' do
30
118
  let(:overrides) do
31
119
  {
@@ -42,6 +130,7 @@ describe WinRM::ConnectionOpts do
42
130
  end
43
131
  end
44
132
  end
133
+
45
134
  context 'when receive_timeout is specified' do
46
135
  let(:overrides) do
47
136
  {
@@ -58,6 +147,7 @@ describe WinRM::ConnectionOpts do
58
147
  end
59
148
  end
60
149
  end
150
+
61
151
  context 'when operation_timeout is specified' do
62
152
  let(:overrides) do
63
153
  {
@@ -75,6 +165,7 @@ describe WinRM::ConnectionOpts do
75
165
  end
76
166
  end
77
167
  end
168
+
78
169
  context 'when invalid data types are given' do
79
170
  let(:overrides) do
80
171
  {
@@ -0,0 +1,40 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/psrp/message_data/base'
4
+ require 'winrm/psrp/message_data/pipeline_state'
5
+
6
+ describe WinRM::PSRP::MessageData::PipelineState do
7
+ let(:test_data_xml_template) do
8
+ ERB.new(stubbed_clixml('pipeline_state.xml.erb'))
9
+ end
10
+ let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::FAILED }
11
+ let(:error_message) { 'an error occured' }
12
+ let(:category_message) { 'category message' }
13
+ let(:error_id) { 'an error occured' }
14
+ let(:raw_data) { test_data_xml_template.result(binding) }
15
+ subject { described_class.new(raw_data) }
16
+
17
+ it 'returns the state' do
18
+ expect(subject.pipeline_state).to eq(pipeline_state)
19
+ end
20
+
21
+ it 'returns the exception' do
22
+ expect(subject.exception_as_error_record.exception[:message]).to eq(error_message)
23
+ end
24
+
25
+ it 'returns the FullyQualifiedErrorId' do
26
+ expect(subject.exception_as_error_record.fully_qualified_error_id).to eq(error_id)
27
+ end
28
+
29
+ it 'returns the error category message' do
30
+ expect(subject.exception_as_error_record.error_category_message).to eq(category_message)
31
+ end
32
+
33
+ context 'state is not failed' do
34
+ let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::COMPLETED }
35
+
36
+ it 'has a nil exception' do
37
+ expect(subject.exception_as_error_record).to be(nil)
38
+ end
39
+ end
40
+ end
@@ -17,7 +17,7 @@ describe WinRM::PSRP::PowershellOutputDecoder do
17
17
  subject { described_class.new.decode(message) }
18
18
 
19
19
  context 'undecodable message type' do
20
- let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] }
20
+ let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:public_key] }
21
21
 
22
22
  it 'ignores message' do
23
23
  expect(subject).to be nil
@@ -81,4 +81,20 @@ describe WinRM::PSRP::PowershellOutputDecoder do
81
81
  expect(subject).to match(/#{error_message}/)
82
82
  end
83
83
  end
84
+
85
+ context 'receiving error record in pipeline state' do
86
+ let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] }
87
+ let(:test_data_error_xml_template) do
88
+ ERB.new(stubbed_clixml('pipeline_state.xml.erb'))
89
+ end
90
+ let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::FAILED }
91
+ let(:error_message) { 'an error' }
92
+ let(:category_message) { 'category message' }
93
+ let(:error_id) { 'an error' }
94
+ let(:data) { test_data_error_xml_template.result(binding) }
95
+
96
+ it 'decodes error record' do
97
+ expect(subject).to match(/#{error_message}/)
98
+ end
99
+ end
84
100
  end
@@ -69,6 +69,24 @@ describe WinRM::PSRP::ReceiveResponseReader do
69
69
  end
70
70
  end
71
71
 
72
+ context 'response doc failed pipeline state' do
73
+ let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] }
74
+ let(:test_data_error_xml_template) do
75
+ ERB.new(stubbed_clixml('pipeline_state.xml.erb'))
76
+ end
77
+ let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::FAILED }
78
+ let(:error_message) { 'an error' }
79
+ let(:category_message) { 'category message' }
80
+ let(:error_id) { 'Microsoft.PowerShell.Commands.WriteErrorException' }
81
+ let(:test_data) { test_data_error_xml_template.result(binding) }
82
+
83
+ it 'outputs to stderr' do
84
+ expect(
85
+ subject.read_output(output_message).stderr
86
+ ).to match(/#{error_message}/)
87
+ end
88
+ end
89
+
72
90
  context 'response doc writing error to host' do
73
91
  let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_host_call] }
74
92
  let(:test_data) do
@@ -0,0 +1,88 @@
1
+ <?xml version="1.0"?>
2
+ <Obj RefId="0">
3
+ <MS>
4
+ <I32 N="PipelineState"><%= pipeline_state %></I32>
5
+ <Obj N="ExceptionAsErrorRecord" RefId="1">
6
+ <TN RefId="0">
7
+ <T>System.Management.Automation.ErrorRecord</T>
8
+ <T>System.Object</T>
9
+ </TN>
10
+ <ToString><%= error_message %></ToString>
11
+ <MS>
12
+ <Obj N="Exception" RefId="2">
13
+ <TN RefId="1">
14
+ <T>System.Management.Automation.RuntimeException</T>
15
+ <T>Microsoft.PowerShell.CoreClr.Stubs.SystemException</T>
16
+ <T>System.Exception</T>
17
+ <T>System.Object</T>
18
+ </TN>
19
+ <ToString>System.Management.Automation.RuntimeException: <%= error_message %></ToString>
20
+ <Props>
21
+ <S N="ErrorRecord"><%= error_message %></S>
22
+ <B N="WasThrownFromThrowStatement">true</B>
23
+ <S N="Message"><%= error_message %></S>
24
+ <Obj N="Data" RefId="3">
25
+ <TN RefId="2">
26
+ <T>System.Collections.ListDictionaryInternal</T>
27
+ <T>System.Object</T>
28
+ </TN>
29
+ <DCT />
30
+ </Obj>
31
+ <Nil N="InnerException" />
32
+ <Nil N="StackTrace" />
33
+ <Nil N="HelpLink" />
34
+ <Nil N="Source" />
35
+ <I32 N="HResult">-2146233088</I32>
36
+ </Props>
37
+ </Obj>
38
+ <S N="TargetObject"><%= error_message %></S>
39
+ <S N="FullyQualifiedErrorId"><%= error_id %></S>
40
+ <Obj N="InvocationInfo" RefId="4">
41
+ <TN RefId="3">
42
+ <T>System.Management.Automation.InvocationInfo</T>
43
+ <T>System.Object</T>
44
+ </TN>
45
+ <ToString>System.Management.Automation.InvocationInfo</ToString>
46
+ <Props>
47
+ <Nil N="MyCommand" />
48
+ <Obj N="BoundParameters" RefId="5">
49
+ <TN RefId="4">
50
+ <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]</T>
51
+ <T>System.Object</T>
52
+ </TN>
53
+ <DCT />
54
+ </Obj>
55
+ <Obj N="UnboundArguments" RefId="6">
56
+ <TN RefId="5">
57
+ <T>System.Collections.Generic.List`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]</T>
58
+ <T>System.Object</T>
59
+ </TN>
60
+ <LST />
61
+ </Obj>
62
+ <I32 N="ScriptLineNumber">1</I32>
63
+ <I32 N="OffsetInLine">1</I32>
64
+ <I64 N="HistoryId">-1</I64>
65
+ <S N="ScriptName"></S>
66
+ <S N="Line">throw '<%= error_message %>'</S>
67
+ <S N="PositionMessage">At line:1 char:1_x000D__x000A_+ throw '<%= error_message %>'_x000D__x000A_+ ~~~~~~~~~~~~~~~~~~~~~~~~</S>
68
+ <S N="PSScriptRoot"></S>
69
+ <Nil N="PSCommandPath" />
70
+ <S N="InvocationName"></S>
71
+ <I32 N="PipelineLength">0</I32>
72
+ <I32 N="PipelinePosition">0</I32>
73
+ <B N="ExpectingInput">false</B>
74
+ <S N="CommandOrigin">Internal</S>
75
+ <Nil N="DisplayScriptPosition" />
76
+ </Props>
77
+ </Obj>
78
+ <I32 N="ErrorCategory_Category">14</I32>
79
+ <S N="ErrorCategory_Activity"></S>
80
+ <S N="ErrorCategory_Reason">RuntimeException</S>
81
+ <S N="ErrorCategory_TargetName"><%= error_message %></S><S N="ErrorCategory_TargetType">String</S>
82
+ <S N="ErrorCategory_Message"><%= category_message %></S>
83
+ <B N="SerializeExtendedInfo">false</B>
84
+ <S N="ErrorDetails_ScriptStackTrace">at &lt;ScriptBlock&gt;, &lt;No file&gt;: line 1</S>
85
+ </MS>
86
+ </Obj>
87
+ </MS>
88
+ </Obj>
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.required_ruby_version = '>= 1.9.0'
29
29
  s.add_runtime_dependency 'gssapi', '~> 1.2'
30
30
  s.add_runtime_dependency 'httpclient', '~> 2.2', '>= 2.2.0.2'
31
- s.add_runtime_dependency 'rubyntlm', '~> 0.6.0'
31
+ s.add_runtime_dependency 'rubyntlm', '~> 0.6.0', '>= 0.6.1'
32
32
  s.add_runtime_dependency 'logging', ['>= 1.6.1', '< 3.0']
33
33
  s.add_runtime_dependency 'nori', '~> 2.0'
34
34
  s.add_runtime_dependency 'gyoku', '~> 1.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winrm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Wanek
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-09-03 00:00:00.000000000 Z
12
+ date: 2016-09-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gssapi
@@ -52,6 +52,9 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.6.0
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 0.6.1
55
58
  type: :runtime
56
59
  prerelease: false
57
60
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,6 +62,9 @@ dependencies:
59
62
  - - "~>"
60
63
  - !ruby/object:Gem::Version
61
64
  version: 0.6.0
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 0.6.1
62
68
  - !ruby/object:Gem::Dependency
63
69
  name: logging
64
70
  requirement: !ruby/object:Gem::Requirement
@@ -245,6 +251,7 @@ files:
245
251
  - lib/winrm/psrp/message_data/error_record.rb
246
252
  - lib/winrm/psrp/message_data/pipeline_host_call.rb
247
253
  - lib/winrm/psrp/message_data/pipeline_output.rb
254
+ - lib/winrm/psrp/message_data/pipeline_state.rb
248
255
  - lib/winrm/psrp/message_data/runspacepool_host_call.rb
249
256
  - lib/winrm/psrp/message_data/runspacepool_state.rb
250
257
  - lib/winrm/psrp/message_data/session_capability.rb
@@ -300,6 +307,7 @@ files:
300
307
  - tests/spec/psrp/message_data/error_record_spec.rb
301
308
  - tests/spec/psrp/message_data/pipeline_host_call_spec.rb
302
309
  - tests/spec/psrp/message_data/pipeline_output_spec.rb
310
+ - tests/spec/psrp/message_data/pipeline_state_spec.rb
303
311
  - tests/spec/psrp/message_data/runspace_pool_host_call_spec.rb
304
312
  - tests/spec/psrp/message_data/runspacepool_state_spec.rb
305
313
  - tests/spec/psrp/message_data/session_capability_spec.rb
@@ -316,6 +324,7 @@ files:
316
324
  - tests/spec/shells/powershell_spec.rb
317
325
  - tests/spec/spec_helper.rb
318
326
  - tests/spec/stubs/clixml/error_record.xml.erb
327
+ - tests/spec/stubs/clixml/pipeline_state.xml.erb
319
328
  - tests/spec/stubs/responses/get_command_output_response.xml.erb
320
329
  - tests/spec/stubs/responses/get_command_output_response_not_done.xml.erb
321
330
  - tests/spec/stubs/responses/get_powershell_keepalive_response.xml.erb