Cada vez que instala o actualiza el controlador de su dispositivo, el sistema operativo Windows (desde Vista) continúa almacenando la versión anterior del controlador en el almacén de controladores del sistema. Por lo tanto, si el sistema no funciona correctamente con el nuevo controlador, el usuario puede volver a una versión anterior del controlador en cualquier momento.

Windows Driver Store se encuentra en la carpeta C:windowssystem32DriverStoreFileRepository. Sin embargo, algunos usuarios de Windows comenzaron a notar que con el tiempo, la carpeta %windir%system32DriverStoreFileRepository empieza a ocupar cada vez más espacio en disco. En nuestro ejemplo, el tamaño de esta carpeta es más de 11 GB. ¡Mucho, especialmente para la unidad SSD!

controlador de desinstalación de powershell

¿Cómo eliminar controladores antiguos y no utilizados de Driver Store?

Para borrar el contenido de la carpeta ArchivoRepositorio a partir de los controladores obsoletos, preparamos un pequeño script de PowerShell que elimina todos los controladores duplicados, excepto los controladores con la fecha más reciente.

¡Advertencia! En cualquier caso, no elimine ningún archivo o carpeta manualmente del directorio. ArchivoRepositorio!

Consejos importantes:

Obtendremos la lista de controladores de terceros instalados en el sistema usando el comando DISM:

dism /online /get-drivers

Luego analice la salida usando PowerShell, seleccione los duplicados del controlador y ordénelos por fecha. De la lista resultante excluiremos la versión más reciente de cada controlador.

Después de eso, elimine los controladores restantes usando pnputil utilidad. En algunos casos, si no se elimina algún controlador, agregue el modificador -f.

El guión es el siguiente:

$dismOut = dism /online /get-drivers

$Lines = $dismOut | select -Skip 10




$Operation = "theName"

$Drivers = @()




foreach ( $Line in $Lines ) {




    $tmp = $Line

    $txt = $($tmp.Split( ':' ))[1]




    switch ($Operation) {




        'theName' { $Name = $txt

                     $Operation = 'theFileName'

                     break

                   }




        'theFileName' { $FileName = $txt.Trim()

                         $Operation = 'theEntr'

                         break

                       }




        'theEntr' { $Entr = $txt.Trim()

                     $Operation = 'theClassName'

                     break

                   }




        'theClassName' { $ClassName = $txt.Trim()

                          $Operation = 'theVendor'

                          break

                        }




        'theVendor' { $Vendor = $txt.Trim()

                       $Operation = 'theDate'

                       break

                     }




        'theDate' { # change the date format for easy sorting

                     $tmp = $txt.split( '.' )

                     $txt = "$($tmp[2]).$($tmp[1]).$($tmp[0].Trim())"

                     $Date = $txt

                     $Operation = 'theVersion'

                     break

                   }




        'theVersion' { $Version = $txt.Trim()

                        $Operation = 'theNull'




                        $params = [ordered]@{ 'FileName' = $FileName

                                              'Vendor' = $Vendor

                                              'Date' = $Date

                                              'Name' = $Name

                                              'ClassName' = $ClassName

                                              'Version' = $Version

                                              'Entr' = $Entr

                                            }

   

                        $obj = New-Object -TypeName PSObject -Property $params

                        $Drivers += $obj




                        break

                      }




         'theNull' { $Operation = 'theName'

                      break

                     }




    }

}




Write-Host "All installed third-party  drivers"

$Drivers | sort Filename | ft




Write-Host "Different versions"




$last=""

$NotUnique = @()




foreach ( $Dr in $($Drivers | sort Filename) ) {

   

    if ($Dr.FileName -eq $last  ) {  $NotUnique += $Dr  }

    $last = $Dr.FileName

}




$NotUnique | sort FileName | ft




Write-Host "Outdated drivers"

$list = $NotUnique | select -ExpandProperty FileName -Unique




$ToDel = @()

foreach ( $Dr in $list ) {

    Write-Host "duplicate found" -ForegroundColor Yellow

    $sel = $Drivers | where { $_.FileName -eq $Dr } | sort date -Descending | select -Skip 1

    $sel | ft




    $ToDel += $sel

}




Write-Host "Drivers to remove" -ForegroundColor Red




$ToDel | ft




# removing old drivers

foreach ( $item in $ToDel ) {

    $Name = $($item.Name).Trim()

    Write-Host "deleting $Name" -ForegroundColor Yellow

    Write-Host "pnputil.exe -d $Name" -ForegroundColor Yellow

    Invoke-Expression -Command "pnputil.exe -d $Name"

}

Consejo. En caso de que necesite mostrar solo la lista de controladores no utilizados, comente Expresión de invocación (agregue un carácter # antes del comando Expresión de invocación -Comando "pnputil.exe -d $Nombre)

Copie el código del script y guárdelo en un archivo drv_cleanup.ps1 (a la carpeta c:ps). Abra la consola PowerShell elevada y permita ejecutar los scripts sin firmar:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

A continuación, ejecute el script: C:PSdrv_cleanup.ps1

powershell quitar controlador

El script eliminará los controladores no utilizados. Después de su finalización, reinicie su computadora y verifique si todo funciona correctamente y, si es necesario, reinstale el controlador apropiado.

En nuestro caso, tras la ejecución del script el tamaño de una carpeta ArchivoRepositorio reducido de 11 a 1,5 GB. ¡No está mal!

Recomendado para ti