93 lines
3.0 KiB
Ruby
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
|