Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Bảo Trì Máy Tính

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Bạn có bao giờ cần biết chi tiết CPU, bộ nhớ, số serial, mẫu máy, hoặc phiên bản phần mềm cài đặt, nhưng không biết tìm đâu? Chỉ với chút code đơn giản trong Excel, bạn có thể trích xuất toàn bộ thư viện thông tin Windows PC.

Nghe quá tốt để tin? Đó là Windows, nếu bạn biết cách dùng.

Bạn có thể cần "làm bẩn tay" chút, nhưng bài này cung cấp toàn bộ code cần thiết, và cách đưa vào Excel chạy. Khi xong, bạn có sheet Excel mà mỗi lần mở, nó nói cho bạn mọi thứ muốn biết về hệ thống máy tính.

Lưu ý chỉ hoạt động với phiên bản desktop Excel, có được qua dùng thử miễn phí Office.

Ma Thuật Của WMI

Trên bất kỳ máy tính chạy OS Microsoft, bạn truy cập bộ mở rộng mạnh gọi là Windows Management Instrumentation (WMI), cung cấp phương pháp mạnh và mở rộng truy cập thông tin và thông số kỹ thuật về máy tính, OS, và phần mềm cài.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Tốt nhất, WMI truy cập được từ ngôn ngữ lập trình như VBA, có sẵn hầu hết sản phẩm Microsoft Office.

Thiết Lập Spreadsheet Tự Động

Trước, tạo workbook Excel mới đặt tên như MyComputerInfo.xlsm (Macro enabled). Mở, bỏ qua Sheet1, đổi tên 11 sheet tiếp theo:

  • Network
  • LogicalDisk
  • Processor
  • Physical Memory
  • Video Controller
  • OnBoardDevices
  • Operating System
  • Printer
  • Software
  • Accounts
  • Services

Chúng sẽ chứa chi tiết máy tính, và cập nhật mỗi lần mở spreadsheet này.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Tiếp, vào mục Developer và dưới Controls nhấp View Code.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Nếu không thấy Developer, nhấp File > Options > Customize Ribbon, đổi dropdown Choose commands from thành All Tabs, chọn Developer nhấn Add>> thêm vào Customized Ribbon. Đảm bảo checkbox Developer bên đó được chọn sau khi thêm.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Khi đã trong trình soạn thảo VBA code, bạn chỉ cần thêm script dưới vào module. Các script này làm toàn bộ việc nặng nhọc. Bạn không cần tự viết code, chỉ copy paste như dưới.

Khi xong copy paste dùng code phần sau, chỉ cần thêm chút code tải sheet, và xong.

Sẵn sàng copy paste? Bắt đầu nào.

Xây Dựng Module WMI

Cảm hứng code từ tài nguyên Google Sites tuyệt vời Beyond Excel. Ví dụ là subroutine WMI(), truyền toàn bộ thông tin mạng máy vào khu vực debug môi trường lập trình Excel.

Tất nhiên, nó không ích gì ở đó, nên tôi sửa code để xuất chi tiết ra sheet bạn tạo bước đầu.

Trong khu vực điều hướng code, bạn cũng thấy phần Modules và thành phần Module1. Double click mở. Nếu không thấy folder Modules, mở rộng Insert từ menu chọn Module.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Khu vực này chứa tất cả subroutine dùng WMI kéo thông tin quan trọng máy, nạp vào sheet bạn tạo.

Đặt dòng sau ở đầu cửa sổ code riêng biệt.

Public oWMISrvEx As Object 'SWbemServicesEx
Public oWMIObjSet As Object 'SWbemServicesObjectSet
Public oWMIObjEx As Object 'SWbemObjectEx
Public oWMIProp As Object 'SWbemProperty
Public sWQL As String 'WQL Statement
Public n

Nên trông như sau khi xong:

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Dán code sau vào Module1 dưới dòng vừa tạo:

Sub NetworkWMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)
intRow = 2
strRow = Str(intRow)
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
For Each oWMIObjEx In oWMIObjSet
For Each oWMIProp In oWMIObjEx.Properties_
If Not IsNull(oWMIProp.Value) Then
If IsArray(oWMIProp.Value) Then
For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
Next
Else
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
End If
End If
Next
'End If
Next
End Sub

Bây giờ, tạo hàm giống hệt cho mỗi sheet bạn tạo phần đầu với vài khác biệt nhỏ.

Ví dụ, tiếp theo copy code NetworkWMI(), dán dưới cuối code đó, thay "NetworkWMI()" thành "LogicalDiskWMI()"

Chỉ có vài phần cần đổi để code điền sheet đúng.

Đổi này:

sWQL = "Select * From Win32_NetworkAdapterConfiguration"

Thành này:

sWQL = "Select * From Win32_LogicalDisk"

