使用 Ansible 安装 .Net Framework 4.6.1

Ada*_*ba4 3 .net .net-framework-version ansible

我正在尝试使用 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行 PowerShell 脚本来安装它(第一个不起作用,第二个抛出堆栈溢出异常):

    Install-WindowsFeature Net-Framework-Core -source C:\temp\dotNetFramework4.6.1.exe
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    Start-Process -FilePath C:\temp\dotNetFramework4.6.1.exe -ArgumentList "/q /norestart" -Wait -Verb RunAs
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 试图运行一个批处理脚本来安装它,但没有运气:

    start /wait c:\temp\dotNetFramework4.6.1.exe /q /norestart /log %TEMP%\dotNetFx4.6.1.log
    
    Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

我们通过 Ansible 调用 Chocolatey 来安装 .NET 4.6.1,但遇到了一些复杂的问题。相反,我重写了我们的剧本来进行“本机”安装。我想您遇到了与我尝试运行离线安装程序时遇到的相同问题。这让我看到了你的帖子和这个帖子。这是我必须做的才能让它工作。

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

NDP461-KB3102436-x86-x64-AllOS-ENU.exe /s /x /b"C:\tmp\dotnet\dotnet461" /v"/qn"
Run Code Online (Sandbox Code Playgroud)

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

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

  - 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:
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)