Wie kann ich .NET 4.5.2 über PowerShell DSC installieren?

15

Ich kann .NET Framework 4.5 unter Windows Server 2012 R2 mithilfe von PowerShell DSC über die WindowsFeature-Ressource und die NET-Framework-45-Core-Funktion installieren. Meine Frage ist, wie ich PowerShell DSC verwende, um sicherzustellen, dass .NET 4.5.2 installiert ist.

Kennzeichen
quelle
Haben Sie DSC dafür verwendet oder etwas anderes?
Steven Liekens
Chocolatey hat ein Installationsprogramm für 4.5.2, das ebenfalls auf PowerShell basiert. Haben Sie mit DSC mit Chocolatey nachgeforscht? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Antworten:

12

Ich bin mir nicht sicher, ob dies noch vom OP verlangt wird, aber ich hatte in letzter Zeit genau die gleiche Herausforderung und fand viele Probleme mit dem Installationsprogramm selbst, als ich versuchte, nur die Paketressource auf einem 2012 R2-Server zu verwenden. Es war nicht mehr möglich, eine Skriptressource zu schreiben und das Webinstallationsprogramm zu verwenden, da das gesamte Paket immer wieder mit einem sehr allgemeinen Fehler dekomprimiert werden konnte.

Wie auch immer, hier ist eine funktionierende Skript-Ressource, mit der ich gelandet bin:

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
quelle
Gute Antwort, dieser Ansatz funktioniert auch für .net 4.6.1. Ich habe verschiedene vorhandene DSC-Integrationen ausprobiert (chocolatey, cDotNetInstaller usw.), die alle mit dem 4.6.1-Installationsprogramm fehlgeschlagen sind. Dies ist der erste, der funktioniert hat. Ein dickes Lob.
Swannee
Einverstanden; gute Antwort. Ich möchte erwähnen, dass dies auch durch den Küchenchef und die dsc_scriptRessource funktioniert .
Jason Capriotti
Ich bestätigte auch das funktioniert mit .NET 4.7, mit NetBuildVersion = 461.310 und packen download.microsoft.com/download/A/E/A/...
JohnnyFun
2

Gemäß diesem Microsoft Technet-Artikel sollte der Name der zu installierenden Funktion aus dem Ergebnis des Befehls Get-WindowsFeature stammen. Wenn .NET 4.5.2 nicht in der Liste aufgeführt ist, können Sie daher nicht sicherstellen, dass es über DSC installiert wird.

Name Gibt den Namen der Rolle oder Funktion an, die hinzugefügt oder entfernt werden soll. Dies entspricht der Name-Eigenschaft des Cmdlets Get-WindowsFeature und nicht dem Anzeigenamen der Rolle oder Funktion.

Ich schätze, Sie müssen die Hauptversion über DCS (4.5) installieren und dann die beste Lösung finden, um sie auf 4.5.2 zu aktualisieren.

Ob1lan
quelle
Scheint ein ziemlich großes Versehen zu sein. Mit der neuen PowerShell DSC können Sie Software installieren, die älter als zweieinhalb Jahre ist!
Mark
1
Es ist kein Versehen. Die .NET 4.5.2-Laufzeit ist keine Windows-Funktion, daher kann sie nicht mithilfe der WindowsFeature-Ressource installiert werden. Es ist entweder über Windows Update oder als separater Download verfügbar. Das Skript muss das entsprechende Installationsprogramm herunterladen und ausführen.
Panagiotis Kanavos