Як я можу встановити .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.