Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

ผู้ดูแลระบบ Windows ที่มีประสบการณ์ทุกคนประสบปัญหาบางอย่างกับบริการ WMI (Windows Management Instrumentation) และส่วนประกอบต่างๆ ปัญหาในระบบย่อย WMI มีความสำคัญต่อการทำงานปกติของ Windows ดังนั้นผู้ดูแลระบบจำเป็นต้องตรวจสอบและกู้คืนฟังก์ชันการทำงานของ WMI โดยเร็วที่สุด ในบทความนี้ เราจะอธิบายเทคนิคง่ายๆ ในการแก้ไขปัญหาและแก้ไขปัญหา WMI ใน Windows 10 และ Windows Server 2016/2019

ปัญหากับ WMI อาจบ่งบอกถึงข้อผิดพลาดที่หลากหลาย:

  • ข้อผิดพลาดในการประมวลผลแบบสอบถาม WMI ในบันทึกของระบบและแอปพลิเคชัน (0x80041002 - WBEM_E_NOT_FOUND , WMI: Not Found , 0x80041010 WBEM_E_INVALID_CLASS );
  • ข้อผิดพลาดในการประมวลผล GPO ที่เกี่ยวข้องกับ WMI (งานที่ไม่ถูกต้องของตัวกรอง WMI ของนโยบายกลุ่ม ฯลฯ)
  • การสืบค้น WMI ช้ามาก
  • ข้อผิดพลาดระหว่างการติดตั้งหรือการทำงานของเอเจนต์ SCCM/SCOM
  • ข้อผิดพลาดในสคริปต์ (VBS หรือ PowerShell) ที่ใช้เนมสเปซ WMI (สคริปต์ที่มี Get-WmiObject เป็นต้น)

การแก้ไขปัญหา WMI

ขั้นตอนแรกคือการตรวจสอบ Windows Management Instrumentation (Winmgmt ) บริการได้รับการติดตั้งบน Windows และทำงานอยู่ ตรวจสอบสถานะบริการได้ใน services.msc คอนโซลหรือใช้ PowerShell:

Get-Service Winmgmt | Select DisplayName,Status,ServiceName

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

หากบริการ Winmgmt ทำงานอยู่ คุณสามารถทดสอบความสมบูรณ์ของ WMI ได้ด้วยการสอบถามด้วยคำสั่ง WMI อย่างง่าย คุณสามารถดำเนินการคำขอ wmi จากพรอมต์คำสั่งหรือจาก PowerShell ตัวอย่างเช่น คำสั่งต่อไปนี้จะแสดงรายการโปรแกรมที่ติดตั้งบน Windows:

wmic product get name,version

คำสั่ง PowerShell ที่ง่ายที่สุดในการรับข้อมูลเกี่ยวกับเวอร์ชันและบิลด์ของ Windows 10 ผ่าน WMI อาจมีลักษณะดังนี้:

get-wmiobject Win32_OperatingSystem

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

อย่างที่คุณเห็น บริการ WMI ตอบสนองต่อคำขออย่างถูกต้อง หาก Windows ส่งกลับข้อผิดพลาดเมื่อเรียกใช้แบบสอบถาม WMI ดังกล่าว เป็นไปได้มากว่าบริการ WMI ทำงานไม่ถูกต้อง ที่เก็บ WMI เสียหาย หรือมีปัญหาอื่นๆ

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

ในกรณีของฉัน ตัวอย่างเช่น เมื่อเปิดคุณสมบัติการควบคุม WMI ในสแน็ปอินการจัดการคอมพิวเตอร์ (compmgmt.msc ) ปรากฏข้อความต่อไปนี้:

Failed to initialize all required WMI classes
Win32_Processor. WMI: Invalid namespace
Win32_WMISetting. WMI: Invalid namespace
Win32_OperationSystem. WMI: Invalid namespace

