Instalación de parches en Windows

Para parchear equipos con de windows podemos usar diversas alternativas

Dentro de un dominio

Lo mejor es utilizar un servidor como WSUS . Configuramos mediante una GPO para indicar el servidor local donde deben de conectarse los clientes y verificamos el acceso de los mismos al servidor por los puerto 8530 y 8531.

Equipos Fuera de un dominio

Si tenemos equipos que no pertenecen al dominio pero queremos que se actualizen desde el servidor WSUS debemos de hacer lo siguiente:

  • Creamos un fichero de texto con el siguiente contenido y lo salvamos con extensión reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
"WUServer"="http://ipservidorwsus:8530"
"WUStatusServer"="ipservidorwsus:8530"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
"NoAutoUpdate"=dword:00000000
"UseWUServer"=dword:00000001

Copiamos el fichero creado al equipo que queramos que se actualize. Pinchamos sobre el mismo dos veces para que nos añada los valores anteriores al registro del equipo.

Ejecutamos desde una ventana de comandos (cmd) lo siguiente

wuauclt.exe /reportnow /detectnow
y deberíamos de ver el equipo en la lista de equipos clientes del servidor WSUS

En caso de que sigamos sin ver el equipo cliente en la consola del servidor, ejecutamos en el equipo cliente los siguiente
wuauclt.exe /resetauthorization /detectnow

Windows 10

En las versiones de windows 10 y windows 2016 la utilidad wuauclt ha sido reemplazada por usoclient . Ahora para lanzar una búsqueda de actualizaciones desde windows 10, tendríamos que abrir una consola como administradory ejecutar

usoclient StartScan
Las opciones que podemos usar con usoclient son :

  • StartScan → Para buscar que parches nos faltan
  • StartDownload → Descarga los parches
  • StartInstall → Instala los parches descargados
  • RefreshSettings → Para cargar los nuevos valores si se ha hecho algún cambio
  • StartInteractiveScan → Escaneo interactivo
  • RestartDevice → Reinicia el equipo al terminar de instalar los parches
  • ScanInstallWait → Combina escanear, descargar e instalar
  • ResumeUpdate →Realiza el update en el inicio del equipo

Actualizar W10 con Powershell

  1. Arrancamos powershell
  2. Instalamos el módulo → Install-Module PSWindowsUpdate
  3. Get-Command -Module PSWindowsUpdate
  4. Ver las actualizaciones pendientes→ Get-WindowsUpdate
  5. Instalar las actualizaciones → Install-WindowsUpdate
  6. Install-WindowsUpdate -AcceptAll -AutoReboot
  7. Instalar un KB específico → Get-WindowsUpdate -Install -KBArticleID 'KB4560960'

Actualizar W10 con un script

Creamos el siguiente script de powershell y lo llamamos actualizar.ps1

$winVer = [System.Environment]::OSVersion.Version.Major
$dir = 'C:\_Windows_FU\packages'
mkdir $dir

if ($winVer -eq 10)
    {  
        $webClient = New-Object System.Net.WebClient
        $url = 'https://go.microsoft.com/fwlink/?LinkID=799445'
        $file = "$($dir)\Win10Upgrade.exe"
        $webClient.DownloadFile($url,$file)
        Start-Process -FilePath $file -ArgumentList '/quietinstall /skipeula /auto upgrade /copylogs $dir'
        } 
    
    else 

        {
            echo "This is Not Windows10 OS "
        }
    
sleep 10

Remove-Item "C:\_Windows_FU" -Recurse -Force -Confirm:$false 

Ojo el link $url hay que cambiarlo según el upgrade que queramos instalar

Para ejecutarlo powershell.exe -ExecutionPolicy Bypass ./actualizar.ps1

https://www.urtech.ca/2018/11/solved-easily-script-windows-10-to-download-install-and-restart-for-windows-updates/

Otro Script

https://www.signalwarrant.com/force-wsus-checkin-with-powershell-2/

#  *** THIS SCRIPT IS PROVIDED WITHOUT WARRANTY, USE AT YOUR OWN RISK ***
<#

.DESCRIPTION
	Starts the Windows Update service (wuauserv) if it is stopped and forces a checkin 
    with the WSUS Server. This function uses the Invoke-Command CMDlet which 
    will require PSRemoting to be enabled on the target machine. 

.NOTES
	File Name: force-WSUScheckin.ps1
	Author: David Hall
	Contact Info: 
		Website: www.signalwarrant.com
		Twitter: @signalwarrant
		Facebook: facebook.com/signalwarrant/
		Google +: plus.google.com/113307879414407675617
		YouTube Subscribe link: https://www.youtube.com/channel/UCgWfCzNeAPmPq_1lRQ64JtQ?sub_confirmation=1
	Requires: PowerShell Remoting Enabled (Enable-PSRemoting) 
	Tested: PowerShell Version 5

.PARAMETER ComputerName
    See the examples below, the computername can be one or 
    many computer names
		 
