ruby函数'powershell'在哪里定义的?

Where is the ruby function 'powershell' defined?

我正在使用木偶的 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 函数或方法?它是 ruby 内置的吗?内置傀儡?继承自class?我知道它被用来将文本作为命令发送到 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 可执行文件的位置,但没有说明它是如何调用的以及它的 return 值是如何派生的。 stdout 和 stderr 合并了吗?我给出的是文本输出还是错误代码?等等

这是 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)