chef/cookbooks/windows/libraries/powershell_out.rb
2016-02-19 18:09:49 +01:00

93 lines
3.0 KiB
Ruby

#
# WARNING
#
# THIS CODE HAS BEEN MOVED TO CORE CHEF. DO NOT SUMBIT PULL REQUESTS AGAINST THIS
# CODE. IT WILL BE REMOVED IN THE FUTURE.
#
unless defined? Chef::Mixin::PowershellOut
class Chef
module Mixin
module PowershellOut
include Chef::Mixin::ShellOut
begin
include Chef::Mixin::WindowsArchitectureHelper
rescue
# nothing to do, as the include will happen when windows_architecture_helper.rb
# is loaded. This is for ease of removal of that library when either
# powershell_out is core chef or powershell cookbook depends upon version
# of chef that has Chef::Mixin::WindowsArchitectureHelper in core chef
end
def powershell_out(*command_args)
Chef::Log.warn 'The powershell_out library in the windows cookbook is deprecated.'
Chef::Log.warn 'Please upgrade to Chef 12.4.0 or later where it is built-in to core chef.'
script = command_args.first
options = command_args.last.is_a?(Hash) ? command_args.last : nil
run_command(script, options)
end
def powershell_out!(*command_args)
cmd = powershell_out(*command_args)
cmd.error!
cmd
end
private
def run_command(script, options)
if options && options[:architecture]
architecture = options[:architecture]
options.delete(:architecture)
else
architecture = node_windows_architecture(node)
end
disable_redirection = wow64_architecture_override_required?(node, architecture)
if disable_redirection
original_redirection_state = disable_wow64_file_redirection(node)
end
command = build_command(script)
if options
cmd = shell_out(command, options)
else
cmd = shell_out(command)
end
if disable_redirection
restore_wow64_file_redirection(node, original_redirection_state)
end
cmd
end
def build_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 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'
]
command = "powershell.exe #{flags.join(' ')} -Command \"#{script}\""
command
end
end
end
end
end