Hướng dẫn tạo Batch script gỡ bỏ gói package mặc định của Windows 10

Hướng dẫn tạo Batch script gỡ bỏ gói package mặc định của Windows 10


Packages là gói ứng dụng và tính năng hệ thống bao gồm cả các gói cập nhật của Windows 10 tùy theo mỗi phiên bản mà được tích hợp đầy đủ hay không. Các gói packages này được bảo vệ và làm ẩn đi để người dùng không gỡ bỏ hoặc xóa. Việc gỡ bỏ một gói package nếu đúng cách chỉ làm mất đi ứng dụng hoặc tính năng đó nhưng không làm ảnh hưởng đến hệ thống. Ngược lại nếu gỡ không đúng cách hoặc gỡ sai gói package sẽ làm hệ thống bị hỏng gây ra lỗi và có thể không boot được.

Cho nên trước khi gỡ bỏ bạn phải tìm hiểu thật kỹ về gói package đó là gì? Có tác dụng như thế nào? Và có gây lỗi cho Windows sau khi gỡ bỏ? Bài viết này không khuyến khích bạn gỡ bỏ gói package mặc định cùa Windows 10 nhưng nếu bạn muốn tìm hiểu sâu bạn có thể tham khảo hoặc chỉ muốn thực hành một lần cho biết bạn có thể sao lưu hệ thống trước khi thực hiện.

Trong bài hôm nay tôi sẽ trình bày cách tạo một tập tin batch trong đó lưu nội dung kịch bản được tạo trước để gỡ bỏ một gói package của ứng dụng hoặc tính năng cụ thể nào đó. Dưới đây là nội dung chi tiết.

Trước hết để xác định chính xác Windows 10 đang có những gói package nào thì chúng ta sẽ tìm trong Registry Editor theo đường dẫn

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages


Khóa Packages sẽ lưu giữ tất cả các gói packages của hệ thống trong đó mỗi ứng dụng hoặc tính năng của Windows bao gồm từ một hay nhiều gói packages lấy ví dụ với ứng dụng Connect thì gói package của nó có tên Microsoft-PPIProjection...hay tính năng Hyper-V thì lại có rất nhiều gói packages liên quan đến từ khóa Hyper-V trong tên của gói package này.

Trong mỗi khóa con cũng chính là tên gói package dưới khóa chính Packages chỉ rất ít các gói package được cấu hình hiện lên khi sử dụng tùy chọn Get-Packages còn lại đa số đều giống nhau có một điểm chung dưới tên mỗi khóa có một khóa con tên Owners (bảo vệ không cho gỡ) và được đặt một giá trị REG_DWORD có tên Visibility bằng 2 (làm ẩn đi)


Bây giờ để áp dụng vào tập tin batch bạn phải soạn với nội dung sau đây:
  1. Thay đổi giá trị Visibility của khóa từ 2 thành 1 đề làm hiện gói package khi sử dụng tùy chọn Get-Packages
  2. Xóa khóa con Owners mới có thể sử dụng tùy chọn Remove-Package gỡ bỏ gói package
  3. Gỡ bỏ gói package bằng tùy chọn Remove-Package
QUAN TRỌNG: Một số khóa yêu cầu phải được cấp phép thì mới thực hiện được hành động chẳng hạn như khóa chính Packages do vậy bạn phải thiết lập quyền full control cho khóa này bằng tài khoản đang sử dụng đăng nhập Windows thì mới áp dụng được. Bạn có thể xem hướng dẫn trong bài viết Hướng dẫn gỡ bỏ Cortana trong Windows 10 về cách thay đổi quyền quản trị được khóa này.

Dựa vào nội dung yêu cầu tôi sẽ tạo tập tin batch lấy ví dụ để gỡ bỏ ứng dụng Mixed Reality Portal. Các gói packages của ứng dụng này có từ khóa tên Holographic


Tôi sẽ viết tập tin batch với nội dung sau:

@echo off
set key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages

for /f "tokens=*" %%a in ('reg query "%key%" ^| findstr /c:Holographic ') do (
reg delete "%%a\Owners" /f
reg add "%%a" /v "Visibility" /t REG_DWORD /d 1 /f
)
for /f "tokens=4" %%a in ('dism /online /get-packages ^| findstr /c:Holographic ') do (
dism /online /remove-package /packagename:"%%a" /norestart
)
cls
echo.The operation completed successfully.
echo.Restart Windows to complete this operation.
choice /c YN /n /m "Do you want to restart the computer now? (Yes/No) "
if %errorlevel% EQU 1 shutdown /r /f /t 00
if %errorlevel% EQU 2 exit

Khi chạy tập tin batch bằng quyền administrator sẽ gỡ bỏ ứng dụng Mixed Reality Portal. Như vậy với tập tin batch có chứa nội dung gỡ bỏ gói package chỉ mới là điều kiện cần nhưng chưa đầy đủ vì nó thiếu phần kiểm tra xem có gói package hay không trước khi áp dụng hành động gỡ bỏ. Như vậy tôi phải thêm một nội dung kiểm tra trước khi gỡ bỏ bằng đặt điều kiện IF với nội dung nếu tìm thấy gói package mới tiến hành gỡ bỏ còn không thấy thì thông báo không tìm thấy ứng dụng. Nội dung đầy đủ trong tập tin batch như sau:

@echo off
set key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages

reg query "%key%" | findstr /c:Holographic
if %errorlevel% EQU 0 goto remove-package
if %errorlevel% EQU 1 goto not-found

:remove-package
cls
for /f "tokens=*" %%a in ('reg query "%key%" ^| findstr /c:Holographic ') do (
reg delete "%%a\Owners" /f
reg add "%%a" /v "Visibility" /t REG_DWORD /d 1 /f
)
for /f "tokens=4" %%a in ('dism /online /get-packages ^| findstr /c:Holographic ') do (
dism /online /remove-package /packagename:"%%a" /norestart
)
cls
echo.The operation completed successfully.
echo.Restart Windows to complete this operation.
choice /c YN /n /m "Do you want to restart the computer now? (Yes/No) "
if %errorlevel% EQU 1 goto restart
if %errorlevel% EQU 2 goto close

:not-found
echo.App not found.
pause
exit

:close
exit

:restart
shutdown /r /f /t 00

Kết quả khi chạy lại tập tin batch sẽ thông báo ứng dụng không được tìm thấy.