ก่อนหน้านี้ เครื่องมือทางการของ Microsoft WMIDiag.vbs (Microsoft WMI Diagnosis) ใช้ในการวินิจฉัย WMI WMIdiag เป็นสคริปต์ vbs ที่ตรวจสอบระบบย่อย WMI ต่างๆ และเขียนข้อมูลที่รวบรวมไปยังไฟล์บันทึก (โดยค่าเริ่มต้น บันทึกจะอยู่ในโฟลเดอร์ %TEMP% – C:\USERS\%USERNAME%\APPDATA\LOCAL\TEMP\ ). รายงานผลลัพธ์ประกอบด้วยไฟล์ที่มีชื่อขึ้นต้นด้วย WMIDIAG-V2.2 และมีประเภทไฟล์ต่อไปนี้:

  • ไฟล์บันทึกประกอบด้วยรายงานโดยละเอียดเกี่ยวกับกิจกรรมและการทำงานของเครื่องมือ WMIDiag
  • ไฟล์ TXT มีรายงานสรุปข้อผิดพลาดที่พบซึ่งควรค่าแก่การเอาใจใส่
  • ไฟล์ CSV มีข้อมูลที่จำเป็นสำหรับการวิเคราะห์ประสิทธิภาพของ WMI ในระยะยาว

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

เคล็ดลับ ใน Windows x64 เวอร์ชัน wmidiag ควรรันดังนี้:
c:\windows\System32\cscript.exe wmidiag.vbs
ไม่เช่นนั้น จะเกิดข้อผิดพลาด:

WMIDiag must be run from native 64-bit environment. It is not supported in Wow64.

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

หลังจากที่ WMIDiag ทำงานเสร็จแล้ว ผู้ดูแลระบบควรตรวจสอบไฟล์บันทึก วิเคราะห์และพยายามแก้ไขข้อผิดพลาดที่พบ

ขออภัย WMIDiag 2.2 เวอร์ชันล่าสุดทำงานได้อย่างถูกต้องเฉพาะกับเวอร์ชันที่สูงถึง Windows 8.1/Windows Server 2012 R2 เท่านั้น ณ จุดนี้ Microsoft ได้ลบลิงก์เพื่อดาวน์โหลด WMIDiag จาก Download Center แต่ถ้าคุณต้องการ สคริปต์นี้สามารถพบได้บนเว็บ

WMIDiag ให้ข้อมูลโดยละเอียดเกี่ยวกับวิธีการแก้ไขข้อผิดพลาดในเครื่องใน WMI แต่โดยส่วนใหญ่แล้ว จะเป็นงานที่ต้องใช้เวลามากและคุ้มค่ากับเวลาที่ใช้ไปเมื่อมองหาวิธีแก้ไขปัญหาในระบบที่สำคัญเท่านั้น (โดยปกติคือบนเซิร์ฟเวอร์ที่ใช้งานจริง) . ในกรณีของเวิร์กสเตชันของผู้ใช้ การรีเซ็ตและสร้างที่เก็บ WMI ใหม่ใน Windows จะง่ายกว่ามาก

การซ่อมแซมที่เก็บ WMI และการคอมไพล์ไฟล์ MOF ใหม่

ใน Windows 10/Windows Server 2016 คุณสามารถตรวจสอบความสมบูรณ์ของที่เก็บ WMI ได้โดยใช้คำสั่ง:

winmgmt /verifyrepository

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

ถ้าคำสั่งส่งกลับว่าฐานข้อมูล WMI อยู่ในสถานะไม่สอดคล้องกัน (INCONSISTENT หรือ WMI repository verification failed ) คุณควรลองทำการแก้ไขข้อผิดพลาดของที่เก็บ WMI:

Winmgmt /salvagerepository

WMI repository has been salvaged.

คำสั่งนี้จะตรวจสอบความสอดคล้องของที่เก็บ WMI และสร้างฐานข้อมูล WMI ใหม่ หากพบความไม่สอดคล้องกัน

เริ่มบริการ WMI ใหม่:

net stop Winmgmt
net start Winmgmt

หากการแก้ไข WMI มาตรฐานใช้ไม่ได้ ให้ลองใช้สคริปต์ต่อไปนี้ สคริปต์นี้เป็นตัวเลือก "อ่อน" สำหรับการกู้คืนบริการ WMI บนคอมพิวเตอร์ (ไลบรารี DLL และ WMI ได้รับการลงทะเบียนใหม่ และไฟล์ MOF จะถูกคอมไพล์ใหม่) ขั้นตอนนี้ปลอดภัย และการใช้งานไม่ควรทำให้เกิดปัญหากับระบบปฏิบัติการอีกต่อไป:

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

