Mọi quản trị viên Windows có kinh nghiệm đều gặp phải một số vấn đề với dịch vụ WMI (Công cụ quản lý Windows) và các thành phần của nó. Các vấn đề trong hệ thống con WMI rất quan trọng đối với hoạt động bình thường của Windows, do đó người quản trị cần kiểm tra và khôi phục chức năng của WMI càng sớm càng tốt. Trong bài viết này, chúng tôi sẽ mô tả kỹ thuật khắc phục sự cố và khắc phục sự cố WMI khá đơn giản trên Windows 10 và Windows Server 2016/2019.
Sự cố với WMI có thể chỉ ra nhiều lỗi:
- Các lỗi khi xử lý truy vấn WMI trong nhật ký ứng dụng và hệ thống (
0x80041002 - WBEM_E_NOT_FOUND
,WMI: Not Found
,0x80041010 WBEM_E_INVALID_CLASS
); - Các lỗi xử lý GPO liên quan đến WMI (hoạt động không chính xác của bộ lọc WMI của Chính sách Nhóm, v.v.);
- Các truy vấn WMI rất chậm;
- Lỗi trong quá trình cài đặt hoặc vận hành các đại lý SCCM / SCOM;
- Lỗi trong tập lệnh (VBS hoặc PowerShell) sử dụng không gian tên WMI (tập lệnh với Get-WmiObject, v.v.)
Khắc phục sự cố WMI
Bước đầu tiên là kiểm tra Công cụ quản lý Windows (Winmgmt
) dịch vụ được cài đặt trên Windows và đang chạy. Bạn có thể kiểm tra trạng thái của dịch vụ trong services.msc
bảng điều khiển hoặc sử dụng PowerShell:
Get-Service Winmgmt | Select DisplayName,Status,ServiceName
Nếu dịch vụ Winmgmt đang chạy, bạn có thể kiểm tra tình trạng của WMI bằng cách phân loại nó bằng một lệnh WMI đơn giản. Bạn có thể thực hiện yêu cầu wmi từ dấu nhắc lệnh hoặc từ PowerShell. Ví dụ:lệnh sau sẽ liệt kê các chương trình được cài đặt trên Windows:
wmic product get name,version
Lệnh PowerShell đơn giản nhất để lấy thông tin về phiên bản và bản dựng của Windows 10 qua WMI có thể trông giống như sau:
get-wmiobject Win32_OperatingSystem
Như bạn có thể thấy, dịch vụ WMI đã phản hồi yêu cầu một cách chính xác. Nếu Windows trả về lỗi khi thực hiện một truy vấn WMI như vậy, rất có thể dịch vụ WMI không hoạt động chính xác, kho lưu trữ WMI bị hỏng hoặc có các sự cố khác.
Ví dụ:trong trường hợp của tôi, khi mở thuộc tính Điều khiển WMI trong phần đính vào Quản lý máy tính (compmgmt.msc
), thông báo sau xuất hiện:
Failed to initialize all required WMI classes Win32_Processor. WMI: Invalid namespace Win32_WMISetting. WMI: Invalid namespace Win32_OperationSystem. WMI: Invalid namespace
Trước đây, công cụ chính thức của Microsoft WMIDiag.vbs (Chẩn đoán WMI của Microsoft) được sử dụng để chẩn đoán WMI. WMIdiag là một tập lệnh vbs kiểm tra các hệ thống con WMI khác nhau và ghi thông tin thu thập được vào tệp nhật ký (theo mặc định, nhật ký được đặt trong thư mục% TEMP% - C:\USERS\%USERNAME%\APPDATA\LOCAL\TEMP\
). Báo cáo kết quả bao gồm các tệp có tên bắt đầu bằng WMIDIAG-V2.2 và bao gồm các loại tệp sau:
- Tệp LOG chứa báo cáo báo cáo chi tiết về hoạt động và hoạt động của công cụ WMIDiag;
- Tệp TXT chứa các báo cáo tóm tắt về các lỗi đã tìm thấy đáng chú ý;
- Tệp CSV chứa thông tin cần thiết để phân tích lâu dài về hiệu suất WMI.
c:\windows\System32\cscript.exe wmidiag.vbs
nếu không, sẽ xảy ra lỗi:
WMIDiag must be run from native 64-bit environment. It is not supported in Wow64.
Sau khi WMIDiag đã hoàn thành nhiệm vụ của mình, quản trị viên nên kiểm tra các tệp nhật ký, phân tích và cố gắng sửa các lỗi đã tìm thấy.
Rất tiếc, phiên bản mới nhất của WMIDiag 2.2 chỉ hoạt động chính xác với các phiên bản lên đến Windows 8.1 / Windows Server 2012 R2. Tại thời điểm này, Microsoft thậm chí đã xóa liên kết tải xuống WMIDiag từ Trung tâm tải xuống. Nhưng nếu bạn muốn, bạn có thể tìm thấy tập lệnh này trên web.
WMIDiag cung cấp thông tin chi tiết về cách sửa lỗi cục bộ trong WMI, nhưng trong hầu hết các trường hợp, đó là một công việc tốn thời gian và chỉ đáng dành thời gian khi tìm kiếm giải pháp cho các vấn đề trong các hệ thống quan trọng (thường là trên các máy chủ sản xuất) . Trong trường hợp máy trạm của người dùng, việc đặt lại và xây dựng lại kho lưu trữ WMI trong Windows sẽ dễ dàng hơn nhiều.
Sửa chữa kho lưu trữ WMI và biên dịch tệp MOF
Trên Windows 10 / Windows Server 2016, bạn có thể kiểm tra tính toàn vẹn của kho lưu trữ WMI bằng lệnh:
winmgmt /verifyrepository
Nếu lệnh trả về rằng cơ sở dữ liệu WMI ở trạng thái không nhất quán (INCONSISTENT
hoặc WMI repository verification failed
), bạn nên thử thực hiện một bản sửa lỗi mềm đối với các lỗi kho lưu trữ WMI:
Winmgmt /salvagerepository
WMI repository has been salvaged.
Lệnh này kiểm tra tính nhất quán của kho lưu trữ WMI và xây dựng lại cơ sở dữ liệu WMI nếu tìm thấy sự không nhất quán.
Khởi động lại dịch vụ WMI:
net stop Winmgmt
net start Winmgmt
Nếu bản sửa lỗi WMI tiêu chuẩn không hoạt động, hãy thử tập lệnh sau. Tập lệnh này là một tùy chọn “mềm” để khôi phục dịch vụ WMI trên máy tính (các thư viện DLL và WMI được đăng ký lại và các tệp MOF được biên dịch lại). Quy trình này an toàn và việc triển khai nó sẽ không gây ra thêm bất kỳ sự cố nào với hệ điều hành:
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%\system32\wbem
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
wmiprvse /regserver
sc config winmgmt start= auto
net start winmgmt
for /f %s in ('dir /b *.mof') do mofcomp %s
for /f %s in ('dir /b *.mfl') do mofcomp %s
cd %windir%\SysWOW64\wbem
Các lệnh này có thể được chạy bằng cách chỉ cần dán chúng vào dấu nhắc lệnh hoặc bạn có thể lưu tập lệnh dưới dạng tệp BAT ( wmi_soft_repair.bat ) và chạy nó với quyền của quản trị viên. Sau khi tập lệnh kết thúc, hãy khởi động lại Windows và kiểm tra xem WMI có hoạt động không.
Xây dựng lại Kho lưu trữ WMI
Nếu phương pháp được mô tả ở trên không hữu ích, hãy sử dụng cách phục hồi WMI "khó" hơn ngụ ý việc tạo lại kho lưu trữ WMI.
Kho lưu trữ WMI nằm trong%windir%\System32\Wbem\Repository
và là cơ sở dữ liệu chứa thông tin về siêu dữ liệu và định nghĩa của các lớp WMI. Trong một số trường hợp, kho lưu trữ WMI cũng có thể chứa thông tin lớp tĩnh. Khi kho lưu trữ bị hỏng, lỗi xảy ra trong hoạt động của dịch vụ WMI (Winmgmt). Nếu bạn nghi ngờ rằng kho lưu trữ WMI bị hỏng, hãy nhớ rằng nó chỉ nên được tạo lại nếu không có cách nào khác để khôi phục WMI có hiệu quả.
Lệnh sau sẽ đặt lại cơ sở dữ liệu WMI về trạng thái ban đầu (như sau khi cài đặt Windows sạch). Sử dụng lệnh này để khôi phục cài đặt gốc kho lưu trữ WMI nếu tham số kho lưu trữ cứu hộ không khắc phục được sự cố:
Winmgmt /resetrepository
Nếu cả hai lệnh (Winmgmt /salvagerepository
và Winmgmt /resetrepository
) không khôi phục trạng thái nhất quán của cơ sở dữ liệu WMI, hãy thử thực hiện khôi phục cài đặt gốc cơ sở dữ liệu WMI bằng tập lệnh sau:
sc config winmgmt start= disabled
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%\system32\wbem
winmgmt /resetrepository
winmgmt /resyncperf
if exist Repos_bakup rd Repos_bakup /s /q
rename Repository Repos_bakup
regsvr32 /s %systemroot%\system32\scecli.dll
regsvr32 /s %systemroot%\system32\userenv.dll
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
for /f %s in ('dir /b *.mof') do mofcomp %s
for /f %s in ('dir /b *.mfl') do mofcomp %s
sc config winmgmt start= auto
net start winmgmt
wmiprvse /regserver
Trên phiên bản Windows 64 bit, bạn cũng cần đăng ký lại DLL / EXE và biên dịch lại tệp MOF trong thư mục% windir% \ sysWOW64 \ wbem .
Tập lệnh này loại bỏ hoàn toàn và tạo lại thư mục kho lưu trữ WMI (kho lưu trữ cũ được lưu vào thư mục Repos_backup). Sau khi tập lệnh hoàn thành, bạn cần khởi động lại Windows. Sau đó, kiểm tra dịch vụ WMI bằng một truy vấn đơn giản.
Kiểm tra trạng thái kho lưu trữ WMI. Nếu các lỗi được sửa, winmgmt /verifyrepository
lệnh sẽ trả về:
WMI repository is consistent
Trong bài viết này, chúng tôi đã chỉ ra những cách cơ bản để chẩn đoán và khắc phục sự cố dịch vụ và kho lưu trữ WMI.