Як я можу встановити .NET 4.5.2 через PowerShell DSC?


15

Я можу встановити .NET Framework 4.5 на Windows Server 2012 R2 за допомогою PowerShell DSC через ресурс WindowsFeature та функцію NET-Framework-45-Core. Моє запитання полягає в тому, як я можу використовувати PowerShell DSC для встановлення .NET 4.5.2?


Ви в кінцевому підсумку використовували для цього DSC чи щось інше?
Стівен Лійкенс

Chocolatey має інсталятор 4.5.2, який також заснований на PowerShell. Чи проводили ви дослідження за допомогою DSC з Chocolatey? chocolatey.org/packages/DotNet4.5.2
Стівен Лікенс

Відповіді:


12

Не впевнений, чи цього все-таки вимагає ОП, але недавно у мене був такий самий виклик, і я виявив багато проблем із самим інсталятором, коли намагався використовувати лише ресурс пакета на сервері R2 2012 року. Закінчилося, щоб написати ресурс сценарію та використовувати веб-інсталятор, оскільки повний пакет не вдається розпакувати з дуже загальною помилкою.

У будь-якому випадку, ось робочий ресурс сценарію, з яким я закінчив:

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

Чудова відповідь, такий підхід працює і для .net 4.6.1. Я спробував різноманітні існуючі інтеграції DSC (шоколадний, cDotNetInstaller тощо), і всі вони не вдалися з інсталятором 4.6.1. Це перший, який працював. Кудос.
лебедя

Домовились; приємна відповідь. Хочу зазначити, що це також працює через шеф-кухаря та dsc_scriptресурсу.
Джейсон Капріотті

Я також підтвердив, що це працює з .net 4.7, з NetBuildVersion = 461310 та захопленням download.microsoft.com/download/A/E/A/…
JohnnyFun

2

Відповідно до цієї статті Microsoft Technet , назва функції, яку потрібно встановити, повинна бути такою, як результат результату команди Get-WindowsFeature . Таким чином, якщо .NET 4.5.2 не відображається у списку, ви не можете забезпечити його встановлення через DSC.

Назва Позначає назву ролі чи функції, яку ви хочете переконатися, додані або видалені. Це те саме, що властивість Name з командлету Get-WindowsFeature, а не відображуване ім'я ролі чи функції.

Тож я думаю, вам доведеться встановити основну версію через DCS (4.5), а потім з’ясувати найкраще рішення для її оновлення до 4.5.2.


Здається, це досить великий нагляд. Новий PowerShell DSC може встановлювати програмне забезпечення, як нове, як два з половиною роки!
Марк

1
Це не недогляд. Виконання .NET 4.5.2 не є функцією Windows, тому його неможливо встановити за допомогою ресурсу WindowsFeature. Він доступний або через оновлення Windows, або як окреме завантаження. Сценарій повинен буде завантажити та виконати відповідний інсталятор.
Панайотис Канавос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.