บน Windows รุ่น 64 บิต ต้องดำเนินการขั้นตอนเหล่านี้สำหรับไดเรกทอรี SysWOW64 ด้วย แทนที่บรรทัดที่สามด้วย:

cd %windir%\SysWOW64\wbem

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

คุณสามารถเรียกใช้คำสั่งเหล่านี้ได้โดยวางคำสั่งเหล่านี้ลงในพร้อมท์คำสั่ง หรือคุณสามารถบันทึกสคริปต์เป็นไฟล์ BAT (wmi_soft_repair.bat ) และเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบ หลังจากสคริปต์เสร็จสิ้น ให้รีสตาร์ท Windows และตรวจสอบว่า WMI ทำงานหรือไม่

สร้างที่เก็บ WMI ใหม่

หากวิธีการที่อธิบายไว้ข้างต้นไม่ได้ผล ให้ใช้วิธีการกู้คืน WMI ที่ "ยากกว่า" ซึ่งหมายถึงการสร้างที่เก็บ WMI ขึ้นมาใหม่

ที่เก็บ WMI อยู่ใน %windir%\System32\Wbem\Repository และเป็นฐานข้อมูลที่มีข้อมูลเมตาดาต้าและคำจำกัดความของคลาส WMI ในบางกรณี ที่เก็บ WMI ยังสามารถมีข้อมูลคลาสสแตติก เมื่อที่เก็บเสียหาย ข้อผิดพลาดเกิดขึ้นในกิจกรรมของบริการ WMI (Winmgmt)

หากคุณสงสัยว่าที่เก็บ WMI เสียหาย โปรดทราบว่าควรสร้างใหม่ก็ต่อเมื่อวิธีการอื่นในการกู้คืน WMI ไม่มีประสิทธิภาพ

คำสั่งต่อไปนี้จะรีเซ็ตฐานข้อมูล WMI เป็นสถานะดั้งเดิม (เช่นหลังจากติดตั้ง Windows ใหม่ทั้งหมด) ใช้คำสั่งนี้เพื่อฮาร์ดรีเซ็ตที่เก็บ WMI หากพารามิเตอร์ salvagerepository ไม่สามารถแก้ไขปัญหาได้:

Winmgmt /resetrepository

เคล็ดลับ ในทางปฏิบัติ มีหลายกรณีที่การสร้างที่เก็บ WMI ใหม่ทำให้เกิดปัญหากับซอฟต์แวร์ของบริษัทอื่น เหตุผลก็คือเร็กคอร์ดทั้งหมดในฐานข้อมูล WMI ถูกล้าง (เป็นสถานะของระบบที่สะอาด) ซอฟต์แวร์ดังกล่าวอาจต้องติดตั้งใหม่ในโหมดการกู้คืน

หากทั้งสองคำสั่ง (Winmgmt /salvagerepository และ Winmgmt /resetrepository ) ไม่ได้กู้คืนสถานะที่สอดคล้องกันของฐานข้อมูล WMI พยายามทำการฮาร์ดรีเซ็ตฐานข้อมูล WMI ด้วยสคริปต์ต่อไปนี้:

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

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

ใน Windows รุ่น 64 บิต คุณต้องลงทะเบียน DLL/EXE ใหม่ และคอมไพล์ไฟล์ MOF ใหม่ในไดเรกทอรี %windir%\sysWOW64\wbem

สคริปต์นี้จะลบและสร้างโฟลเดอร์ที่เก็บ WMI ใหม่ทั้งหมด (ที่เก็บเก่าจะถูกบันทึกไว้ในไดเร็กทอรี Repos_backup) หลังจากสคริปต์เสร็จสิ้น คุณต้องรีสตาร์ท Windows จากนั้นตรวจสอบบริการ WMI ด้วยแบบสอบถามง่ายๆ

ตรวจสอบสถานะที่เก็บ WMI หากข้อผิดพลาดได้รับการแก้ไข winmgmt /verifyrepository คำสั่งควรส่งคืน:

WMI repository is consistent

จะแก้ไขปัญหา ซ่อมแซม และสร้าง WMI Repository ใหม่ได้อย่างไร

ในบทความนี้ เราได้แสดงวิธีพื้นฐานในการวินิจฉัยและแก้ไขปัญหาบริการและที่เก็บ WMI