2017-04-18 56 views
1

我期待多臺機器關閉進程並重新啓動一個.bat文件(我正在腳本化Windows)。它只適用於第一臺機器。使用Ruby進行Windows命令行腳本編寫。 #each循環意外行爲

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 
+0

您是否收到錯誤消息?如果是這樣,你得到了什麼錯誤信息? –

+0

沒有錯誤信息。它只是不會關閉應用程序,或者在第一次啓動我的計劃任務時使用。它從來沒有去拯救過。 –

+0

嘗試在循環中放置一個'puts節點'並確保所有節點都被循環。 –

回答

0

固定它:

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