Module: Beaker::DSL::Wrappers

Included in:
Beaker::DSL, PSWindows::Exec
Defined in:
lib/beaker/dsl/wrappers.rb

Overview

These are wrappers to equivalent Command objects so that command line actions are executed within an appropriate and configurable environment.

I find most of these adapters of suspicious value and have deprecated many of them.

Instance Method Summary collapse

Instance Method Details

#encode_command(cmd) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Convert the provided command string to Base64



82
83
84
85
86
87
88
# File 'lib/beaker/dsl/wrappers.rb', line 82

def encode_command(cmd)
  cmd = cmd.chars.to_a.join("\x00").chomp
  cmd << "\x00" unless cmd[-1].eql? "\x00"
  # use strict_encode because linefeeds are not correctly handled in our model
  cmd = Base64.strict_encode64(cmd).chomp
  cmd
end

#powershell(command, args = {}) ⇒ Command

Returns a Command object for executing powershell commands on a host

Examples:

Setting the contents of a file

powershell("Set-Content -path 'fu.txt' -value 'fu'")

Using an alternative execution policy

powershell("Set-Content -path 'fu.txt' -value 'fu'", {'ExecutionPolicy' => 'Unrestricted'})

Using an EncodedCommand (defaults to non-encoded)

powershell("Set Content -path 'fu.txt', -value 'fu'", {'EncodedCommand => true})

executing from a file

powershell("", {'-File' => '/path/to/file'})


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/beaker/dsl/wrappers.rb', line 39

def powershell(command, args={})
  ps_opts = {
    'ExecutionPolicy' => 'Bypass',
    'InputFormat'     => 'None',
    'NoLogo'          => '',
    'NoProfile'       => '',
    'NonInteractive'  => ''
  }
  encoded = false
  ps_opts.merge!(args)
  ps_args = []

  # determine if the command should be encoded
  if ps_opts.has_key?('EncodedCommand')
    v = ps_opts.delete('EncodedCommand')
    # encode the commend if v is true, nil or empty
    encoded = v || v.eql?('') || v.nil?
  end

  ps_opts.each do |k, v|
    if v.eql?('') or v.nil?
      ps_args << "-#{k}"
    else
      ps_args << "-#{k} #{v}"
    end
  end

  # may not have a command if executing a file
  if command && !command.empty?
    if encoded
      ps_args << "-EncodedCommand #{encode_command(command)}"
    else
      ps_args << "-Command #{command}"
    end
  end

  Command.new("powershell.exe", ps_args)
end