Làm cách nào tôi có thể cài đặt .NET 4.5.2 qua PowerShell DSC?


15

Tôi có thể cài đặt .NET Framework 4.5 trên Windows Server 2012 R2 bằng PowerShell DSC thông qua tài nguyên WindowsFeature và tính năng NET-Framework-45-Core. Câu hỏi của tôi là, làm cách nào để sử dụng PowerShell DSC để đảm bảo .NET 4.5.2 được cài đặt?


Bạn đã kết thúc việc sử dụng DSC cho cái này, hay cái gì khác?
Steven Liekens

Chocolatey có trình cài đặt cho 4.5.2, cũng dựa trên PowerShell. Bạn đã điều tra bằng cách sử dụng DSC với Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Câu trả lời:


12

Không chắc chắn nếu điều này vẫn được OP yêu cầu, nhưng tôi đã gặp thử thách chính xác gần đây và thấy nhiều vấn đề với chính trình cài đặt, khi cố gắng chỉ sử dụng tài nguyên gói trên Máy chủ 2012 R2. Cuối cùng phải viết một tài nguyên tập lệnh và sử dụng trình cài đặt web làm gói đầy đủ không giải nén được với một lỗi rất chung chung.

Dù sao, đây là một tài nguyên kịch bản làm việc mà tôi đã kết thúc với:

Configuration Net452Install
{
    node "localhost"
    {

        LocalConfigurationManager
        {
            RebootNodeIfNeeded = $true
        }

        Script Install_Net_4.5.2
        {
            SetScript = {
                $SourceURI = "https://download.microsoft.com/download/B/4/1/B4119C11-0423-477B-80EE-7A474314B347/NDP452-KB2901954-Web.exe"
                $FileName = $SourceURI.Split('/')[-1]
                $BinPath = Join-Path $env:SystemRoot -ChildPath "Temp\$FileName"

                if (!(Test-Path $BinPath))
                {
                    Invoke-Webrequest -Uri $SourceURI -OutFile $BinPath
                }

                write-verbose "Installing .Net 4.5.2 from $BinPath"
                write-verbose "Executing $binpath /q /norestart"
                Sleep 5
                Start-Process -FilePath $BinPath -ArgumentList "/q /norestart" -Wait -NoNewWindow            
                Sleep 5
                Write-Verbose "Setting DSCMachineStatus to reboot server after DSC run is completed"
                $global:DSCMachineStatus = 1
            }

            TestScript = {
                [int]$NetBuildVersion = 379893

                if (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | %{$_ -match 'Release'})
                {
                    [int]$CurrentRelease = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release
                    if ($CurrentRelease -lt $NetBuildVersion)
                    {
                        Write-Verbose "Current .Net build version is less than 4.5.2 ($CurrentRelease)"
                        return $false
                    }
                    else
                    {
                        Write-Verbose "Current .Net build version is the same as or higher than 4.5.2 ($CurrentRelease)"
                        return $true
                    }
                }
                else
                {
                    Write-Verbose ".Net build version not recognised"
                    return $false
                }
            }

            GetScript = {
                if (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | %{$_ -match 'Release'})
                {
                    $NetBuildVersion =  (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release
                    return $NetBuildVersion
                }
                else
                {
                    Write-Verbose ".Net build version not recognised"
                    return ".Net 4.5.2 not found"
                }
            }
        }
    }
}

Net452Install -OutputPath $env:SystemDrive:\DSCconfig
Set-DscLocalConfigurationManager -ComputerName localhost -Path $env:SystemDrive\DSCconfig -Verbose
Start-DscConfiguration -ComputerName localhost -Path $env:SystemDrive:\DSCconfig -Verbose -Wait -Force

Câu trả lời tuyệt vời, cách tiếp cận này cũng hoạt động cho .net 4.6.1. Tôi đã thử một loạt các tích hợp DSC hiện có (chocolatey, cDotNetInstaller, v.v ...) và tất cả đều thất bại với trình cài đặt 4.6.1. Đây là cái đầu tiên hoạt động. Thanh danh.
swannee

Đã đồng ý; câu trả lời tốt đẹp Tôi muốn đề cập đến điều này cũng hoạt động thông qua Chef và dsc_scripttài nguyên.
Jason Capriotti

Tôi cũng đã xác nhận điều này hoạt động với .net 4.7, với NetBuildVersion = 461310 và lấy download.microsoft.com/doad/A/E/A/
trộm

2

Theo bài viết Microsoft Technet này , tên của tính năng cần cài đặt phải là một từ kết quả của lệnh Get-WindowsFeature . Do đó, nếu .NET 4.5.2 không xuất hiện trong danh sách, bạn không thể đảm bảo nó được cài đặt qua DSC.

Tên Cho biết tên của vai trò hoặc tính năng mà bạn muốn đảm bảo được thêm hoặc xóa. Đây là giống như thuộc tính Name từ lệnh ghép ngắn Get-WindowsFeature và không phải là tên hiển thị của vai trò hoặc tính năng.

Vì vậy, tôi đoán bạn sẽ phải cài đặt phiên bản chính qua DCS (4.5), và sau đó tìm ra giải pháp tốt nhất để cập nhật lên 4.5.2.


Có vẻ như một giám sát khá lớn. PowerShell DSC mới có thể cài đặt phần mềm mới như hai năm rưỡi!
Đánh dấu

1
Đó không phải là một sự giám sát. Thời gian chạy .NET 4.5.2 không phải là Tính năng của Windows, vì vậy không thể cài đặt nó bằng tài nguyên WindowsFeature. Nó có sẵn thông qua Windows Update hoặc dưới dạng tải xuống riêng biệt. Kịch bản sẽ phải tải xuống và thực thi trình cài đặt thích hợp.
Panagiotis Kanavos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.