Files

Class/Module Index [+]

Quicksearch

Chef::Provider::PowershellScript

Public Class Methods

new(new_resource, run_context) click to toggle source
# File lib/chef/provider/powershell_script.rb, line 58
def initialize (new_resource, run_context)
  super(new_resource, run_context, '.ps1')
  normalize_script_exit_status(new_resource.code)
end

Public Instance Methods

flags() click to toggle source
# File lib/chef/provider/powershell_script.rb, line 63
def flags
  default_flags = [
    "-NoLogo",
    "-NonInteractive",
    "-NoProfile",
    "-ExecutionPolicy RemoteSigned",
    # 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",
    # Must use -File rather than -Command to launch the script
    # file created by the base class that contains the script
    # code -- otherwise, powershell.exe does not propagate the
    # error status of a failed Windows process that ran at the
    # end of the script, it gets changed to '1'.
    "-File"
  ]

  interpreter_flags = default_flags.join(' ')

  if ! (@new_resource.flags.nil?)
    interpreter_flags = [@new_resource.flags, interpreter_flags].join(' ')
  end

  interpreter_flags
end

Protected Instance Methods

normalize_script_exit_status( code ) click to toggle source

Process exit codes are strange with PowerShell. Unless you explicitly call exit in Powershell, the powershell.exe interpreter returns only 0 for success or 1 for failure. Since we’d like to get specific exit codes from executable tools run with Powershell, we do some work using the automatic variables $? and $LASTEXITCODE to return the process exit code of the last process run in the script if it is the last command executed, otherwise 0 or 1 based on whether $? is set to true (success, where we return 0) or false (where we return 1).

# File lib/chef/provider/powershell_script.rb, line 39
def normalize_script_exit_status( code )
  target_code = ( EXIT_STATUS_EXCEPTION_HANDLER +
                  EXIT_STATUS_RESET_SCRIPT +
                  "\n" +
                  code.to_s +
                  EXIT_STATUS_NORMALIZATION_SCRIPT )
  convert_boolean_return = @new_resource.convert_boolean_return
  @code = new-variable -name interpolatedexitcode -visibility private -value $#{convert_boolean_return}new-variable -name chefscriptresult -visibility private$chefscriptresult = {#{target_code}}.invokereturnasis()if ($interpolatedexitcode -and $chefscriptresult.gettype().name -eq 'boolean') { exit [int32](!$chefscriptresult) } else { exit 0 }
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.