Come posso installare .NET 4.5.2 tramite PowerShell DSC?


15

Posso installare .NET Framework 4.5 su Windows Server 2012 R2 utilizzando PowerShell DSC tramite la risorsa WindowsFeature e la funzionalità NET-Framework-45-Core. La mia domanda è: come si utilizza PowerShell DSC per assicurarsi che .NET 4.5.2 sia installato?


Hai finito per usare DSC per questo o qualcos'altro?
Steven Liekens,

Chocolatey ha un programma di installazione per 4.5.2, che è anche basato su PowerShell. Hai studiato utilizzando DSC con Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens,

Risposte:


12

Non sono sicuro che ciò sia ancora richiesto dall'OP, ma di recente ho avuto la stessa identica sfida e ho riscontrato molti problemi con il programma di installazione stesso, quando ho provato a utilizzare solo la risorsa del pacchetto su un server R2 2012. Alla fine è stato necessario scrivere una risorsa di script e utilizzare il programma di installazione Web poiché il pacchetto completo non è riuscito a decomprimersi con un errore molto generico.

Comunque, ecco una risorsa di script funzionante con cui ho finito:

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

Ottima risposta, questo approccio funziona anche con .net 4.6.1. Ho provato una varietà di integrazioni DSC esistenti (chocolatey, cDotNetInstaller, ecc ...) e tutte hanno fallito con il programma di installazione 4.6.1. Questo è il primo che ha funzionato. Complimenti.
Swannee,

Concordato; bella risposta. Voglio menzionare che funziona anche attraverso Chef e la dsc_scriptrisorsa.
Jason Capriotti,

Ho anche confermato che funziona con .net 4.7, con NetBuildVersion = 461310 e afferrando download.microsoft.com/download/A/E/A/…
JohnnyFun

2

Secondo questo articolo di Microsoft Technet , il nome della funzionalità da installare dovrebbe essere uno dal risultato del comando Get-WindowsFeature . Pertanto, se .NET 4.5.2 non appare nell'elenco, non è possibile assicurarsi che sia installato tramite DSC.

Nome Indica il nome del ruolo o della funzione che si desidera assicurarsi che venga aggiunto o rimosso. È uguale alla proprietà Name del cmdlet Get-WindowsFeature e non al nome visualizzato del ruolo o della funzionalità.

Quindi suppongo che dovrai installare la versione principale tramite DCS (4.5), e quindi trovare la soluzione migliore per aggiornarla alla 4.5.2.


Sembra una svista abbastanza grande. Il nuovo PowerShell DSC è in grado di installare software nuovo di due anni e mezzo!
Segna

1
Non è una svista. Il runtime .NET 4.5.2 non è una funzionalità di Windows, quindi non può essere installato utilizzando la risorsa WindowsFeature. È disponibile tramite Windows Update o come download separato. Lo script dovrà scaricare ed eseguire il programma di installazione appropriato.
Panagiotis Kanavos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.