2017-01-24 151 views
0

我正在尝试使用Ansible来安装.Net Framework 4.6.1,但直到现在我还没有运气。使用Ansible安装.Net Framework 4.6.1

我已经试过这些方法:

  1. 运行win_package安装它,但它只是挂起,直到无穷

    - name: Install Microsoft NET Framework 
        win_package: 
        path: "http://path/to/dotNetFramework4.6.1.exe" 
        product_id: '{BD6F5371-DAC1-30F0-9DDE-CAC6791E28C3}' 
        register: dotnetfx_exe 
    
  2. 运行PowerShell脚本进行安装(第一个没有按” t工作和第二次堆栈溢出异常):

    Install-WindowsFeature Net-Framework-Core -source C:\temp\dotNetFramework4.6.1.exe 
    

    Start-Process -FilePath C:\temp\dotNetFramework4.6.1.exe -ArgumentList "/q /norestart" -Wait -Verb RunAs 
    
  3. 我试过用win_feature来安装它,但它什么都不做。

    - name: Install NET-Framework-Core 
        win_feature: 
        name: NET-Framework-Core 
        state: present 
        source: C:\temp\dotNetFramework4.6.1.exe 
        include_sub_features: no 
        include_management_tools: yes 
        register: result 
    
  4. 试图运行一个批处理脚本来安装它,但没有运气:

    start /wait c:\temp\dotNetFramework4.6.1.exe /q /norestart /log %TEMP%\dotNetFx4.6.1.log 
    

有没有人成功安装.Net框架4.6.1使用Ansible?

任何人都可以分享他们安装它的任务/角色吗?

回答

0

如何使用巧克力?它有DotNet4.6.1包,所以:

- win_chocolatey: 
    name: dotnet4.6.1 

或者如果你喜欢主持人接受的version,加version: 4.6.01055.001

+0

但巧克力味使用外部链接,和我有只使用内部链接。有没有办法告诉巧克力使用JFrog Artifactory? – Adamba4

+0

@ Adamba4然后,你必须坐下来等待,直到有人引导你的手,因为当OP回复“but”时,这是我的宠儿之一,然后抱怨答案不符合他忘记指定的需要在问题中。 – techraf

+0

这就是我在尝试使用巧克力安装时所得到的: dotnet4.6.1未安装。安装期间发生错误:抛出了类型为'System.OutOfMemoryException'的异常 – Adamba4

0

似乎问题出在WinRM上。
有一个处理它的hotfix,并且在安装修补程序后,一切工作正常。

0

第一种方式是正确的,但你必须确定无声控制台按键安装

- name: Install Microsoft NET Framework 
    win_package: 
    path: "http://path/to/dotNetFramework4.6.1.exe" 
    product_id: '{BD6F5371-DAC1-30F0-9DDE-CAC6791E28C3}' 
    register: dotnetfx_exe 
    arguments: /q /norestart 

其他问题,我无法修复是win_package不支持自动PRODUCT_ID,这是休息幂等性,这一步每次都运行。

1

我们通过Ansible调用Chocolatey来安装.NET 4.6.1,但遇到了一些问题。相反,我重写了我们的手册以进行“本机”安装。我想你遇到了与尝试运行脱机安装程序相同的问题。这导致我到你的文章和this thread。这是我必须做的才能让它工作。

提取离线安装程序的内容:

NDP461-KB3102436-x86-x64-AllOS-ENU.exe /s /x /b"C:\tmp\dotnet\dotnet461" /v"/qn" 

此命令可以卸载.NET如果已经安装了它。我只是在一个新的流浪虚拟机上运行它,而不是试图解决这个问题。

压缩该文件夹的内容,将其上传到内部主机或网络共享,然后使用您的Playbook下载/解压缩/运行它。

- name: Download Microsoft .NET Framework 4.6.1 installer 
    win_get_url: 
     url: http://www.path.to/package/dotnet461.zip 
     dest: C:\tmp\dotnet\dotnet461.zip 

    - name: Unzip Microsoft .NET Framework 4.6.1 installer 
    win_unzip: 
     src: C:\tmp\dotnet\dotnet461.zip 
     dest: C:\tmp\dotnet 
     rm: true 

    - name: Run Microsoft .NET Framework 4.6.1 installer 
    raw: C:\tmp\dotnet\dotnet461\Setup.exe /q /norestart /log C:\tmp\dotnet\dotnet461\log.txt /x86 /x64 /redist 
    register: dotnet_install 

    - name: Reboot as required by Microsoft .NET Framework 4.6.1 installer 
    win_reboot: 

安装命令中的参数很重要,否则安装程序将失败。你也许可以删除“/ log C:\ tmp \ dotnet \ dotnet461 \ log.txt”,但我会留给你测试一下:D

这也不是幂等的。安装程序将每次执行。您可以通过将这些任务放在单独的.yml文件中并根据注册表检查来执行条件包含来查看它是否已安装。

像这样:

- name: Check for current Microsoft .NET Framework 4 version 
    win_reg_stat: 
     path: HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 
     name: Version 
    register: dotnet_version 

    - name: Install Microsoft .NET Framework 4.6.1 
    include: install_dotnet.yml 
    when: dotnet_version.value | version_compare('4.6.01', '<', strict=True)