class Specinfra::Backend::Winrm

Public Instance Methods

os_info() click to toggle source
# File lib/specinfra/backend/winrm.rb, line 6
def os_info
  { :family => 'windows', :release => nil, :arch => nil }
end
run_command(cmd, opts={}) click to toggle source
# File lib/specinfra/backend/winrm.rb, line 10
def run_command(cmd, opts={})
  script = create_script(cmd)
  winrm = get_config(:winrm)

  stdout, stderr = ''
  exitcode = 0

  if Gem.loaded_specs['winrm'].version < Gem::Version.create('2.0')
    # Use winrm V1 API
    result = winrm.powershell(script)
    stdout, stderr = [:stdout, :stderr].map do |s|
      result[:data].select {|item| item.key? s}.map {|item| item[s]}.join
    end
    exitcode = result[:exitcode]
  else
    # Use winrm V2 API
    winrm.shell(:powershell) do |shell|
      result = shell.run(script)
      stdout = result.stdout.to_s
      stderr = result.stderr.to_s
      exitcode = result.exitcode
    end
  end

  exitcode = 1 if exitcode == 0 and !stderr.empty?

  if @example
    @example.metadata[:command] = script
    @example.metadata[:stdout]  = stdout + stderr
  end

  CommandResult.new :stdout => stdout, :stderr => stderr, :exit_status => exitcode
end