.NET 4.5.2'yi PowerShell DSC aracılığıyla nasıl yükleyebilirim?


15

Windows Server 2012 R2 üzerinde .NET Framework 4.5'i, WindowsFeature kaynağı ve NET-Framework-45-Core özelliği aracılığıyla PowerShell DSC kullanarak yükleyebilirim. Benim sorum, .NET 4.5.2'nin yüklü olduğundan emin olmak için PowerShell DSC'yi nasıl kullanırım?


Bunun için DSC veya başka bir şey kullandınız mı?
Steven Liekens

Chocolatey, PowerShell tabanlı 4.5.2 için bir yükleyiciye sahiptir. Chocolatey ile DSC kullanarak araştırma yaptınız mı? chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Yanıtlar:


12

Bunun hala OP tarafından gerekli olup olmadığından emin değilim, ancak son zamanlarda aynı zorluğu yaşadım ve 2012 R2 Sunucusunda sadece paket kaynağını kullanmaya çalışırken yükleyicinin kendisiyle ilgili birçok sorun buldum. Komut dosyası kaynağı yazmak ve tam paket çok genel bir hatayla açılmayı sürdürdüğü için web yükleyicisini kullanmak zorunda kaldı.

Her neyse, işte sonunda bulduğum çalışan bir script kaynağı:

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

Harika yanıt, bu yaklaşım aynı zamanda .net 4.6.1 için de geçerlidir. Çeşitli mevcut DSC entegrasyonlarını denedim (chocolatey, cDotNetInstaller, vb ...) ve hepsi 4.6.1 yükleyicisiyle başarısız oldu. İlk çalışan bu oldu. Kudos.
swannee

Kabul; güzel cevap. Bunun Şef ve dsc_scriptkaynak aracılığıyla da işe yaradığını belirtmek istiyorum .
Jason Capriotti

Ben de bunun NetBuildVersion = 461310 ile ve .net 4.7 ile çalıştığını ve download.microsoft.com/download/A/E/A/…
JohnnyFun

2

Göre bu Microsoft TechNet makalesinde , yüklemeye özelliğin adı birini olmalıdır Get-WindowsFeature komutunun sonucu. Bu nedenle, .NET 4.5.2 listede görünmüyorsa, DSC aracılığıyla yüklendiğinden emin olamazsınız.

Ad Eklendiğinden veya kaldırıldığından emin olmak istediğiniz rolün veya özelliğin adını belirtir. Bu, rol veya özelliğin görünen adı değil, Get-WindowsFeature cmdlet'indeki Name özelliğiyle aynıdır.

Bu nedenle, büyük sürümü DCS (4.5) aracılığıyla yüklemeniz ve ardından 4.5.2'ye güncellemek için en iyi çözümü bulmanız gerekeceğini tahmin ediyorum.


Oldukça büyük bir gözetim gibi görünüyor. Yeni PowerShell DSC, iki buçuk yaşında yeni bir yazılım yükleyebilir!
Mark

1
Bu bir gözetim değil. .NET 4.5.2 çalışma zamanı bir Windows Özelliği değildir , bu nedenle WindowsFeature kaynağı kullanılarak yüklenemez. Windows Update aracılığıyla veya ayrı bir indirme olarak kullanılabilir. Komut dosyasının uygun yükleyiciyi indirmesi ve yürütmesi gerekir.
Panagiotis Kanavos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.