Как я могу установить .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.org/packages/DotNet4.5.2
Стивен Лиекенс,

Ответы:

12

Не уверен, требуется ли это для OP, но недавно у меня возникла та же проблема, и я обнаружил много проблем с самим установщиком, когда пытался использовать только ресурс пакета на 2012 R2 Server. Закончилась необходимость написания ресурса сценария и использования веб-установщика, поскольку полный пакет не смог распаковать с очень общей ошибкой.

В любом случае, вот рабочий ресурс сценария, с которым я закончил:

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
источник
Отличный ответ, этот подход также работает для .net 4.6.1. Я перепробовал множество существующих интеграций DSC (chocolatey, 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.

Ob1lan
источник
Похоже, довольно серьезный недосмотр. Новый PowerShell DSC может устанавливать программное обеспечение как два с половиной года!
Марк
1
Это не недосмотр. Среда выполнения .NET 4.5.2 не является компонентом Windows, поэтому ее нельзя установить с помощью ресурса WindowsFeature. Он доступен либо через Центр обновления Windows, либо в виде отдельной загрузки. Сценарий должен будет загрузить и запустить соответствующий установщик.
Панайотис Канавос