chef-winrm 2.3.10

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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +202 -0
  3. data/README.md +277 -0
  4. data/bin/rwinrm +90 -0
  5. data/lib/winrm/connection.rb +84 -0
  6. data/lib/winrm/connection_opts.rb +92 -0
  7. data/lib/winrm/exceptions.rb +88 -0
  8. data/lib/winrm/http/response_handler.rb +127 -0
  9. data/lib/winrm/http/transport.rb +466 -0
  10. data/lib/winrm/http/transport_factory.rb +64 -0
  11. data/lib/winrm/output.rb +58 -0
  12. data/lib/winrm/psrp/create_pipeline.xml.erb +167 -0
  13. data/lib/winrm/psrp/fragment.rb +68 -0
  14. data/lib/winrm/psrp/init_runspace_pool.xml.erb +224 -0
  15. data/lib/winrm/psrp/message.rb +128 -0
  16. data/lib/winrm/psrp/message_data/base.rb +47 -0
  17. data/lib/winrm/psrp/message_data/error_record.rb +68 -0
  18. data/lib/winrm/psrp/message_data/pipeline_host_call.rb +30 -0
  19. data/lib/winrm/psrp/message_data/pipeline_output.rb +48 -0
  20. data/lib/winrm/psrp/message_data/pipeline_state.rb +38 -0
  21. data/lib/winrm/psrp/message_data/runspacepool_host_call.rb +30 -0
  22. data/lib/winrm/psrp/message_data/runspacepool_state.rb +37 -0
  23. data/lib/winrm/psrp/message_data/session_capability.rb +34 -0
  24. data/lib/winrm/psrp/message_data.rb +40 -0
  25. data/lib/winrm/psrp/message_defragmenter.rb +62 -0
  26. data/lib/winrm/psrp/message_factory.rb +86 -0
  27. data/lib/winrm/psrp/message_fragmenter.rb +58 -0
  28. data/lib/winrm/psrp/powershell_output_decoder.rb +142 -0
  29. data/lib/winrm/psrp/receive_response_reader.rb +95 -0
  30. data/lib/winrm/psrp/session_capability.xml.erb +7 -0
  31. data/lib/winrm/psrp/uuid.rb +39 -0
  32. data/lib/winrm/shells/base.rb +192 -0
  33. data/lib/winrm/shells/cmd.rb +59 -0
  34. data/lib/winrm/shells/power_shell.rb +202 -0
  35. data/lib/winrm/shells/retryable.rb +44 -0
  36. data/lib/winrm/shells/shell_factory.rb +56 -0
  37. data/lib/winrm/version.rb +5 -0
  38. data/lib/winrm/wsmv/base.rb +57 -0
  39. data/lib/winrm/wsmv/cleanup_command.rb +60 -0
  40. data/lib/winrm/wsmv/close_shell.rb +49 -0
  41. data/lib/winrm/wsmv/command.rb +100 -0
  42. data/lib/winrm/wsmv/command_output.rb +75 -0
  43. data/lib/winrm/wsmv/command_output_decoder.rb +54 -0
  44. data/lib/winrm/wsmv/configuration.rb +44 -0
  45. data/lib/winrm/wsmv/create_pipeline.rb +64 -0
  46. data/lib/winrm/wsmv/create_shell.rb +115 -0
  47. data/lib/winrm/wsmv/header.rb +213 -0
  48. data/lib/winrm/wsmv/init_runspace_pool.rb +96 -0
  49. data/lib/winrm/wsmv/iso8601_duration.rb +58 -0
  50. data/lib/winrm/wsmv/keep_alive.rb +66 -0
  51. data/lib/winrm/wsmv/receive_response_reader.rb +128 -0
  52. data/lib/winrm/wsmv/send_data.rb +66 -0
  53. data/lib/winrm/wsmv/soap.rb +49 -0
  54. data/lib/winrm/wsmv/wql_pull.rb +54 -0
  55. data/lib/winrm/wsmv/wql_query.rb +98 -0
  56. data/lib/winrm/wsmv/write_stdin.rb +86 -0
  57. data/lib/winrm.rb +37 -0
  58. metadata +333 -0
