· Introducción a las características/paquetes de Windows
Windows instala consigo muchas características, algunas son visibles y configurables para el usuario como Windows Media Player e Internet Explorer, pero otras son completamente ocultas por seguridad, como drivers, codecs, Telnet, Reconocimiento de voz, y muchas otras cosas más internas, estas características se distribuyen dentro de "paquetes" los cuales están catalogados y se pueden instalar y/o desinstalar dentro de una imagen WIM, paquetes y características se tratan por separado.
· ¿Que herramientas necesitaremos?
·DISM, para el montaje de la imagen y la eliminación de paquetes y características.
· WIM Registry Tweak Tool, para tomar privilegios necesarios en el Hive montado.
5.1
· Obtener información sobre los paquetes
Primero deben usar DISM para montar la imagen Install.wim del DVD de Windows en un directorio (recuerden montar el índice de imagen que quieren manipular), en el punto 3.2 del tutorial está explicado el procedimiento de montaje usando DISM.
En este ejemplo montaré el índice 1 de mi imagen WIM del DVD original de Windows 8.1, que hace referencia a la edición "Windows 8.1 (Core)", la sintaxis del comando es esta:
Código:
Dism.exe /Mount-Image /imageFile:".\Install.wim" /Index:"1" /MountDir:"C:\WinMount"
Seguídamente, para obtener los paquetes visibles y que están instalados en dicha edición/imagen usamos DISM de nuevo usando esta sintaxis:
Código:
Dism.exe /Get-Packages /Image:"Directorio de montaje"
El parámetro /Get-Packages indica que se trata de una operación de obtención de información.
En el parámetro /Image debemos indicar el directorio donde previamente hemos montado la imagen WIM.
Ejemplo:
Código:
Dism.exe /Get-Packages /Image:"C:\WinMount" /Format:Table
También podemos usar la utilidad WIM Registry Tweak Tool para desocultar los paquetes ocultos y obtener los paquetes, usaremos esta sintaxis:
Código:
"WIM Registry Tweak Tool.exe" /p "Directorio de montaje" /l
Ejemplo:
Código:
"WIM Registry Tweak Tool.exe" /p "C:\WinMount" /l
Esto nos creará un archivo "Packages.txt" en el directorio de trabajo del WIM Registry Tweak Tool con los nombres de los paquetes existentes:
Packages.txt
Código:
Adobe-Flash-For-Windows-Package~31bf3856ad364e35~amd64~~6.3.9600.16384
Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~es-ES~11.0.9600.16384
Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~~11.0.9600.16384
Microsoft-Windows-InternetExplorer-Package-shell~31bf3856ad364e35~amd64~es-ES~6.3.9600.16384
Microsoft-Windows-InternetExplorer-Package-shell~31bf3856ad364e35~amd64~~6.3.9600.16384
Microsoft-Windows-InternetExplorer-Package-ua~31bf3856ad364e35~amd64~es-ES~6.3.9600.16384
Microsoft-Windows-InternetExplorer-Package-ua~31bf3856ad364e35~amd64~~6.3.9600.16384
Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~amd64~es-ES~11.0.9600.16384
Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~amd64~~11.0.9600.16384
...
Nota: Los nombres de los paquetes también los pueden encontrar en el directorio montado: ...\Windows\Servicing\Packages
5.2
· Obtener información sobre las características
Nota: Lista de características de Windows 8.1: http://technet.microsoft.com/en-us/library/dn328991.aspx
Para obtener las carcterísticas que están habilitadas en la imagen de Windows usaremos DISM.
Sintaxis
Código:
Dism.exe /Get-Features /Image:"Directorio de montaje" /Format:Table
Ejemplo:
Código:
Dism.exe /Get-Features /Image:"C:\WinMount" /Format:Table
5.3
· Eliminar paquetes
Aqui deben tener MUCHO cuidado, ya que muchos paquetes son esenciales para el correcto funcionamiento de windows (Ej: Drivers, NET Framework, etc...), pero una gran mayoria son inutiles y muchos de nosotros no los querremos tener instalados, pudiendo así ahorrar espacio de instalación y consumo de RAM.
Nota: Los archivos asociados a los paquetes no se eliminan del directorio WinSXS, simplemente dejarán una señal de desinstalación pendiente para cuando vayamos a instalar Windows.
La complejidad para eliminar un paquete puede variar, si tienen más de un índice en una imagen Install.wim es muy probable que los paquetes dependan de otras ediciones (índices) y no se pueden eliminar, además DISM puede dar un error de acceso denegado al montar los Hives del registro, así que para asegurarnos de que todo sale bien, primero utilizaremos la utilidad WIM Registry Tweak Tool para montar el registro y tomar los privilegios necesarios de Admin:
Ejecutaremos WIM Registry Tweak Tool usando esta sintaxis:
Código:
"WIM Registry Tweak Tool.exe" /p "Directorio de montaje"
Ejemplo:
Código:
"WIM Registry Tweak Tool.exe" /p "C:\WinMount"
Ahora ya estamos listos para desinstalar los pquetes que queramos usando DISM (También pueden hacerlo con WIM Registry Tweak Tool, pero es más seguro DISM).
Ejecutaremos DISM con esta sintaxis:
Código:
Dism.exe /Remove-Package /PackageName:"Nombre de la característica" /Imaage:"Directorio de montaje"
Ejemplo:
Código:
Dism.exe /Remove-Package /PackageName:"microsoft-windows-internetexplorer-optional-package~31bf3856ad364e35~amd64~~119600.16384" /Image:"C:\WinMount"
Listo!
5.4
· Desactivar características
El procedimiento para desactivar características es casi identico al de eliminar paquetes pero sin las mayores dificultades que tiene este otro, y con la diferencia además de que no corren ningún riesgo grave en el funcionamiento del SO por desactivar una característica (siempre la pueden volver a habilitar).
Para desactivar una característica de Windows, ejecutamos DISM usando la siguiente sintaxis:
Código:
Dism.exe /Image:"Directorio de montaje" /Disable-Feature /FeatureName:"Nombre de característica"
Ejemplo:
Código:
Dism.exe /Image:"C:\WinMount" /Disable-Feature /FeatureName:"WindowsMediaPlayer"
5.5
· Finalizando la eliminación de paquetes y desactivación de características
El último paso que debemos tener en cuenta es desmontar la imagen y aplicar los cambios realizados,
esto lo haremos utilizando DISM con la siguiente sintaxis:
Código:
Dism.exe /Unmount-Wim /Commit /MountDir:"Directorio de montaje"
Ejemplo:
Código:
Dism.exe /Unmount-Wim /Commit /MountDir:"C:\WinMount"
Nota: Opcionalmente podemos usar la utilidad ImageX para reconstruir la imagen WIM, el manejo de esta operación está explicada en el punto 3.4 del tutorial.
5.6
· Automatizar la eliminación de paquetes
He desarrollado un modo mediante el cual solo necesitan escribir los nombres de los paquetes que quieren eliminar en un archivo de texto y usar un Script Batch, el cual se encargará de Montar, tomar privilegios, eliminar, desmontar y reconstruir, todo de forma automatizada.
Todo lo necesario está incluido en este archivo comprimido:
http://www.mediafire.com/download/mq7o7q7brq6h4ca/WIM_Package_Uninstaller.rar
Una imagen de muestra:
Instrucciones:
Deben crear un archivo llamado "Packages.txt" y añadir los nombres de los paquetes que desenan eliminar (1 nombre por linea).
Ejemplo:
Packages.txt
Código:
microsoft-windows-miracast-driver-package~31bf3856ad364e35~amd64~~6.3.9600.16384
microsoft-windows-mobilepc-client-basic-package~31bf3856ad364e35~amd64~es-es~6.3.9600.16384
microsoft-windows-vpnplugins-package~31bf3856ad364e35~amd64~~6.3.9600.16384
microsoft-windows-webcamexperience-package~31bf3856ad364e35~amd64~~6.3.9600.16384
Seguídamente utilizan este Script.
Nota: Deben configurar los valores de las variables que están documentadas en la cabecera del código.
WIM Package Uninstaller.cmd
Código
@Echo OFF REM ================= REM Console Settings: REM ================= Title WIM Package Uninstaller - By Elektro Mode Con Cols=150 Lines=50 REM ===== REM Info: REM ===== Echo+ Echo ---------------------------------------------------------------------------------- Echo ---------------------------------------------------------------------------------- Echo+ REM ==================== REM User defined values: REM ==================== REM This value indicates whether the Windows Image should be mounted. REM True = 'DISM' will try to mount the 'WIM' image. REM False = 'DISM' will not try to mount the WIM image. REM Set this value to 'FALSE' if the 'WIM' image is already mounted in the specified mount directory, REM Otherwise, keep it as 'TRUE'. Set "MountImage=True" REM This value indicates whether the Windows Image should be unmounted at the end. REM True = 'DISM' will try to unmount the 'WIM' image. REM False = 'DISM' will not try to unmount the WIM image. REM Set this value to 'FALSE' if you want to keep the image mounted to make other changes, REM Otherwise, keep it as 'TRUE'. Set "UnmountImage=True" REM This value indicates whether the Windows Image should be rebuilt at the end. REM True = 'ImageX' will try to rebuild the 'WIM' image. REM False = 'ImageX' will keep the 'WIM' image as is. REM Set this value to 'FALSE' if you want to keep the image with normal size to make other changes, REM Otherwise, keep it as 'TRUE'. Set "Rebuild=True" REM This value indicates the 'WIM' image to be mounted. REM This value indicates the Image Index of the 'WIM' image. Set "ImageIndex=1" REM This value indicates the directory where to mount the 'WIM' image. REM This value indicates the textfile that contains the names of the packages to remove. REM This value indicates the ubication of the 'WIM Registry Tweak Tool.exe' file. REM This value indicates the ubication of 'ImageX.exe' file. REM This value indicates the ubication of a custom 'DISM.exe' file if needed. REM Default ubication: "%SystemRoot%\System32\Dism.exe" REM This value indicates the ubication of the logfile that will record 'DISM' errors. REM This value indicates the logging-level of the 'DISM' process. REM 1 = Errors only REM 2 = Errors and warnings REM 3 = Errors, warnings, and informational REM 4 = All of the information listed previously, plus debug output Set /A "DismLogLevel=2" REM This value indicates the ubication of the logfile that will record Main information. REM ===== REM Main: REM ===== :: Call Methods. Call :CheckErrors Call :CreateLogs Call :CreateMountDir Call :GetWIMSizeBefore Call :StartTimer Call :Mount CLS Call :ParsePackages CLS Call :CleanUp Call :Unmount Call :Rebuild Call :StopTimer Call :GetWIMSizeAfter Call :EndLog Pause&Exit REM ======== REM Methods: REM ======== :CreateLogs :: Create the 'DISM' logfile with 'ANSI' encoding, :: this is necessary to record a non-default 'DISM' loglevel such as '1' or '2'. :: Create the Main logfile and record starting info on it. ( Echo+ Echo WIM Package Uninstaller Echo =========================== Echo /\/\/\/\/\/\/\/\/\/\/\/\/\/ Echo+ Echo+ Echo+ Echo+ Echo+ Echo =========================== )>"%Logfile%" :: Display starting log info. Type "%Logfile%" :: Continue writting log. ( Echo+ Echo Package conflicts: Echo ================== Echo+ )>>"%LogFile%" Goto:EOF :EndLog ( Echo+ Echo [i] Done! Echo+ )>>"%LogFile%" :: Display ending information. CLS Type "%LogFile%" Goto:EOF :CreateMountDir :: Create the mount directory. ( ) ) || ( Echo+ Echo [i] Ensure that you have Admin rights to create the directory. Echo+ Pause&Exit ) Goto:EOF :Mount :: Mount the Windows Image into the directory. Echo+ Echo [+] Mounting WIM Image... "%Dism%" /Mount-Image /ImageFile:"%WindowsImage%" /Index:"%ImageIndex%" /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" || ( Echo+ Echo [i] Ensure that you have Admin rights to write inside the directory. Echo [i] Ensure that the directory is fully empty. Echo+ REM Try to unmount the failed image and discard changes. Echo [+] Unmounting and discarding changes... "%Dism%" /Unmount-WIM /Discard /MountDir:"%MountDir%" ) Pause&Exit ) ) Goto:EOF :CleanUp Echo [+] CleaningUp WIM Image... "%Dism%" /CleanUp-Image /StartComponentCleanUp /Image:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" /Quiet Echo+ Goto:EOF :Unmount :: Unmount the Windows Image commiting changes. Echo [+] Unmounting WIM Image... "%Dism%" /Unmount-WIM /Commit /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" ) Goto:EOF :Rebuild Echo+ Echo [+] Rebuilding WIM image... ("%ImageX%" /Compress Maximum /Export "%WindowsImage%" "*" "%TEMP%\Rebuilt Image.wim" /Check) && ( ) || ( ) Goto :EOF :StartTimer Goto :EOF :StopTimer ( )>"%TEMP%\%~n0 MinuteDiff.vbs" 'Cscript.exe /Nologo "%TEMP%\%~n0 MinuteDiff.vbs"' ) Goto:EOF :WriteConvertBytesScript ( Echo+ Echo End Function Echo+ Echo Level = Level + 1 Echo End Function Echo+ )>"%TEMP%\%~n0 Convert Bytes.vbs" Goto:EOF :GetWIMSizeBefore Call :WriteConvertBytesScript 'Cscript.exe /Nologo "%TEMP%\%~n0 Convert Bytes.vbs" "%WIMSizeBefore%"' ) Goto:EOF :GetWIMSizeAfter Call :WriteConvertBytesScript 'Cscript.exe /Nologo "%TEMP%\%~n0 Convert Bytes.vbs" "%WIMSizeAfter%"' ) Goto:EOF :ParsePackages Set /A "PackagesRemovedCount=0" Set /A "PackagesFailedCount=0" Set /A "PackagesNotFoundCount=0" :: Unhide packages and take registry ownership. "%WIMRegistryTweakTool%" /p "%MountDir%" Echo+ :: Remove Packages. "%Dism%" /Remove-Package /PackageName:"%%~#" /Image:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" /Quiet 1>NUL ) ) ) ) Goto:EOF REM ==================== REM File Error Controls: REM ==================== :CheckErrors :: WIM File Error-Check. Pause&Exit ) :: PackageList File Error-Check. Pause&Exit ) :: 'DISM.exe' File Error-Check. Pause&Exit ) :: 'ImageX.exe' File Error-Check. Pause&Exit ) :: 'WIM Registry Tweak Tool.exe' File Error-Check. Pause&Exit ) Goto:EOF
Que lo disfruten! ...e intenten no joder Windows eliminando paquetes esenciales para el SO!
5.7
· Automatizar la desactivación de características
Todo lo necesario está incluido en este archivo comprimido:
http://www.mediafire.com/download/lq4sc56ri59klod/WIM_Feature_Uninstaller.rar
Una imagen de muestra:
Instrucciones:
Deben crear un archivo de texto con el nombre "Features.txt" y añadir los nombres de las características que que quieren deshabilitar, 1 nombre por cada linea.
Ejemplo:
Features.txt
Código:
DirectPlay
FaxServicesClientPackage
Internet-Explorer-Optional-amd64
Microsoft-Windows-MobilePC-LocationProvider-INF
MicrosoftWindowsPowerShellV2
MicrosoftWindowsPowerShellV2Root
Printing-Foundation-InternetPrinting-Client
Printing-XPSServices-Features
WindowsMediaPlayer
Xps-Foundation-Xps-Viewer
Seguídamente deben usar este Script que he desarrollado el cual se encarga de hacer todas las tareas necesarias.
Nota: Deben configurar los valores de las variables que están documentadas en la cabecera del código.
WIM Feature Uninstaller.cmd
Código
@Echo OFF REM ================= REM Console Settings: REM ================= Title WIM Feature Uninstaller - By Elektro Mode Con Cols=150 Lines=50 REM ===== REM Info: REM ===== Echo+ Echo ----------------------------------------------------------------------------- Echo ----------------------------------------------------------------------------- Echo+ REM ==================== REM User defined values: REM ==================== REM This value indicates whether the Windows Image should be mounted. REM True = 'DISM' will try to mount the 'WIM' image. REM False = 'DISM' will not try to mount the WIM image. REM Set this value to 'FALSE' if the 'WIM' image is already mounted in the specified mount directory, REM Otherwise, keep it as 'TRUE'. Set "MountImage=True" REM This value indicates whether the Windows Image should be unmounted at the end. REM True = 'DISM' will try to unmount the 'WIM' image. REM False = 'DISM' will not try to unmount the WIM image. REM Set this value to 'FALSE' if you want to keep the image mounted to make other changes, REM Otherwise, keep it as 'TRUE'. Set "UnmountImage=True" REM This value indicates whether the Windows Image should be rebuilt at the end. REM True = 'ImageX' will try to rebuild the 'WIM' image. REM False = 'ImageX' will keep the 'WIM' image as is. REM Set this value to 'FALSE' if you want to keep the image with normal size to make other changes, REM Otherwise, keep it as 'TRUE'. Set "Rebuild=True" REM This value indicates the 'WIM' image to be mounted. REM This value indicates the Image Index of the 'WIM' image. Set "ImageIndex=1" REM This value indicates the directory where to mount the 'WIM' image. REM This value indicates the textfile that contains the names of the features to disable. REM This value indicates the ubication of 'ImageX.exe' file. REM This value indicates the ubication of a custom 'DISM.exe' file if needed. REM Default ubication: "%SystemRoot%\System32\Dism.exe" REM This value indicates the ubication of the logfile that will record 'DISM' errors. REM This value indicates the logging-level of the 'DISM' process. REM 1 = Errors only REM 2 = Errors and warnings REM 3 = Errors, warnings, and informational REM 4 = All of the information listed previously, plus debug output Set /A "DismLogLevel=2" REM This value indicates the ubication of the logfile that will record Main information. REM ===== REM Main: REM ===== :: Call Methods. Call :CheckErrors Call :CreateLogs Call :CreateMountDir Call :GetWIMSizeBefore Call :StartTimer Call :Mount CLS Call :ParseFeatures CLS Call :CleanUp Call :Unmount Call :Rebuild Call :StopTimer Call :GetWIMSizeAfter Call :EndLog Pause&Exit REM ======== REM Methods: REM ======== :CreateLogs :: Create the 'DISM' logfile with 'ANSI' encoding, :: this is necessary to record a non-default 'DISM' loglevel such as '1' or '2'. :: Create the Main logfile and record starting info on it. ( Echo+ Echo WIM Feature Uninstaller Echo =========================== Echo /\/\/\/\/\/\/\/\/\/\/\/\/\/ Echo+ Echo+ Echo+ Echo+ Echo+ Echo =========================== )>"%Logfile%" :: Display starting log info. Type "%Logfile%" :: Continue writting log. ( Echo+ Echo Feature conflicts: Echo ================== Echo+ )>>"%LogFile%" Goto:EOF :EndLog ( Echo+ Echo [i] Done! Echo+ )>>"%LogFile%" :: Display ending information. CLS Type "%LogFile%" Goto:EOF :CreateMountDir :: Create the mount directory. ( ) ) || ( Echo+ Echo [i] Ensure that you have Admin rights to create the directory. Echo+ Pause&Exit ) Goto:EOF :Mount :: Mount the Windows Image into the directory. Echo+ Echo [+] Mounting WIM Image... "%Dism%" /Mount-Image /ImageFile:"%WindowsImage%" /Index:"%ImageIndex%" /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" || ( Echo+ Echo [i] Ensure that you have Admin rights to write inside the directory. Echo [i] Ensure that the directory is fully empty. Echo+ REM Try to unmount the failed image and discard changes. Echo [+] Unmounting and discarding changes... "%Dism%" /Unmount-WIM /Discard /MountDir:"%MountDir%" ) Pause&Exit ) ) Goto:EOF :CleanUp Echo [+] CleaningUp WIM Image... "%Dism%" /CleanUp-Image /StartComponentCleanUp /Image:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" /Quiet Echo+ Goto:EOF :Unmount :: Unmount the Windows Image commiting changes. Echo [+] Unmounting WIM Image... "%Dism%" /Unmount-WIM /Commit /MountDir:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" ) Goto:EOF :Rebuild Echo+ Echo [+] Rebuilding WIM image... ("%ImageX%" /Compress Maximum /Export "%WindowsImage%" "*" "%TEMP%\Rebuilt Image.wim" /Check) && ( ) || ( ) Goto :EOF :StartTimer Goto :EOF :StopTimer ( )>"%TEMP%\%~n0 MinuteDiff.vbs" 'Cscript.exe /Nologo "%TEMP%\%~n0 MinuteDiff.vbs"' ) Goto:EOF :WriteConvertBytesScript ( Echo+ Echo End Function Echo+ Echo Level = Level + 1 Echo End Function Echo+ )>"%TEMP%\%~n0 Convert Bytes.vbs" Goto:EOF :GetWIMSizeBefore Call :WriteConvertBytesScript 'Cscript.exe /Nologo "%TEMP%\%~n0 Convert Bytes.vbs" "%WIMSizeBefore%"' ) Goto:EOF :GetWIMSizeAfter Call :WriteConvertBytesScript 'Cscript.exe /Nologo "%TEMP%\%~n0 Convert Bytes.vbs" "%WIMSizeAfter%"' ) Goto:EOF :ParseFeatures Set /A "FeaturesRemovedCount=0" Set /A "FeaturesFailedCount=0" Set /A "FeaturesNotFoundCount=0" :: Disable Features. "%Dism%" /Disable-Feature /FeatureName:"%%~#" /Image:"%MountDir%" /English /LogPath:"%DismLogfile%" /LogLevel:"%DismLogLevel%" /Quiet 1>NUL ) ) ) ) Goto:EOF REM ==================== REM File Error Controls: REM ==================== :CheckErrors :: WIM File Error-Check. Pause&Exit ) :: FeatureList File Error-Check. Pause&Exit ) :: 'DISM.exe' File Error-Check. Pause&Exit ) :: 'ImageX.exe' File Error-Check. Pause&Exit ) Goto:EOF