Bagaimana saya bisa menginstal .NET 4.5.2 melalui PowerShell DSC?

15

Saya dapat menginstal .NET Framework 4.5 di Windows Server 2012 R2 menggunakan PowerShell DSC melalui sumber daya WindowsFeature dan fitur NET-Framework-45-Core. Pertanyaan saya adalah, bagaimana cara menggunakan PowerShell DSC untuk memastikan bahwa .NET 4.5.2 diinstal?

Menandai
sumber
Apakah Anda akhirnya menggunakan DSC untuk ini, atau yang lain?
Steven Liekens
Chocolatey memiliki installer untuk 4.5.2, yang juga berbasis PowerShell. Sudahkah Anda menyelidiki menggunakan DSC dengan Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Jawaban:

12

Tidak yakin apakah ini masih diperlukan oleh OP, tetapi saya memiliki tantangan yang sama baru-baru ini dan menemukan banyak masalah dengan installer itu sendiri, ketika mencoba menggunakan hanya paket sumber daya pada Server R2 R2 2012. Akhirnya harus menulis sumber skrip dan menggunakan penginstal web sebagai paket lengkap terus gagal untuk dekompresi dengan kesalahan yang sangat umum.

Ngomong-ngomong, ini adalah sumber naskah yang berfungsi yang akhirnya saya dapatkan:

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
leshkin
sumber
Jawaban bagus, pendekatan ini juga berfungsi untuk .net 4.6.1. Saya mencoba berbagai integrasi DSC yang ada (cokelat, cDotNetInstaller, dll ...) dan semuanya gagal dengan installer 4.6.1. Ini yang pertama berhasil. Pujian.
Swansea
Sepakat; jawaban bagus. Saya ingin menyebutkan ini juga berfungsi melalui Chef dan dsc_scriptsumber daya.
Jason Capriotti
Saya juga menegaskan karya ini dengan .net 4.7, dengan NetBuildVersion = 461.310 dan meraih download.microsoft.com/download/A/E/A/...
JohnnyFun
2

Menurut artikel Microsoft Technet ini , nama fitur untuk menginstal harus salah satu dari hasil perintah Get-WindowsFeature . Jadi, jika .NET 4.5.2 tidak muncul dalam daftar, Anda tidak dapat memastikan itu diinstal melalui DSC.

Nama Menunjukkan nama peran atau fitur yang ingin Anda pastikan ditambahkan atau dihapus. Ini sama dengan properti Name dari cmdlet Get-WindowsFeature, dan bukan nama tampilan dari peran atau fitur.

Jadi saya kira Anda harus menginstal versi utama melalui DCS (4.5), dan kemudian mencari solusi terbaik untuk memperbaruinya ke 4.5.2.

Ob1lan
sumber
Sepertinya pengawasan yang cukup besar. PowerShell DSC baru dapat menginstal perangkat lunak yang baru berusia dua setengah tahun!
Tandai
1
Itu bukan kekhilafan. .NET 4.5.2 runtime bukan Fitur Windows, jadi tidak dapat diinstal menggunakan sumber daya WindowsFeature. Ini tersedia baik melalui Pembaruan Windows atau sebagai unduhan terpisah. Skrip harus mengunduh dan menjalankan penginstal yang sesuai.
Panagiotis Kanavos