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에는 4.5.2 용 설치 프로그램이 있으며 이는 PowerShell 기반이기도합니다. Chocolatey와 함께 DSC를 사용하여 조사한 적이 있습니까? chocolatey.org/packages/DotNet4.5.2
— Steven Liekens 2016 년

답변:


13

이것이 OP에 여전히 필요한지 확실하지 않지만 최근에 똑같은 문제가 발생하여 2012 R2 서버에서 패키지 리소스 만 사용하려고 할 때 설치 프로그램 자체에서 많은 문제가 발견되었습니다. 스크립트 리소스를 작성하고 웹 설치 프로그램을 전체 패키지가 압축 해제에 실패하여 매우 일반적인 오류로 계속 사용되어야했습니다.

어쨌든, 여기에 내가 끝낸 작업 스크립트 리소스가 있습니다.

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리소스를 통해 작동한다고 언급하고 싶습니다 .
— Jason Capriotti

또한 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는 2 년 반 정도의 새로운 소프트웨어를 설치할 수 있습니다!
— Mark

1
감독이 아닙니다. .NET 4.5.2 런타임은 Windows 기능 이 아니므 로 WindowsFeature 리소스를 사용하여 설치할 수 없습니다. Windows Update 또는 별도의 다운로드로 제공됩니다. 스크립트는 적절한 설치 프로그램을 다운로드하여 실행해야합니다.
— Panagiotis Kanavos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.