Đổi bốn dòng này:

ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True

Thành này:

ThisWorkbook.Sheets("LogicalDisk").Range("A1").Value = "Name"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("LogicalDisk").Range("B1").Value = "Value"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 2).Font.Bold = True

Đổi hai dòng này:

ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)

Thành này:

ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)

Và ba dòng này:

ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft

Thành này:

ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft

Bây giờ, bạn gần xong!

Lặp lại cho mọi tab workbook. Hàm sẽ như sau:

  • "ProcessorWMI()" cho sheet "Processor".
  • "PhysicalMemWMI()" cho sheet "Physical Memory".
  • "VideoControlWMI()" cho sheet "Video Controller".
  • "OnBoardWMI()" cho sheet "OnBoardDevices".
  • "PrinterWMI()" cho sheet "Printer".
  • "OperatingWMI()" cho sheet Operating System.
  • "SoftwareWMI()" cho sheet "Software".
  • "ServicesWMI()" cho sheet "Services".

Đối tượng "Win32_" đặc biệt cần để truy cập thông tin máy:

  • Win32_NetworkAdapterConfiguration - Tất cả cài đặt cấu hình mạng
  • Win32_LogicalDisk - Ổ đĩa dung lượng và không gian trống.
  • Win32_Processor - Thông số CPU
  • Win32_PhysicalMemoryArray - RAM/Kích thước bộ nhớ cài
  • Win32_VideoController - Bộ chuyển đổi đồ họa và cài đặt
  • Win32_OnBoardDevice - Thiết bị bo mạch chủ
  • Win32_OperatingSystem - Phiên bản Windows với Serial Number
  • WIn32_Printer - Máy in đã cài
  • Win32_Product - Phần mềm đã cài
  • Win32_BaseService - Liệt kê dịch vụ chạy (hoặc dừng) trên PC cùng đường dẫn và tên file dịch vụ.

Hoàn tất copy/paste và chỉnh từng hàm ở khu vực Module1. Khi xong, chuyển phần tiếp theo.

Nhớ lưu code ở view VB! Nếu ban đầu lưu workbook dạng .xls, Excel sẽ yêu cầu dùng Macro enabled như .xlsm.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Tự Động Nạp Workbook

Khi đã có những hàm mạnh đó, chỉ còn chạy chúng mỗi khi workbook mở. Việc này rất dễ.

Trong object browser bên trái, dưới Microsoft Excel Objects, bạn thấy ThisWorkbook. Double click mở.

Ở đầu khu vực code, hai dropdown, đổi bên trái thành Workbook và bên phải Open.

Xem Tất Cả Thông Tin PC Bằng Script Excel VBA Đơn Giản

Bạn sẽ thấy hàm tự tạo Private Sub Workbook_Open().

Bên trong, gõ các dòng code sau để hàm trông như sau:

Private Sub Workbook_Open()
NetworkWMI
LogicalDiskWMI
ProcessorWMI
PhysicalMemWMI
VideoControlWMI
OnBoardWMI
PrinterWMI
SoftwareWMI
OperatingWMI
ServicesWMI
End Sub

Bây giờ, mỗi lần mở workbook, từng hàm mới tạo được gọi, kéo dữ liệu từ máy, nạp vào sheet phù hợp.

Để xem hoạt động, lưu code, đóng cửa sổ code, lưu workbook, đóng nó. Mở lại file vừa đóng, bạn khám phá mỗi sheet chứa khối lượng dữ liệu máy.

Vì workbook chứa Macro, có thể bị tắt vì bảo mật, bạn có thể phải nhấp Enable Content đầu sheet để thu thập dữ liệu.

Cảnh báo - thu thập NHIỀU dữ liệu, chờ vài phút load lần đầu mở file.

Thu Thập Thông Tin Máy Tính

Điều kỳ diệu dùng WMI là dữ liệu trên chỉ đỉnh ngọn băng. Có hàng trăm lớp WMI khác chứa thông tin mọi khía cạnh hệ thống máy.

Nếu bạn phiêu lưu muốn tiến xa hơn, bạn có thể biến sheet đầu thành dashboard, dùng dữ liệu sheet khác feed dashboard đó.

Tóm lại, dùng công cụ mới này, bạn thu thập và hiển thị thông tin hơn hầu hết chuyên gia IT nhận ra có sẵn về hệ thống máy, và làm trong phần nhỏ thời gian chuyên gia đào móc Control Panel và khu vực Administrative tìm chi tiết.

Bạn thấy mình xây dựng và dùng công cụ như này? Bạn là lập trình VBA và từng dùng lớp WMI? Chia sẻ trải nghiệm và ý tưởng ở bình luận!

Nguồn ảnh: Adriano Castelli via Shutterstock.com, Mclek via Shutterstock