Jak mogę zainstalować .NET 4.5.2 poprzez PowerShell DSC?

15

Mogę zainstalować .NET Framework 4.5 na Windows Server 2012 R2 za pomocą PowerShell DSC poprzez zasób WindowsFeature i funkcję NET-Framework-45-Core. Moje pytanie brzmi: jak używać programu PowerShell DSC, aby upewnić się, że .NET 4.5.2 jest zainstalowany?

znak
źródło
Czy użyłeś do tego DSC lub czegoś innego?
Steven Liekens,
Chocolatey ma instalator dla wersji 4.5.2, która jest również oparta na PowerShell. Czy korzystałeś z DSC z Chocolatey? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Odpowiedzi:

12

Nie jestem pewien, czy jest to nadal wymagane przez OP, ale ostatnio miałem dokładnie to samo wyzwanie i znalazłem wiele problemów z samym instalatorem, gdy próbowałem użyć tylko zasobu pakietu na serwerze R2 z 2012 roku. Skończyło się na tym, że musiałem napisać zasób skryptu i skorzystać z instalatora internetowego, ponieważ pełny pakiet nadal nie dekompresował się z bardzo ogólnym błędem.

W każdym razie oto działający zasób skryptu, z którym skończyłem:

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
źródło
Świetna odpowiedź, to podejście działa również dla .net 4.6.1. Próbowałem różnych istniejących integracji DSC (chocolatey, cDotNetInstaller itp.) I wszystkie zakończyły się niepowodzeniem z instalatorem 4.6.1. To pierwszy, który zadziałał. Sława.
swannee
Zgoda; niezła odpowiedź. Chcę wspomnieć, że to działa również przez szefa kuchni i dsc_scriptzasoby.
Jason Capriotti
Potwierdziłem również, że działa z .net 4.7, z NetBuildVersion = 461310 i
pobieram
2

Zgodnie z tym artykułem Microsoft Technet nazwa instalowanej funkcji powinna być taka sama jak wynik polecenia Get-WindowsFeature . Dlatego jeśli .NET 4.5.2 nie pojawia się na liście, nie możesz upewnić się, że jest zainstalowany przez DSC.

Nazwa Wskazuje nazwę roli lub funkcji, które mają zostać dodane lub usunięte. Jest to to samo, co właściwość Name z polecenia cmdlet Get-WindowsFeature, a nie nazwa wyświetlana roli lub funkcji.

Myślę, że będziesz musiał zainstalować główną wersję za pomocą DCS (4.5), a następnie wymyślić najlepsze rozwiązanie, aby zaktualizować ją do wersji 4.5.2.

Ob1lan
źródło
Wydaje się, że to dość duży nadzór. Nowy PowerShell DSC może instalować oprogramowanie tak nowe, jak dwa i pół roku!
Mark
1
To nie jest niedopatrzenie. Środowisko wykonawcze .NET 4.5.2 nie jest funkcją systemu Windows, więc nie można go zainstalować przy użyciu zasobu WindowsFeature. Jest dostępny za pośrednictwem Windows Update lub jako osobny plik do pobrania. Skrypt będzie musiał pobrać i uruchomić odpowiedni instalator.
Panagiotis Kanavos