使用Ansible在Windows上执行.exe

时间:2015-01-09 14:03:03

标签: windows ansible

我们希望在带有Ansible 1.8.2的Windows Server 2012上部署应用程序。

我搜索并找到了适用于Windows的a list模块。是否有一个模块来执行.exe?

有人已经在Windows上使用Ansible启动了.exe吗?

5 个答案:

答案 0 :(得分:7)

文档说'注意还有一些其他Ansible模块不以“win”开头也有功能,包括“slurp”,“raw”和“setup”(这是事实收集的方式)作品)' (http://docs.ansible.com/intro_windows.html),所以我会认为原始的'模块(http://docs.ansible.com/raw_module.html)应该工作(我目前没有可用的Windows VM):

所以请尝试使用以下剧本:

- raw: <your .exe>

或Ansible adhoc命令:

 ansible <your server> -m raw -a '<your .exe>'

答案 1 :(得分:5)

<bean id="annotationResolver" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> <context:component-scan base-package="com.nexis.cardholder" /> <mvc:annotation-driven > </mvc:annotation-driven> <mvc:default-servlet-handler /> <mvc:interceptors> <bean class="com.nexis.cardholder.session.interceptors.URLInterceptor" /> </mvc:interceptors> <mvc:resources mapping="/resources/**" location="/resources/" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/Pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> <property name="order" value="1" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" > <property name="order" value="2" /> </bean> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> <property name="order" value="0" /> </bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/views.xml</value> </list> </property> </bean> 模块可以正常工作,正如其他人所建议的那样。一个挑战是它不会知道&#34;如果可执行文件之前已经运行过。结合raw模块和win_stat条件,您可以构建一个脚本来检测是否已安装某些内容并在未安装时运行。例如,我想安装MSBuild development tools

when

请注意,我通过手动运行

找到了BuildTools_Full.exe的命令行参数
- name: Check to see if MSBuild is installed
  win_stat: path='C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe'
  register: msbuild_installed
- name: Download MS Build Tools 2013
  win_get_url:
    url: 'http://download.microsoft.com/download/9/B/B/9BB1309E-1A8F-4A47-72A3B3/BuildTools_Full.exe'
    dest: 'c:\temp\BuildTools_Full.exe'
  when: not msbuild_installed.stat.exists
- name: Install MS Build Tools 2013
  raw: 'c:\temp\BuildTools_Full.exe /Quiet /NoRestart /Full'
  when: not msbuild_installed.stat.exists

答案 2 :(得分:3)

另一种方式(和模块)首先不那么明显:win_service modulewin_nssm module结合。

正如sfuqua已经提到的那样,大部分时间你都想知道应用程序的“状态” - 例如如果它已经安装,正在运行,停止等等。因此Windows service的概念是一个非常好的解决方案。通过Non-Sucking Service Manager (nssm)

的使用,很容易获得这样的服务

使用Ansible win_nssm module这是一个很小的步骤:

  - name: Install & start application as Windows service (via nssm)
    win_nssm:
      name: "your_app_name"
      application: "{{path_to_your_apps_exe}}"
      state: restarted

现在我们有一个真正的Windows服务,可以在win_service module的帮助下操纵状态,就像我们习惯于在Linux上运行的应用程序一样:

  - name: Control app Windows service
    win_service:
      name: "your_app_name"
      state: stopped

这种方法使我们无需使用原始模块(它具有一些缺点,例如禁用变更处理程序支持)以及为这个简单任务编写和维护脚本的麻烦。

答案 3 :(得分:2)

如上所述[{3}},您可以使用here。但是,如果您需要运行交互式.exe,则可能需要通过win_command运行它。一个示例Playbook可以如下所示:

Protocol

答案 4 :(得分:0)

我已用psexec解决了这个问题

在剧本中

- name: test raw module
  hosts: Windows
  gather_facts: false
  tasks:
    - name: Stop process 01
      script: startProcess.ps1

和startProcess.ps1

#Creating the credential for the invoke-command.
$strScriptUser = "COMPUTERNAME\USer"
$strPass = "PASSWORD"
$PSS = ConvertTo-SecureString $strPass -AsPlainText -Force
$cred = new-object system.management.automation.PSCredential $strScriptUser,$PSS

#Invoke-Command to call the psexec to start the application.

invoke-command -Computer "." -Scriptblock {
c:\AnsibleTest\ps\psexec.exe -accepteula  -d -h -i 1 -u COMPUTERNAME\USER -p PASSWORD PATH_TO_THE_EXE\PROGRAM.EXE
}  -Credential $cred

您需要在远程PC中安装psexec。切换psexec