Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby编写Windows命令行脚本#每个循环的行为都出人意料_Ruby_Windows - Fatal编程技术网

使用Ruby编写Windows命令行脚本#每个循环的行为都出人意料

使用Ruby编写Windows命令行脚本#每个循环的行为都出人意料,ruby,windows,Ruby,Windows,我希望多台计算机关闭进程并重新启动.bat文件(我正在编写Windows脚本)。它只适用于第一台计算机 nodes = (1234..1235).to_a nodes.map! { |node| "pc" + node.to_s } apps_to_close = ["iexplore.exe", "powershell.exe", "ruby.exe", "chrome.exe", "cmd.exe", "taskhost.exe", "git.exe", "git-tfs.exe"]

我希望多台计算机关闭进程并重新启动
.bat
文件(我正在编写Windows脚本)。它只适用于第一台计算机

nodes = (1234..1235).to_a
nodes.map! { |node| "pc" + node.to_s }
apps_to_close = ["iexplore.exe", "powershell.exe", "ruby.exe", "chrome.exe", 
  "cmd.exe", "taskhost.exe", "git.exe", "git-tfs.exe"]

def process_node(apps_to_close, node)
  begin
     apps_to_close.each do |app|
      `taskkill.exe /S #{node} /U joe_user /P joe_pass /IM #{app} /F`
    end
     `@powershell cmdkey.exe /add:#{node} /user:joe_user /pass:joe_pass; 
      schtasks /RUN /TN "start_my_sched_task" /s "#{node}"`
  rescue
    puts "#{node} could not be restarted"
  end
end

nodes.each do |node|
  process_node(apps_to_close, node)
end
修正了它:

nodes = (1234..1235).to_a
nodes.map! { |node| "pc" + node.to_s }
apps_to_close = ["iexplore.exe", "powershell.exe", "ruby.exe", "chrome.exe", 
  "cmd.exe", "taskhost.exe", "git.exe", "git-tfs.exe"]

def process_node(apps_to_close, node)
  begin
     apps_to_close.each do |app|
      `taskkill.exe /S #{node} /U joe_user /P joe_pass /IM #{app} /F`
    end
     Process.spawn("@powershell cmdkey.exe /add:#{node} /user:joe_user /pass:joe_pass; 
      schtasks /RUN /TN \"start_my_sched_task\" /s \"#{node}\"")
  rescue
    puts "#{node} could not be restarted"
  end
end

nodes.each do |node|
  process_node(apps_to_close, node)
end
修正了它:

nodes = (1234..1235).to_a
nodes.map! { |node| "pc" + node.to_s }
apps_to_close = ["iexplore.exe", "powershell.exe", "ruby.exe", "chrome.exe", 
  "cmd.exe", "taskhost.exe", "git.exe", "git-tfs.exe"]

def process_node(apps_to_close, node)
  begin
     apps_to_close.each do |app|
      `taskkill.exe /S #{node} /U joe_user /P joe_pass /IM #{app} /F`
    end
     Process.spawn("@powershell cmdkey.exe /add:#{node} /user:joe_user /pass:joe_pass; 
      schtasks /RUN /TN \"start_my_sched_task\" /s \"#{node}\"")
  rescue
    puts "#{node} could not be restarted"
  end
end

nodes.each do |node|
  process_node(apps_to_close, node)
end

您是否收到错误消息?如果是,您收到了什么错误消息?没有错误消息。它只是不关闭应用程序,也不启动任何电脑的预定任务。它也不会起到解救作用。尝试将
节点放入循环中,并确保所有节点都在循环中。您需要获得某种类型的错误,否则无法知道这里出了什么问题。您可以从停止这些丑陋的反勾式命令执行开始,并将其替换为
system('taskill.exe','S',node',/U','joe_user',…)
,您可以在其中捕获该命令的结果。您还可以使用捕获任何可能相关的诊断输出。我确实有一个版本带有
popen3
。它试图在营救过程中打印stderr。从来没有。我没有执行
放置节点
,但我进行了调试。它只通过了第一个节点。是否收到错误消息?如果是,您收到了什么错误消息?没有错误消息。它只是不关闭应用程序,也不启动任何电脑的预定任务。它也不会起到解救作用。尝试将
节点放入循环中,并确保所有节点都在循环中。您需要获得某种类型的错误,否则无法知道这里出了什么问题。您可以从停止这些丑陋的反勾式命令执行开始,并将其替换为
system('taskill.exe','S',node',/U','joe_user',…)
,您可以在其中捕获该命令的结果。您还可以使用捕获任何可能相关的诊断输出。我确实有一个版本带有
popen3
。它试图在营救过程中打印stderr。从来没有。我没有执行
放置节点
,但我进行了调试。它只通过了第一个节点。