¿Cómo puedo instalar .NET 4.5.2 a través de PowerShell DSC?


15

Puedo instalar .NET Framework 4.5 en Windows Server 2012 R2 usando PowerShell DSC a través del recurso WindowsFeature y la función NET-Framework-45-Core. Mi pregunta es, ¿cómo uso PowerShell DSC para garantizar que .NET 4.5.2 esté instalado?


¿Terminaste usando DSC para esto u otra cosa?
Steven Liekens

Chocolatey tiene un instalador para 4.5.2, que también está basado en PowerShell. ¿Has investigado el uso de DSC con Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Respuestas:


12

No estoy seguro si el OP todavía lo requiere, pero recientemente tuve exactamente el mismo desafío y encontré muchos problemas con el instalador en sí mismo, al intentar usar solo el recurso del paquete en un servidor R2 2012. Terminé teniendo que escribir un recurso de script y usar el instalador web ya que el paquete completo no se descomprimía con un error muy genérico.

De todos modos, aquí hay un recurso de script de trabajo con el que terminé:

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

Gran respuesta, este enfoque también funciona para .net 4.6.1. Probé una variedad de integraciones DSC existentes (chocolatey, cDotNetInstaller, etc.) y todas fallaron con el instalador 4.6.1. Este es el primero que funcionó. Prestigio.
swannee

Convenido; buena respuesta. Quiero mencionar que esto también funciona a través de Chef y el dsc_scriptrecurso.
Jason Capriotti

También confirmó que esto funciona con .net 4.7, con NetBuildVersion = 461310 y agarrando download.microsoft.com/download/A/E/A/…
JohnnyFun

2

Según este artículo de Microsoft Technet , el nombre de la característica a instalar debe ser uno del resultado del comando Get-WindowsFeature . Por lo tanto, si .NET 4.5.2 no aparece en la lista, no puede asegurarse de que esté instalado a través de DSC.

Nombre Indica el nombre de la función o función que desea garantizar que se agregue o elimine. Esto es lo mismo que la propiedad Name del cmdlet Get-WindowsFeature, y no el nombre para mostrar de la función o característica.

Así que supongo que tendrá que instalar la versión principal a través de DCS (4.5), y luego encontrar la mejor solución para actualizarla a 4.5.2.


Parece un descuido bastante importante. ¡El nuevo PowerShell DSC puede instalar software tan nuevo como de dos años y medio!
Mark

1
No es un descuido. El tiempo de ejecución de .NET 4.5.2 no es una característica de Windows, por lo que no se puede instalar con el recurso WindowsFeature. Está disponible a través de Windows Update o como una descarga por separado. El script tendrá que descargar y ejecutar el instalador apropiado.
Panagiotis Kanavos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.