如何通过PowerShell DSC安装.NET 4.5.2?


15

我可以通过WindowsFeature资源和NET-Framework-45-Core功能使用PowerShell DSC在Windows Server 2012 R2上安装.NET Framework 4.5。我的问题是,如何使用PowerShell DSC确保已安装.NET 4.5.2?


您最终还是为此使用DSC还是其他?
Steven Liekens

Chocolatey具有适用于PowerShell的4.5.2安装程序。您是否调查过将DSC与Chocolatey一起使用?Chocolatey.org/packages/DotNet4.5.2
Steven Liekens

Answers:


12

不知道OP是否仍然需要这样做,但是最近我在尝试仅使用2012 R2服务器上的软件包资源时遇到了完全相同的挑战,并且发现安装程序本身存在许多问题。最终不得不编写脚本资源并使用Web安装程序作为完整的软件包,以至于由于非常普通的错误而无法解压缩。

无论如何,这是我最后得到的有效脚本资源:

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集成(chocolatey,cDotNetInstaller等),但都因4.6.1安装程序而失败。这是第一个成功的方法。荣誉
swannee,2016年

同意;好答案。我想提一下,这也可以通过Chef和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安装了它。

名称表示要确保添加或删除的角色或功能的名称。这与Get-WindowsFeature cmdlet的Name属性相同,而不是角色或功能的显示名称。

因此,我想您必须通过DCS(4.5)安装主要版本,然后找出将其更新为4.5.2的最佳解决方案。


似乎是一个相当重大的疏忽。新的PowerShell DSC可以安装长达两年半的新软件!
标记

1
这不是疏忽。.NET 4.5.2运行时不是 Windows功能,因此无法使用WindowsFeature资源进行安装。可通过Windows Update或单独下载获得。该脚本将必须下载并执行适当的安装程序。
Panagiotis Kanavos,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.