ruby - Chef : Create a process as another user

标签 ruby chef-infra win32-process

所以我有一些用于以特定用户身份运行批处理文件的代码。这是我尝试自动化以下语法

runas /user:thisguy "C:\ThisGuysScript.bat"

所以在 Ruby 中看起来像这样

Process.create(:command_line => "C:\\ThisGuysScript.bat ", :domain => "MYServer", :with_logon => "thisguy", :password => "thisguyspassword", :cwd =>“C:\\”)

所以我尝试将其放入 Chef 的 Recipe 中,但灾难袭来了

require 'win32/process'

::Process.create(:command_line => "C:\\ThisGuysScript.bat ", :domain => "MYServer", :with_logon => "thisguy", :password => "thisguyspassword", :cwd =>"C:\\")

因以下错误而失败

[Tue, 30 Oct 2012 15:57:03 +0000] FATAL: ArgumentError: You must supply a name when declaring a user resource

所以它似乎没有意识到我想使用win32风格的进程。 Chef 似乎覆盖了 win32 模块(我知道菜谱是操作码 DSL,而不是真正的 ruby​​,对吗?)

有人能够让这个工作吗?或者相同的功能具有不同的实现。查看了 Windows Recipe ,但没有发现太多

最佳答案

听起来您想制作一个 LWRP 来在 Windows 计算机上创建进程。

您收到的错误意味着您有类似的内容

user do # Missing name
  gid 500
  home "..."
end

正确的语法是

user "apache" do # or whatever the user name should be
   # ...
end

如果您的 Recipe 中没有上述内容,则包含的文件可能有一个名为 user 的变量,这也会导致此问题。

为了回答你的子问题,Chef 是直接的 ruby​​,提供了一些可用的功能和运行事物的框架。请注意, Chef 运行有几个阶段。我认为您在编译阶段遇到了问题。

制定 LWRP 似乎是一条可行的道路。如果你不想走那么远,你可以做类似的事情。

ruby_block "Firing process lazers" do
   require 'win32/process'
   ::Process.create(:command_line => "C:\\ThisGuysScript.bat ", :domain => "MYServer", :with_logon => "thisguy", :password => "thisguyspassword", :cwd =>"C:\\")
end

关于ruby - Chef : Create a process as another user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144130/

相关文章:

ruby - 在 10.6.7 上针对 libpq.a 编译 postgres ruby​​ gem

Ruby 正则表达式组匹配,在 1 行上分配变量

ruby - 简单密码 - 来自 Exercism 的 Ruby

ruby - Chef 传递修订变量以部署资源

chef-infra - Chef solo nginx Recipe 不符合我的属性

c++ - 使用 Windows taskschd.msc 编程 C++ Win32 非控制台应用程序,不工作

c++ - CreateProcess 异常 (kernel32.lib)

ruby - 显示用户年龄

mysql - 使用以下配置设置 vagrant

c# - 从wmi获取每个进程的Cpu使用率