winrm 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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