Comment installer .NET 4.5.2 via PowerShell DSC?

15

Je peux installer .NET Framework 4.5 sur Windows Server 2012 R2 à l'aide de PowerShell DSC via la ressource WindowsFeature et la fonctionnalité NET-Framework-45-Core. Ma question est la suivante: comment utiliser PowerShell DSC pour m'assurer que .NET 4.5.2 est installé?

marque
la source
Avez-vous fini par utiliser DSC pour cela, ou autre chose?
Steven Liekens
Chocolatey a un programme d'installation pour 4.5.2, qui est également basé sur PowerShell. Avez-vous étudié l'utilisation de DSC avec Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Réponses:

12

Je ne sais pas si cela est toujours requis par l'OP, mais j'ai eu exactement le même défi récemment et j'ai trouvé de nombreux problèmes avec le programme d'installation lui-même, lorsque j'essayais d'utiliser uniquement la ressource de package sur un serveur 2012 R2. A fini par avoir à écrire une ressource de script et à utiliser l'installateur Web car le package complet n'arrêtait pas de décompresser avec une erreur très générique.

Quoi qu'il en soit, voici une ressource de script de travail avec laquelle je me suis retrouvé:

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
la source
Excellente réponse, cette approche fonctionne également pour .net 4.6.1. J'ai essayé une variété d'intégrations DSC existantes (chocolatey, cDotNetInstaller, etc ...) et elles ont toutes échoué avec le programme d'installation 4.6.1. Ceci est le premier qui a fonctionné. Gloire.
swannee
D'accord; Bonne réponse. Je tiens à mentionner que cela fonctionne également via Chef et la dsc_scriptressource.
Jason Capriotti
J'ai également confirmé que cela fonctionne avec .net 4.7, avec NetBuildVersion = 461310 et en saisissant download.microsoft.com/download/A/E/A/…
JohnnyFun
2

Selon cet article de Microsoft Technet , le nom de la fonctionnalité à installer doit être un du résultat de la commande Get-WindowsFeature . Ainsi, si .NET 4.5.2 n'apparaît pas dans la liste, vous ne pouvez pas vous assurer qu'il est installé via DSC.

Nom Indique le nom du rôle ou de la fonctionnalité dont vous souhaitez vous assurer qu'il est ajouté ou supprimé. Il s'agit de la même propriété que la propriété Name de l'applet de commande Get-WindowsFeature, et non du nom complet du rôle ou de la fonctionnalité.

Je suppose donc que vous devrez installer la version principale via DCS (4.5), puis trouver la meilleure solution pour la mettre à jour en 4.5.2.

Ob1lan
la source
On dirait un oubli assez important. Le nouveau PowerShell DSC peut installer des logiciels aussi récents que deux ans et demi!
Mark
1
Ce n'est pas un oubli. Le runtime .NET 4.5.2 n'est pas une fonctionnalité Windows, il ne peut donc pas être installé à l'aide de la ressource WindowsFeature. Il est disponible via Windows Update ou en téléchargement séparé. Le script devra télécharger et exécuter le programme d'installation approprié.
Panagiotis Kanavos