@@ -0,0 +1,167 @@
1
+ <Obj RefId="0">
2
+ <MS>
3
+ <Obj N="PowerShell" RefId="1">
4
+ <MS>
5
+ <Obj N="Cmds" RefId="2">
6
+ <TN RefId="0">
7
+ <T>System.Collections.Generic.List`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]</T>
8
+ <T>System.Object</T>
9
+ </TN>
10
+ <LST>
11
+ <Obj RefId="3">
12
+ <MS>
13
+ <S N="Cmd">Invoke-expression</S>
14
+ <B N="IsScript">false</B>
15
+ <Nil N="UseLocalScope" />
16
+ <Obj N="MergeMyResult" RefId="4">
17
+ <TN RefId="1">
18
+ <T>System.Management.Automation.Runspaces.PipelineResultTypes</T>
19
+ <T>System.Enum</T>
20
+ <T>System.ValueType</T>
21
+ <T>System.Object</T>
22
+ </TN>
23
+ <ToString>None</ToString>
24
+ <I32>0</I32>
25
+ </Obj>
26
+ <Obj N="MergeToResult" RefId="5">
27
+ <TNRef RefId="1" />
28
+ <ToString>None</ToString>
29
+ <I32>0</I32>
30
+ </Obj>
31
+ <Obj N="MergePreviousResults" RefId="6">
32
+ <TNRef RefId="1" />
33
+ <ToString>None</ToString>
34
+ <I32>0</I32>
35
+ </Obj>
36
+ <Obj N="MergeError" RefId="7">
37
+ <TNRef RefId="1" />
38
+ <ToString>None</ToString>
39
+ <I32>0</I32>
40
+ </Obj>
41
+ <Obj N="MergeWarning" RefId="8">
42
+ <TNRef RefId="1" />
43
+ <ToString>None</ToString>
44
+ <I32>0</I32>
45
+ </Obj>
46
+ <Obj N="MergeVerbose" RefId="9">
47
+ <TNRef RefId="1" />
48
+ <ToString>None</ToString>
49
+ <I32>0</I32>
50
+ </Obj>
51
+ <Obj N="MergeDebug" RefId="10">
52
+ <TNRef RefId="1" />
53
+ <ToString>None</ToString>
54
+ <I32>0</I32>
55
+ </Obj>
56
+ <Obj N="Args" RefId="11">
57
+ <TNRef RefId="0" />
58
+ <LST>
59
+ <Obj RefId="12">
60
+ <MS>
61
+ <S N="N">-Command</S>
62
+ <Nil N="V" />
63
+ </MS>
64
+ </Obj>
65
+ <Obj RefId="13">
66
+ <MS>
67
+ <Nil N="N" />
68
+ <S N="V"><%= command %></S>
69
+ </MS>
70
+ </Obj>
71
+ </LST>
72
+ </Obj>
73
+ </MS>
74
+ </Obj>
75
+ <Obj RefId="14">
76
+ <MS>
77
+ <S N="Cmd">Out-string</S>
78
+ <B N="IsScript">false</B>
79
+ <Nil N="UseLocalScope" />
80
+ <Obj N="MergeMyResult" RefId="15">
81
+ <TNRef RefId="1" />
82
+ <ToString>None</ToString>
83
+ <I32>0</I32>
84
+ </Obj>
85
+ <Obj N="MergeToResult" RefId="16">
86
+ <TNRef RefId="1" />
87
+ <ToString>None</ToString>
88
+ <I32>0</I32>
89
+ </Obj>
90
+ <Obj N="MergePreviousResults" RefId="17">
91
+ <TNRef RefId="1" />
92
+ <ToString>None</ToString>
93
+ <I32>0</I32>
94
+ </Obj>
95
+ <Obj N="MergeError" RefId="18">
96
+ <TNRef RefId="1" />
97
+ <ToString>None</ToString>
98
+ <I32>0</I32>
99
+ </Obj>
100
+ <Obj N="MergeWarning" RefId="19">
101
+ <TNRef RefId="1" />
102
+ <ToString>None</ToString>
103
+ <I32>0</I32>
104
+ </Obj>
105
+ <Obj N="MergeVerbose" RefId="20">
106
+ <TNRef RefId="1" />
107
+ <ToString>None</ToString>
108
+ <I32>0</I32>
109
+ </Obj>
110
+ <Obj N="MergeDebug" RefId="21">
111
+ <TNRef RefId="1" />
112
+ <ToString>None</ToString>
113
+ <I32>0</I32>
114
+ </Obj>
115
+ <Obj N="Args" RefId="22">
116
+ <TNRef RefId="0" />
117
+ <LST>
118
+ <Obj RefId="22">
119
+ <MS>
120
+ <S N="N">-Stream</S>
121
+ <Nil N="V" />
122
+ </MS>
123
+ </Obj>
124
+ </LST>
125
+ </Obj>
126
+ </MS>
127
+ </Obj>
128
+ </LST>
129
+ </Obj>
130
+ <B N="IsNested">false</B>
131
+ <Nil N="History" />
132
+ <B N="RedirectShellErrorOutputPipe">true</B>
133
+ </MS>
134
+ </Obj>
135
+ <B N="NoInput">true</B>
136
+ <Obj N="ApartmentState" RefId="23">
137
+ <TN RefId="2">
138
+ <T>System.Threading.ApartmentState</T>
139
+ <T>System.Enum</T>
140
+ <T>System.ValueType</T>
141
+ <T>System.Object</T>
142
+ </TN>
143
+ <ToString>Unknown</ToString>
144
+ <I32>2</I32>
145
+ </Obj>
146
+ <Obj N="RemoteStreamOptions" RefId="24">
147
+ <TN RefId="3">
148
+ <T>System.Management.Automation.RemoteStreamOptions</T>
149
+ <T>System.Enum</T>
150
+ <T>System.ValueType</T>
151
+ <T>System.Object</T>
152
+ </TN>
153
+ <ToString>0</ToString>
154
+ <I32>0</I32>
155
+ </Obj>
156
+ <B N="AddToHistory">true</B>
157
+ <Obj N="HostInfo" RefId="25">
158
+ <MS>
159
+ <B N="_isHostNull">true</B>
160
+ <B N="_isHostUINull">true</B>
161
+ <B N="_isHostRawUINull">true</B>
162
+ <B N="_useRunspaceHost">true</B>
163
+ </MS>
164
+ </Obj>
165
+ <B N="IsNested">false</B>
166
+ </MS>
167
+ </Obj>
@@ -0,0 +1,68 @@
1
+ # Copyright 2016 Matt Wrock <matt@mattwrock.com>
2
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the 'License');
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an 'AS IS' BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ module WinRM
17
+ # PowerShell Remoting Protcol module
18
+ module PSRP
19
+ # PowerShell Remoting Protocol message fragment.
20
+ class Fragment
21
+ # Creates a new PSRP message fragment
22
+ # @param object_id [Integer] The id of the fragmented message.
23
+ # @param blob [Array] Array of fragmented bytes.
24
+ # @param fragment_id [Integer] The id of this fragment
25
+ # @param start_fragment [Boolean] If the fragment is the first fragment
26
+ # @param end_fragment [Boolean] If the fragment is the last fragment
27
+ def initialize(object_id, blob, fragment_id = 0, start_fragment = true, end_fragment = true)
28
+ @object_id = object_id
29
+ @blob = blob
30
+ @fragment_id = fragment_id
31
+ @start_fragment = start_fragment
32
+ @end_fragment = end_fragment
33
+ end
34
+
35
+ attr_reader :object_id, :fragment_id, :end_fragment, :start_fragment, :blob
36
+
37
+ # Returns the raw PSRP message bytes ready for transfer to Windows inside a
38
+ # WinRM message.
39
+ # @return [Array<Byte>] Unencoded raw byte array of the PSRP message.
40
+ def bytes
41
+ [
42
+ int64be(object_id),
43
+ int64be(fragment_id),
44
+ end_start_fragment,
45
+ int16be(blob.length),
46
+ blob
47
+ ].flatten
48
+ end
49
+
50
+ private
51
+
52
+ def end_start_fragment
53
+ end_start = 0
54
+ end_start += 0b10 if end_fragment
55
+ end_start += 0b1 if start_fragment
56
+ [end_start]
57
+ end
58
+
59
+ def int64be(int64)
60
+ [int64 >> 32, int64 & 0x00000000ffffffff].pack('N2').unpack('C8')
61
+ end
62
+
63
+ def int16be(int16)
64
+ [int16].pack('N').unpack('C4')
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,224 @@
1
+ <Obj RefId="0">
2
+ <MS>
3
+ <I32 N="MinRunspaces">1</I32>
4
+ <I32 N="MaxRunspaces">1</I32>
5
+ <Obj N="PSThreadOptions" RefId="1">
6
+ <TN RefId="0">
7
+ <T>System.Management.Automation.Runspaces.PSThreadOptions</T>
8
+ <T>System.Enum</T>
9
+ <T>System.ValueType</T>
10
+ <T>System.Object</T>
11
+ </TN>
12
+ <ToString>Default</ToString>
13
+ <I32>0</I32>
14
+ </Obj>
15
+ <Obj N="ApartmentState" RefId="2">
16
+ <TN RefId="1">
17
+ <T>System.Threading.ApartmentState</T>
18
+ <T>System.Enum</T>
19
+ <T>System.ValueType</T>
20
+ <T>System.Object</T>
21
+ </TN>
22
+ <ToString>Unknown</ToString>
23
+ <I32>2</I32>
24
+ </Obj>
25
+ <Obj N="ApplicationArguments" RefId="3">
26
+ <TN RefId="2">
27
+ <T>System.Management.Automation.PSPrimitiveDictionary</T>
28
+ <T>System.Collections.Hashtable</T>
29
+ <T>System.Object</T>
30
+ </TN>
31
+ <DCT>
32
+ <En>
33
+ <S N="Key">PSVersionTable</S>
34
+ <Obj N="Value" RefId="4">
35
+ <TNRef RefId="2" />
36
+ <DCT>
37
+ <En>
38
+ <S N="Key">PSVersion</S>
39
+ <Version N="Value">5.0.11082.1000</Version>
40
+ </En>
41
+ <En>
42
+ <S N="Key">PSCompatibleVersions</S>
43
+ <Obj N="Value" RefId="5">
44
+ <TN RefId="3">
45
+ <T>System.Version[]</T>
46
+ <T>System.Array</T>
47
+ <T>System.Object</T>
48
+ </TN>
49
+ <LST>
50
+ <Version>1.0</Version>
51
+ <Version>2.0</Version>
52
+ <Version>3.0</Version>
53
+ <Version>4.0</Version>
54
+ <Version>5.0.11082.1000</Version>
55
+ </LST>
56
+ </Obj>
57
+ </En>
58
+ <En>
59
+ <S N="Key">CLRVersion</S>
60
+ <Version N="Value">4.0.30319.42000</Version>
61
+ </En>
62
+ <En>
63
+ <S N="Key">BuildVersion</S>
64
+ <Version N="Value">10.0.11082.1000</Version>
65
+ </En>
66
+ <En>
67
+ <S N="Key">WSManStackVersion</S>
68
+ <Version N="Value">3.0</Version>
69
+ </En>
70
+ <En>
71
+ <S N="Key">PSRemotingProtocolVersion</S>
72
+ <Version N="Value">2.3</Version>
73
+ </En>
74
+ <En>
75
+ <S N="Key">SerializationVersion</S>
76
+ <Version N="Value">1.1.0.1</Version>
77
+ </En>
78
+ </DCT>
79
+ </Obj>
80
+ </En>
81
+ </DCT>
82
+ </Obj>
83
+ <Obj N="HostInfo" RefId="6">
84
+ <MS>
85
+ <Obj N="_hostDefaultData" RefId="7">
86
+ <MS>
87
+ <Obj N="data" RefId="8">
88
+ <TN RefId="4">
89
+ <T>System.Collections.Hashtable</T>
90
+ <T>System.Object</T>
91
+ </TN>
92
+ <DCT>
93
+ <En>
94
+ <I32 N="Key">9</I32>
95
+ <Obj N="Value" RefId="9">
96
+ <MS>
97
+ <S N="T">System.String</S>
98
+ <S N="V">C:\dev\kitchen-vagrant</S>
99
+ </MS>
100
+ </Obj>
101
+ </En>
102
+ <En>
103
+ <I32 N="Key">8</I32>
104
+ <Obj N="Value" RefId="10">
105
+ <MS>
106
+ <S N="T">System.Management.Automation.Host.Size</S>
107
+ <Obj N="V" RefId="11">
108
+ <MS>
109
+ <I32 N="width">199</I32>
110
+ <I32 N="height">52</I32>
111
+ </MS>
112
+ </Obj>
113
+ </MS>
114
+ </Obj>
115
+ </En>
116
+ <En>
117
+ <I32 N="Key">7</I32>
118
+ <Obj N="Value" RefId="12">
119
+ <MS>
120
+ <S N="T">System.Management.Automation.Host.Size</S>
121
+ <Obj N="V" RefId="13">
122
+ <MS>
123
+ <I32 N="width">80</I32>
124
+ <I32 N="height">52</I32>
125
+ </MS>
126
+ </Obj>
127
+ </MS>
128
+ </Obj>
129
+ </En>
130
+ <En>
131
+ <I32 N="Key">6</I32>
132
+ <Obj N="Value" RefId="14">
133
+ <MS>
134
+ <S N="T">System.Management.Automation.Host.Size</S>
135
+ <Obj N="V" RefId="15">
136
+ <MS>
137
+ <I32 N="width">80</I32>
138
+ <I32 N="height">25</I32>
139
+ </MS>
140
+ </Obj>
141
+ </MS>
142
+ </Obj>
143
+ </En>
144
+ <En>
145
+ <I32 N="Key">5</I32>
146
+ <Obj N="Value" RefId="16">
147
+ <MS>
148
+ <S N="T">System.Management.Automation.Host.Size</S>
149
+ <Obj N="V" RefId="17">
150
+ <MS>
151
+ <I32 N="width">250</I32>
152
+ <I32 N="height">9999</I32>
153
+ </MS>
154
+ </Obj>
155
+ </MS>
156
+ </Obj>
157
+ </En>
158
+ <En>
159
+ <I32 N="Key">4</I32>
160
+ <Obj N="Value" RefId="18">
161
+ <MS>
162
+ <S N="T">System.Int32</S>
163
+ <I32 N="V">25</I32>
164
+ </MS>
165
+ </Obj>
166
+ </En>
167
+ <En>
168
+ <I32 N="Key">3</I32>
169
+ <Obj N="Value" RefId="19">
170
+ <MS>
171
+ <S N="T">System.Management.Automation.Host.Coordinates</S>
172
+ <Obj N="V" RefId="20">
173
+ <MS>
174
+ <I32 N="x">0</I32>
175
+ <I32 N="y">9974</I32>
176
+ </MS>
177
+ </Obj>
178
+ </MS>
179
+ </Obj>
180
+ </En>
181
+ <En>
182
+ <I32 N="Key">2</I32>
183
+ <Obj N="Value" RefId="21">
184
+ <MS>
185
+ <S N="T">System.Management.Automation.Host.Coordinates</S>
186
+ <Obj N="V" RefId="22">
187
+ <MS>
188
+ <I32 N="x">0</I32>
189
+ <I32 N="y">9998</I32>
190
+ </MS>
191
+ </Obj>
192
+ </MS>
193
+ </Obj>
194
+ </En>
195
+ <En>
196
+ <I32 N="Key">1</I32>
197
+ <Obj N="Value" RefId="23">
198
+ <MS>
199
+ <S N="T">System.ConsoleColor</S>
200
+ <I32 N="V">0</I32>
201
+ </MS>
202
+ </Obj>
203
+ </En>
204
+ <En>
205
+ <I32 N="Key">0</I32>
206
+ <Obj N="Value" RefId="24">
207
+ <MS>
208
+ <S N="T">System.ConsoleColor</S>
209
+ <I32 N="V">7</I32>
210
+ </MS>
211
+ </Obj>
212
+ </En>
213
+ </DCT>
214
+ </Obj>
215
+ </MS>
216
+ </Obj>
217
+ <B N="_isHostNull">false</B>
218
+ <B N="_isHostUINull">false</B>
219
+ <B N="_isHostRawUINull">false</B>
220
+ <B N="_useRunspaceHost">false</B>
221
+ </MS>
222
+ </Obj>
223
+ </MS>
224
+ </Obj>
@@ -0,0 +1,128 @@
1
+ # Copyright 2015 Matt Wrock <matt@mattwrock.com>
2
+ # Copyright 2016 Shawn Neal <sneal@sneal.net>
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the 'License');
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an 'AS IS' BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require_relative 'uuid'
17
+ require_relative 'message_data'
18
+
19
+ module WinRM
20
+ # PowerShell Remoting Protcol module
21
+ module PSRP
22
+ # PowerShell Remoting Protocol base message.
23
+ # http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PSRP%5D.pdf
24
+ class Message
25
+ include UUID
26
+
27
+ # Value of message destination when sent to a client
28
+ CLIENT_DESTINATION = 1
29
+
30
+ # Value of message destination when sent to a server
31
+ SERVER_DESTINATION = 2
32
+
33
+ # All known PSRP message types
34
+ MESSAGE_TYPES = {
35
+ session_capability: 0x00010002,
36
+ init_runspacepool: 0x00010004,
37
+ public_key: 0x00010005,
38
+ encrypted_session_key: 0x00010006,
39
+ public_key_request: 0x00010007,
40
+ connect_runspacepool: 0x00010008,
41
+ runspace_init_data: 0x0002100b,
42
+ reset_runspace_state: 0x0002100c,
43
+ set_max_runspaces: 0x00021002,
44
+ set_min_runspaces: 0x00021003,
45
+ runspace_availability: 0x00021004,
46
+ runspacepool_state: 0x00021005,
47
+ create_pipeline: 0x00021006,
48
+ get_available_runspaces: 0x00021007,
49
+ user_event: 0x00021008,
50
+ application_private_data: 0x00021009,
51
+ get_command_metadata: 0x0002100a,
52
+ runspacepool_host_call: 0x00021100,
53
+ runspacepool_host_response: 0x00021101,
54
+ pipeline_input: 0x00041002,
55
+ end_of_pipeline_input: 0x00041003,
56
+ pipeline_output: 0x00041004,
57
+ error_record: 0x00041005,
58
+ pipeline_state: 0x00041006,
59
+ debug_record: 0x00041007,
60
+ verbose_record: 0x00041008,
61
+ warning_record: 0x00041009,
62
+ progress_record: 0x00041010,
63
+ information_record: 0x00041011,
64
+ pipeline_host_call: 0x00041100,
65
+ pipeline_host_response: 0x00041101
66
+ }.freeze
67
+
68
+ # Creates a new PSRP message instance
69
+ # @param runspace_pool_id [String] The UUID of the remote shell/runspace pool.
70
+ # @param pipeline_id [String] The UUID to correlate the command/pipeline response
71
+ # @param type [Integer] The PSRP MessageType. This is most commonly
72
+ # specified in hex, e.g. 0x00010002.
73
+ # @param data [String] The PSRP payload as serialized XML
74
+ # @param destination [Integer] The destination for this message - client or server
75
+ def initialize(
76
+ runspace_pool_id,
77
+ type,
78
+ data,
79
+ pipeline_id = nil,
80
+ destination = SERVER_DESTINATION
81
+ )
82
+ raise 'invalid message type' unless MESSAGE_TYPES.value?(type)
83
+
84
+ @data = data
85
+ @destination = destination
86
+ @type = type
87
+ @pipeline_id = pipeline_id
88
+ @runspace_pool_id = runspace_pool_id
89
+ end
90
+
91
+ attr_reader :destination, :type, :runspace_pool_id, :pipeline_id, :data
92
+
93
+ # Returns the raw PSRP message bytes ready for transfer to Windows inside a
94
+ # WinRM message.
95
+ # @return [Array<Byte>] Unencoded raw byte array of the PSRP message.
96
+ def bytes
97
+ [
98
+ int16le(destination),
99
+ int16le(type),
100
+ uuid_to_windows_guid_bytes(runspace_pool_id),
101
+ uuid_to_windows_guid_bytes(pipeline_id),
102
+ byte_order_mark,
103
+ data_bytes
104
+ ].flatten
105
+ end
106
+
107
+ # Parses the raw data to a MessageData class
108
+ # @return [MessageData::Base] MessageData corresponding to this message type
109
+ def parsed_data
110
+ @parsed_data ||= MessageData.parse(self)
111
+ end
112
+
113
+ private
114
+
115
+ def byte_order_mark
116
+ [239, 187, 191]
117
+ end
118
+
119
+ def data_bytes
120
+ @data_bytes ||= data.force_encoding('utf-8').bytes
121
+ end
122
+
123
+ def int16le(int16)
124
+ [int16].pack('N').unpack('C4').reverse
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,47 @@
1
+ # Copyright 2016 Matt Wrock <matt@mattwrock.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the 'License');
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an 'AS IS' BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'nori'
16
+
17
+ module WinRM
18
+ # PowerShell Remoting Protcol module
19
+ module PSRP
20
+ # PowerShell Remoting Protocol message data.
21
+ module MessageData
22
+ # base class for message data
23
+ class Base
24
+ def initialize(data)
25
+ @raw = data
26
+ end
27
+
28
+ # @return [String] raw message data
29
+ attr_reader :raw
30
+
31
+ protected
32
+
33
+ def clixml
34
+ @clixml ||= begin
35
+ parser = Nori.new(
36
+ parser: :rexml,
37
+ advanced_typecasting: false,
38
+ convert_tags_to: ->(tag) { tag.snakecase.to_sym },
39
+ strip_namespaces: true
40
+ )
41
+ parser.parse(raw)[:obj][:ms]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end