class Formatron::Util::WinRM

Perform commands on chef nodes over WinRM

Public Class Methods

exec( hostname:, administrator_name:, administrator_password:, command: ) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/formatron/util/winrm.rb, line 9
def self.exec(
  hostname:,
  administrator_name:,
  administrator_password:,
  command:
)
  endpoint = "http://#{hostname}:5985/wsman"
  winrm = ::WinRM::WinRMWebService.new(
    endpoint,
    :negotiate,
    user: administrator_name,
    pass: administrator_password
  )
  output = winrm.create_executor do |executor|
    executor.run_powershell_script(command) do |stdout, stderr|
      stdout.each_line do |line|
        Formatron::LOG.info { line.chomp }
      end unless stdout.nil?
      stderr.each_line do |line|
        Formatron::LOG.warn { line.chomp }
      end unless stderr.nil?
    end
  end
  exitcode = output[:exitcode]
  fail(
    "`#{command}` exited with code #{exitcode}"
  ) unless exitcode == 0
end