使用Ansible安装.Net Framework 4.6.1

时间:2017-01-24 17:54:44

标签: .net ansible .net-framework-version

我正在尝试使用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脚本进行安装(首先不起作用,第二次抛出堆栈溢出异常):

    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
    
  5. 是否有人使用Ansible成功安装.Net Framework 4.6.1?

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

5 个答案:

答案 0 :(得分:3)

我们通过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,则此命令可以卸载.NET。我只是在一个新鲜的流浪汉VM上运行它,而不是试图绕过它。

压缩该文件夹的内容,将其上传到内部主机或网络共享,然后使用您的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:

install命令中的参数很重要,否则安装程序将失败。您可以删除“/ 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)

答案 1 :(得分:3)

老问题,但希望这会对某人有所帮助:我一直坚持这个问题,并且想避免使用Chocolatey。我正在配置AWS Windows机器,结果我需要安装热修复KB2919355(需要KB2919442)。

安装两个热修复程序后安装工作,而以前安装.NET只会挂起。

- name: Download Hotfixes
  win_get_url:
    url: "{{ item.url }}"
    dest: "C:/{{ item.kb }}.msu"
  with_items:
    - { kb: KB2919442, url: "https://download.microsoft.com/download/D/6/0/D60ED3E0-93A5-4505-8F6A-8D0A5DA16C8A/Windows8.1-KB2919442-x64.msu" }
    - { kb: KB2919355, url: "https://download.microsoft.com/download/2/5/6/256CCCFB-5341-4A8D-A277-8A81B21A1E35/Windows8.1-KB2919355-x64.msu" }

- name: Install KB2919442 Hotfix
  win_hotfix:
    hotfix_kb: KB2919442
    source: "C:/KB2919442.msu"
  register: hotfix_KB2919442

- name: Install KB2919355 Hotfix
  win_hotfix:
    hotfix_kb: KB2919355
    source: "C:/KB2919355.msu"
  register: hotfix_KB2919355

- name: Remove Hotfix Downloads
  win_file:
    path: "C:/{{ item }}.msu"
    state: absent
  with_items:
    - KB2919442
    - KB2912355

- win_reboot:
  when: hotfix_KB2919442.reboot_required or hotfix_KB2919355.reboot_required

- name: Enable .NET Windows features
  win_feature:
    name: as-net-framework, web-asp-net45
    state: present

- name: Install .NET framework
  win_package:
    path: "https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe"
    product_id: "{BD6F5371-DAC1-30F0-9DDE-CAC6791E28C3}"
    state: present
    arguments: /q /norestart

答案 2 :(得分:2)

第一种方法是正确的,但您必须确定用于静默安装的控制台密钥

 import {
      AngularFire,
      AngularFireAuth
    } from 'angularfire2';

    constructor(public af: AngularFire) {
      this.af.auth.subscribe(auth => {
        console.log(auth)
      }); 
    }

另一个问题,我无法解决的问题是win_package不支持自动product_id,这会打破幂等性,这一步每次都会运行。

答案 3 :(得分:1)

使用Chocolatey怎么样?它有DotNet4.6.1个包,所以:

- win_chocolatey:
    name: dotnet4.6.1

或者如果您更喜欢主持人接受的version,请添加version: 4.6.01055.001

答案 4 :(得分:0)

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