Class: Train::Transports::Local::Connection::WindowsShellRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/train/transports/local.rb

Instance Method Summary collapse

Constructor Details

#initialize(powershell_cmd = "powershell") ⇒ WindowsShellRunner

Returns a new instance of WindowsShellRunner.



142
143
144
# File 'lib/train/transports/local.rb', line 142

def initialize(powershell_cmd = "powershell")
  @powershell_cmd = powershell_cmd
end

Instance Method Details

#closeObject



166
167
168
# File 'lib/train/transports/local.rb', line 166

def close
  # nothing to do at the moment
end

#run_command(script, opts) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/train/transports/local.rb', line 146

def run_command(script, opts)
  # Prevent progress stream from leaking into stderr
  script = "$ProgressPreference='SilentlyContinue';" + script

  # Encode script so PowerShell can use it
  script = script.encode("UTF-16LE", "UTF-8")
  base64_script = Base64.strict_encode64(script)

  cmd = "#{@powershell_cmd} -NoProfile -EncodedCommand #{base64_script}"

  res = Mixlib::ShellOut.new(cmd)
  res.timeout = opts[:timeout]
  begin
    res.run_command
  rescue Mixlib::ShellOut::CommandTimeout
    raise Train::CommandTimeoutReached
  end
  Local::CommandResult.new(res.stdout, res.stderr, res.exitstatus)
end