红宝石功能&powershell'在哪里?界定?

时间:2015-04-09 17:12:33

标签: ruby powershell puppet

我正在使用msutter DSC模块进行傀儡。在阅读源代码时,我遇到了这样的代码(在dsc_configuration_provider.rb中):

  def create
    Puppet.debug "\n" + ps_script_content('set')
    output = powershell(ps_script_content('set'))
    Puppet.debug output
  end

什么文件定义了 powershell 函数或方法?它是内置的红宝石吗?内置木偶?从类继承?我知道它用于将文本作为命令发送到powershell并收集结果,但我需要查看源代码以了解如何为我的目的改进其错误日志记录,因为某些PowerShell错误被吞并且没有警告被打印到Puppet日志。

文件dsc_provider_helpers.rb中的这些行可能是相关的:

    provider.commands :powershell =>
    if File.exists?("#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe")
      "#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe"
    elsif File.exists?("#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe")
      "#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe"
    else
      'powershell.exe'
    end

肯定会定义Powershell可执行文件所在的位置,但不会指示如何调用它以及如何派生返回值。 stdout和stderr合并了吗?我给出了文本输出或只是错误代码?等

1 个答案:

答案 0 :(得分:3)

这是核心Puppet逻辑。当提供者有命令时,如

commands :powershell => some binary

将其作为函数powershell(*args)连接起来。

您可以与Chocolatey等其他提供商一起查看:

  commands :chocolatey => chocolatey_command

  def self.chocolatey_command
    if Puppet::Util::Platform.windows?
      # must determine how to get to params in ruby
      #default_location = $chocolatey::params::install_location || ENV['ALLUSERSPROFILE'] + '\chocolatey'
      chocopath = ENV['ChocolateyInstall'] ||
          ('C:\Chocolatey' if File.directory?('C:\Chocolatey')) ||
          ('C:\ProgramData\chocolatey' if File.directory?('C:\ProgramData\chocolatey')) ||
          "#{ENV['ALLUSERSPROFILE']}\chocolatey"

      chocopath += '\bin\choco.exe'
    else
      chocopath = 'choco.exe'
    end

    chocopath
  end

然后其他位置可以像使用args的函数一样调用chocolatey

 chocolatey(*args)