使用Ansible安装.Net Framework 4.6.1

4

我正在尝试使用Ansible安装.NET Framework 4.6.1,但迄今为止没有成功。

我尝试了以下方法:

  1. Running a win_package to install it, but it just hangs till infinity

    - 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. Run a PowerShell script to install it (first doesn't work and second throws stack-overflow exception):

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

    Or

    Start-Process -FilePath C:\temp\dotNetFramework4.6.1.exe -ArgumentList "/q /norestart" -Wait -Verb RunAs
    
  3. I've tried to use win_feature to install it, but it just do nothing.

    - 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. Tried to run a batch script to install it, but no luck:

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

是否有人成功使用Ansible安装了.NET Framework 4.6.1?

能否分享安装它的任务/角色?

5个回答

6
我们之前通过Ansible调用Chocolatey安装.NET 4.6.1,但遇到了一些问题。因此,我重新编写了我们的playbook以进行“本地”安装。我想你也遇到了我在尝试运行离线安装程序时遇到的问题。这让我看到了你发布的帖子和这个主题。以下是使其正常工作所必须进行的操作。

解压离线安装程序的内容:

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

这个命令可以卸载已安装的.NET。我在一个干净的vagrant虚拟机上执行了它,而不是试图绕过它。
将该文件夹的内容压缩成zip文件,上传到内部主机或网络共享,并使用你的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)

5

虽然这个问题比较老,但希望能对某些人有所帮助:我遇到了这个问题很久了,想尽量避免使用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

4
第一种方法是正确的,但您需要确定控制台键以进行静默安装。
- 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,这会破坏幂等性。这一步每次都会运行。


2
使用Chocolatey怎么样?它有DotNet4.6.1包,因此:
- win_chocolatey:
    name: dotnet4.6.1

或者如果您喜欢获得管理员批准的版本, 添加version: 4.6.01055.001

但是chocolatey使用外部链接,而我只能使用内部链接。有办法告诉chocolatey使用JFrog Artifactory吗? - Adamba4
这是我在尝试使用Chocolatey安装时遇到的问题: dotnet4.6.1未安装。安装过程中发生错误:抛出了“System.OutOfMemoryException”类型的异常。 - Adamba4

0

看起来问题出在WinRM上。
有一个热补丁可以解决它,安装了热补丁后一切都正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接