Я использую DSC-модуль msutter для марионетки. При чтении через исходный код, я сталкиваюсь код, как это (в dsc_configuration_provider.rb):Где определена функция рубинов «powershell»?
def create
Puppet.debug "\n" + ps_script_content('set')
output = powershell(ps_script_content('set'))
Puppet.debug output
end
Что файл определяет 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? Я дал текстовый вывод или просто код ошибки? и т. д.
'provider.commands: = PowerShell>«somepath «Я заставляю думать, что здесь есть какая-то маска' method_missing'. – Linuxios
Спасибо за предложение этой линии запроса. Забыл о method_missing. –
Несомненно. Многие любительские библиотеки Ruby используют такую магию. – Linuxios