module Win32::Certstore::Mixin::ShellExec

Public Instance Methods

powershell_exec(*command_args) click to toggle source

Run a command under powershell with the same API as shell_out. The options hash is extended to take an “architecture” flag which can be set to :i386 or :x86_64 to force the windows architecture.

@param script [String] script to run @param options [Hash] options hash @return [Mixlib::Shellout] mixlib-shellout object

# File lib/win32/certstore/mixin/shell_exec.rb, line 42
def powershell_exec(*command_args)
  script = command_args.first
  options = command_args.last.is_a?(Hash) ? command_args.last : nil

  run_command_with_os_architecture(script, options)
end
powershell_exec!(*command_args) click to toggle source

Run a command under powershell with the same API as shell_out! (raises exceptions on errors)

@param script [String] script to run @param options [Hash] options hash @return [Mixlib::Shellout] mixlib-shellout object

# File lib/win32/certstore/mixin/shell_exec.rb, line 55
def powershell_exec!(*command_args)
  cmd = powershell_exec(*command_args)
  cmd.error!
  cmd
end
shell_out_command(*command_args) click to toggle source
# File lib/win32/certstore/mixin/shell_exec.rb, line 24
def shell_out_command(*command_args)
  cmd = Mixlib::ShellOut.new(*command_args)
  cmd.live_stream
  cmd.run_command
  if cmd.error!
    raise Mixlib::ShellOut::ShellCommandFailed, cmd.error!
  end

  cmd
end

Private Instance Methods

build_powershell_command(script) click to toggle source

Helper to build a powershell command around the script to run.

@param script [String] script to run @return [String] powershell command to execute

# File lib/win32/certstore/mixin/shell_exec.rb, line 84
def build_powershell_command(script)
  flags = [
    # Hides the copyright banner at startup.
    "-NoLogo",
    # Does not present an interactive prompt to the user.
    "-NonInteractive",
    # Does not load the Windows PowerShell profile.
    "-NoProfile",
    # always set the ExecutionPolicy flag
    # see http://technet.microsoft.com/en-us/library/ee176961.aspx
    "-ExecutionPolicy Unrestricted",
    # Powershell will hang if STDIN is redirected
    # http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
    "-InputFormat None",
  ]

  "powershell.exe #{flags.join(" ")} -Command \"#{script.gsub('"', '\"')}\""
end
run_command_with_os_architecture(script, options) click to toggle source

Helper function to run shell_out and wrap it with the correct flags to possibly disable WOW64 redirection (which we often need because chef-client runs as a 32-bit app on 64-bit windows).

@param script [String] script to run @param options [Hash] options hash @return [Mixlib::Shellout] mixlib-shellout object

# File lib/win32/certstore/mixin/shell_exec.rb, line 70
def run_command_with_os_architecture(script, options)
  options ||= {}
  options = options.dup

  shell_out_command(
    build_powershell_command(script),
    options
  )
end