# Extracción de URLs de Descarga de Actualizaciones de Windows desde WindowsUpdate.log y Caché Local

- Link: https://binariocero.com/windows/extraccion-de-urls-de-descarga-de-actualizaciones-de-windows-desde-windowsupdate-log-y-cache-local
- Published: 2025-08-15T08:53:37+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

En entornos corporativos o de troubleshooting avanzado, puede ser necesario identificar
la URL directa de descarga de una actualización de Windows (por ejemplo, un parche`.
msu`, `.cab` o `.psf`).
Windows 10/11 no siempre muestra estas URLs en el `WindowsUpdate.
log`, ya que muchas descargas se gestionan mediante **Delivery Optimization (DoSvc)**,
pero existen métodos para obtenerlas desde los registros y la caché local.

`Failed: 0x80240034 Update failed to download.`

## **1. Generar el archivo WindowsUpdate.log**

En Windows 10/11, el log clásico de Windows Update no se encuentra de forma legible
directamente, sino que debe generarse desde PowerShell:

    ```wp-block-code
    Get-WindowsUpdateLog
    ```

Esto creará un archivo `WindowsUpdate.log` en el escritorio del usuario actual:

    ```wp-block-code
    C:\Users\<usuario>\Desktop\WindowsUpdate.log
    ```

## **2. Extraer URLs desde WindowsUpdate.log**

### **2.1. Mostrar todas las líneas que contienen URLs**

    ```wp-block-code
    Select-String -Path "C:\Users\<usuario>\Desktop\WindowsUpdate.log" -Pattern 'https?://[^\s"<>]+'
    ```

### **2.2. Mostrar solo las URLs (sin el resto de la línea)**

    ```wp-block-code
    Select-String -Path "C:\Users\<usuario>\Desktop\WindowsUpdate.log" -Pattern 'https?://[^\s"<>]+' -AllMatches |
      ForEach-Object { $_.Matches.Value } |
      Sort-Object -Unique
    ```

### **2.3. Filtrar únicamente URLs relevantes de Windows Update**

Para obtener solo enlaces de dominios oficiales y que apunten a archivos `.msu`,`.
cab` o `.psf`:

    ```wp-block-code
    $exts = '\.(msu|cab|psf)(?:\?|$)'
    $domains = 'download\.windowsupdate\.com|catalog\.s\.download\.windowsupdate\.com|(?:^|\.)delivery\.mp\.microsoft\.com'

    Select-String -Path "C:\Users\<usuario>\Desktop\WindowsUpdate.log" -Pattern 'https?://[^\s"<>]+' -AllMatches |
      ForEach-Object { $_.Matches.Value } |
      Where-Object { ($_ -match $exts) -and ($_ -match $domains) } |
      Sort-Object -Unique
    ```

## **3. Exportar resultados a un archivo .txt**

Si queremos guardar la salida en un archivo de texto:

### **3.1. Guardar líneas completas con URLs**

    ```wp-block-code
    Select-String -Path "C:\Users\<usuario>\Desktop\WindowsUpdate.log" -Pattern 'https?://[^\s"<>]+' |
      Out-File "C:\Users\<usuario>\Desktop\urls.txt" -Encoding UTF8
    ```

### **3.2. Guardar solo URLs únicas**

    ```wp-block-code
    Select-String -Path "C:\Users\<usuario>\Desktop\WindowsUpdate.log" -Pattern 'https?://[^\s"<>]+' -AllMatches |
      ForEach-Object { $_.Matches.Value } |
      Sort-Object -Unique |
      Out-File "C:\Users\<usuario>\Desktop\urls.txt" -Encoding UTF8
    ```

## **4. Búsqueda de URLs en la caché de Windows Update**

Además del log, las URLs pueden aparecer en la caché de actualizaciones en:

    ```wp-block-code
    C:\Windows\SoftwareDistribution\Download
    ```

Para buscar todas las URLs en esa ubicación:

    ```wp-block-code
    Select-String -Path 'C:\Windows\SoftwareDistribution\Download\*' -Pattern 'https?://[^\s"<>]+' -AllMatches -ErrorAction SilentlyContinue |
      ForEach-Object { $_.Matches.Value } |
      Sort-Object -Unique
    ```

Filtrando solo URLs de parches:

    ```wp-block-code
    $exts = '\.(msu|cab|psf)(?:\?|$)'
    $domains = 'download\.windowsupdate\.com|catalog\.s\.download\.windowsupdate\.com|(?:^|\.)delivery\.mp\.microsoft\.com'

    Select-String -Path 'C:\Windows\SoftwareDistribution\Download\*' -Pattern 'https?://[^\s"<>]+' -AllMatches -ErrorAction SilentlyContinue |
      ForEach-Object { $_.Matches.Value } |
      Where-Object { ($_ -match $exts) -and ($_ -match $domains) } |
      Sort-Object -Unique
    ```

## **5. Obtener URLs desde trabajos BITS activos**

Si la descarga está en curso, se puede listar desde Background Intelligent Transfer
Service (BITS):

    ```wp-block-code
    $exts = '\.(msu|cab|psf)(?:\?|$)'
    Get-BitsTransfer -AllUsers -ErrorAction SilentlyContinue |
      Where-Object { $_.DisplayName -match 'Windows Update' -or $_.Description -match 'Update' } |
      ForEach-Object { $_.FileList | Select-Object -ExpandProperty RemoteName } |
      Where-Object { $_ -match $exts } |
      Sort-Object -Unique
    ```

## **6. Consultar URLs desde Delivery Optimization**

Si Windows Update usa Delivery Optimization:

    ```wp-block-code
    $exts = '\.(msu|cab|psf)(?:\?|$)'
    Get-DeliveryOptimizationStatus -ErrorAction SilentlyContinue |
      Where-Object { $_.SourceUrl } |
      Select-Object -ExpandProperty SourceUrl |
      Where-Object { $_ -match $exts } |
      Sort-Object -Unique
    ```

## **7. Alternativa: Obtener URL oficial desde Microsoft Update Catalog**

Si no se encuentra la URL en el log o en caché, lo más fiable es descargar el parche
desde el Catálogo de Microsoft Update:

 1. 
 2. Buscar por el número de KB (por ejemplo, `KB5063878`).
 3. Descargar el archivo correspondiente a la arquitectura (`x64`, `x86`, `arm64`).

## **Conclusión**

Mediante estos procedimientos podemos identificar y extraer las URLs directas de
descarga de parches de Windows, ya sea desde el `WindowsUpdate.log`, la caché local(`
SoftwareDistribution`), trabajos BITS activos o Delivery Optimization. En caso de
no encontrarlas, el **Microsoft Update Catalog** sigue siendo la fuente más confiable.