.EXAMPLE
     .\force-WSUScheckin.ps1 -ComputerName CL1
     .\force-WSUScheckin.ps1 -ComputerName CL1 -verbose
     .\force-WSUScheckin.ps1 -ComputerName CL1, CL2 -verbose
     .\force-WSUScheckin.ps1 -ComputerName (Get-Content -Path "C:\computers.txt") -verbose

#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string[]]$ComputerName

)

$service = get-service -Name wuauserv

# Check to see if the wuauserv service is stopped
if ($service.Status -eq "Stopped"){

# If the service is stopped we're going to start it and force WSUS checkin
# then Exit
Write-verbose "1. WUAUSERV is stopped... starting"
Invoke-Command -ComputerName $ComputerName -scriptblock {Start-Service wuauserv}
[System.Threading.Thread]::Sleep(3000)

Write-verbose "2. Forcing WSUS Checkin"
Invoke-Command -ComputerName $ComputerName -scriptblock {wuauclt.exe /detectnow}
[System.Threading.Thread]::Sleep(1500)

Write-verbose "3. Checkin Complete"
Exit

} else {

# If the service is started we'll just force the WSUS checkin and Exit
Write-verbose "1. Forcing WSUS Checkin"
Invoke-Command -ComputerName $ComputerName -scriptblock {wuauclt.exe /detectnow}
[System.Threading.Thread]::Sleep(1500)

Write-Verbose "2. Checkin Complete"
Exit

}

Forzar la sincronización con WSUS

Ejecutar desde powershell en el equipo ccon problemas →

$updateSession = new-object -com "Microsoft.Update.Session"; $updates=$updateSession.CreateupdateSearcher().Search($criteria).Updates

Forzar la sincronización mediante un script

Function Force-WSUSCheckin($Computer)
{
   Invoke-Command -computername $Computer -scriptblock { Start-Service wuauserv -Verbose }
   # Have to use psexec with the -s parameter as otherwise we receive an "Access denied" message loading the comobject
   $Cmd = '$updateSession = new-object -com "Microsoft.Update.Session";$updates=$updateSession.CreateupdateSearcher().Search($criteria).Updates'
   &amp; c:\bin\psexec.exe -s \\$Computer powershell.exe -command $Cmd
   Write-host "Waiting 10 seconds for SyncUpdates webservice to complete to add to the wuauserv queue so that it can be reported on"
   Start-sleep -seconds 10
   Invoke-Command -computername $Computer -scriptblock
   {
      # Now that the system is told it CAN report in, run every permutation of commands to actually trigger the report in operation
      wuauclt /detectnow
      (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()
      wuauclt /reportnow
      c:\windows\system32\UsoClient.exe startscan
   }
}

https://pleasework.robbievance.net/howto-force-really-wsus-clients-to-check-in-on-demand/

Problemas WSUS y XP

Si aún tenemos máquinas con windows xp que se tienen que actualizar desde el wsus y no están cogiendo las actualizaciones y aún poniendo el paquete de objetos para la versión del servidor (Group Policy Preference Client Side Extensions for Windows XP (KB943729) )sigue sin actualizar. Podemos mirar en la estación en c:\windows\WindowsUpdate.log para ver de donde vienen el problema.

Para resolverlo podemos cambiar los permisos de los servicios de actualizaciones automáticas (wuaserv) y el servicio de transferencia inteligente en segundo plano (Bits)

sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
Habilitar e iniciar los servicios wuaserv y bits

Problemas con las actualizaciones de windows

Problemas con el Proxy

Resetear la configuración del proxy (por ejemplo si nos descargamos los parches de un servidor wsus local)

netsh winhttp reset proxy
o bien
netsh winhttp import proxy source=ie

Si sigue fallando probar con :

net stop bits
net stop wuauserv
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /f
rd /s /q %WINDIR%\SoftwareDistribution
gpupdate /force
wuauclt /resetauthorization /detectnow

https://wuinstall.com/index.php/blog-list/item/11-force-windows-10-updates-command-line.html

El equipo no aparece en el WSUS

Podemos abrir un terminal y ejecutar el wuauclt.exe con alguna de estas opciones:

  • /ResetAuthorization /DetectNow (o /a /d)
  • /DetectNow (o /d)
  • /ReportNow /DetectNow (o /r /d)
  • /UpdateNow
  • /ShowWUAutoScan
  • /ShowWindowsUpdate
  • /CloseWindowsUpdate
  • /ShowWU
  • /DemoUI
  • /IdleShutdownNow
  • /ShowOptions
  • /SelfUpdateUnmanaged
  • /SelfUpdateManaged
  • /ResetEulas
  • /ShowSettingsDialog
  • /RunHandlerComServer

Por ejemplo para actualizar la conexión de la estación al servidor de wsus

wuauclt.exe /resetauthorization /detectnow

Referencias

Otros problemas

Error 7053

Parches fuera de ciclo

Existe una página de Microsoft desde donde podemos bajarnos parches para un KB (Microsoft Knowledge Base) en particular.

Por ejemplo para bajar los parches para el famoso virus WannaCry → http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598

Referencias