
Puedo instalar .NET Framework 4.5 en Windows Server 2012 R2 usando PowerShell DSC a través del recurso WindowsFeature y la función NET-Framework-45-Core. Mi pregunta es, ¿cómo uso PowerShell DSC para asegurarme de que .NET 4.5.2 esté instalado?
Respuesta1
No estoy seguro de si el OP todavía lo requiere, pero recientemente tuve exactamente el mismo desafío y encontré muchos problemas con el instalador en sí al intentar usar solo el recurso del paquete en un servidor 2012 R2. Terminé teniendo que escribir un recurso de script y usar el instalador web ya que el paquete completo no se podía descomprimir con un error muy genérico.
De todos modos, aquí hay un recurso de script funcional con el que terminé:
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
Respuesta2
De acuerdo aeste artículo de Microsoft Technet, el nombre de la característica a instalar debe ser uno de losObtener-WindowsCaracterísticaresultado del comando. Por lo tanto, si .NET 4.5.2 no aparece en la lista, no puede asegurarse de que esté instalado mediante DSC.
NombreIndica el nombre de la función o característica que desea garantizar que se agregue o elimine. Es lo mismo que la propiedad Nombre del cmdlet Get-WindowsFeature y no el nombre para mostrar de la función o característica.
Supongo que tendrás que instalar la versión principal a través de DCS (4.5) y luego encontrar la mejor solución para actualizarla a 4.5.2.