Tải bản đầy đủ (.pdf) (10 trang)

Quản lý các mạng Windows dùng script - Phần 3: Hiểu về WMI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (196.17 KB, 10 trang )

Quản lý các mạng Windows dùng script - Phần 3: Hiểu về WMI

Nguồn : quantrimang.com 
Mitch Tulloch
Phần này sẽ giới thiệu với các bạn về nguyên tắc hoạt động của Windows
Management Instrumentation (WMI) cách nó có thể được scrip bằng
VBScript.
Trong hai phần đầu của loạt bài này chúng ta đã biết cách thay đổi địa chỉ IP của
một bộ điều hợp mạng trên máy tính Windows dùng VBScript. Chúng ta cũng đã
biết về nhiều khái niệ
m cơ bản của Windows scripting như lớp (class), đối tượng
(object), thuộc tính (property), phương thức (method) và các kiểu biến khác nhau
như biến xâu (string), biến mảng (array), biến nguyên (integer), biến tập hợp
(collection). Kết thúc ở phần một là một script đơn giản thực hiện được nhiệm vụ
thay đổi địa chỉ, và phần hai bổ sung thêm nhiều tính năng hỗ trợ quan trọng
khác như định nghĩa các biến, triển khai kiể
m soát lỗi, nhận thông tin người dùng
đầu vào, hiển thị xác nhận dữ liệu đầu ra và dẫn giải script bằng các chú thích.
Script cuối cùng của chúng ta hoạt động tốt như mong đợi, nhưng vẫn còn nhiều
thứ rất khó hiểu. Ví dụ như dòng lệnh sau:
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Trong phần đầu chúng ta có chú thích: “Dòng lệnh này kết nối tới namespace
root\cimv2 trên máy cục bộ bằng cách định nghĩa một đối tượng có tên
objWMIService và đặt nó bằng với
điều khiển trả về từ phương thức GetObject”.
Điều này có nghĩa là gì? WMI là gì và nó hoạt động như thế nào? Vì sao khái
niệm này lại quan trọng khi muốn viết được một script tốt để quản trị các máy
Windows?
Hiểu về WMI
WMI ra đời từ thời kỳ của Windows 98 hoặc sớm hơn. Trước đây nó được gọi
với cái tên khác Web-Based Enterprise Management (WBEM), tức Công cụ


quản lý doanh nghiệp dựa trên nề
n tảng Web. WBEM là công nghệ hợp tác phát
triển bởi Microsoft, Cisco, Intel, Compaq và BMC Software nhằm hỗ trợ quản lý
các hệ thống máy chủ và máy để bàn trong môi trường doanh nghiệp. WMI cung
cấp mô hình thể hiện, lưu trữ và truy vấn cấu hình, thông tin trạng thái hay nhiều
khía cạnh hoạt động khác của các máy Windows. Các nhà phát triển có thể dùng
WMI để viết script hoặc quản lý mã nguồn để xem hay chỉnh sửa các thiết lập
cấu hình trên máy Windows, xem trạng thái của các ứng dụng, dịch vụ Windows
và thực hiện toàn bộ nhiều công việc hữu ích khác của một quản trị viên như
triển khai, bảo trì, gỡ lỗi các mạng Windows.
Nói cách khác, nói tới WMI tức là nói tới:

Hệ điều hành Windows: làm việc trên môi trường Windows và cho các
máy chạy Microsoft Windows.

Management: có thể được dùng để quản lý các máy tính này.

Instrumentation: cung cấp nhiều công cụ để xem và chỉnh sửa những thứ
chạy bên trong các máy tính này.
Bạn có thể ví máy tính Windows giống như một chiếc xe ô tô và WMI giống như
nguồn điện hay các thiết bị điện cho phép bảng đo đồng hồ hiển thị tốc độ, nhiệt
độ động cơ, RPM… của ô tô. Bản thân các điều khiển bảng đo đồng hồ này
không phải là WMI. Bạn cầ
n phải đưa ra cách lấy thông tin từ bảng điện và thể
hiện nó ở dạng có thể đọc được. Viết VBScript sử dụng WMI cũng giống như tạo
các bảng đo đồng hồ trung gian, liên hệ với thiết bị bên dưới ô tô và hiển thị
thông tin đối tượng để có thể cho bạn biết cần phải làm gì và điều khiển nào
động cơ đang thực hiện. Nói cách khác, Windows tích hợ
p tất cả công cụ dựng
sẵn này qua WMI. Bạn chỉ cần biết cách làm sao lấy chúng ra để thực hiện

những điều mình muốn như thay đổi địa chỉ IP, xem múi giờ, khởi động lại máy
từ xa, hiển thị danh sách các bản vá đã được cài đặt…
WMI Namespace
Đến giờ, chúng ta vẫn chưa biết gì về cách thức hoạt động của WMI? Cũng
không hẳn thế. Thực ra, để hi
ểu được về WMI đòi hỏi chúng ta cần phải kiên
nhẫn và có một chút kiến thức cơ sở. Hãy bắt đầu bằng cách xem xét các
namespace WMI. Trong thuật ngữ WMI, namespace là một cơ sở dữ liệu logic
của các lớp và các thể hiện của chúng. Dưới đây là một script đơn giản có tên
ShowNamespaces.vbs, liệt kê tất cả các namespace WMI bên dưới namespace
gốc:
Set objWMIService = GetObject("winmgmts:\\.\root")
Set colNamespaces = objWMIService.InstancesOf("__NAMESPACE")

For Each objNamespace In colNamespaces
WScript.Echo objNamespace.Name
Next
Và kết quả chạy script trên một máy Windows XP là:
C:\scripts>cscript ShowNamespaces.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

SECURITY
RSOP
Cli
SecurityCenter
WMI
CIMV2
Policy
Microsoft

DEFAULT
directory
subscription
Mỗi namespace này có thể là một nguồn cho phép bạn truy vấn thông tin liên
quan đến trạng thái hay cấu hình một số yếu tố của máy tính Windows (thông
thường cũng có thể chỉnh sửa cấu hình đó). Các namespace này được tổ chức
theo kiểu cấu trúc phân tầng như cấu trúc thư mục trên ổ cứng. Ví dụ, chúng ta
có thể hiển thị t
ất cả namespace dưới namespace gốc root\CIMV2 bằng cách
thay đổi dòng đầu tiên trong script như sau:
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Khi chạy script đã được thay đổi, kết quả có dạng:
C:\scripts>cscript ShowNamespaces.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

ms_409
Applications
Thực tế, root\CIMV2 là namespace WMI mặc định trên các máy Windows. Điều
này có nghĩa là nếu bạn không mô tả một namespace để kết nối tới trong dòng
đầu tiên của script, WMI sẽ mặc định tự động kết nối tới namespace root\CIMV2.
Vì thế, nếu chúng ta thay đổi dòng đầu tiên thành:
Set objWMIService = GetObject("winmgmts:\\")
thì kết quả cũng giống như trên. Chú ý là chúng ta có thể bỏ phần trước trong
winmgmts:\\.\root\CIMV2 đi. Nhớ lại trong bài một, phần trước thể hiện máy cục
bộ và mặc định WMI cho rằng bạn muốn làm việc với máy cục bộ. Nhưng thực
tế, khi viết script người ta thường sử dụng các biến (và định nghĩa chúng). Vì thế
ở đây chúng ta có thể dùng một script phổ biến hơn
để hiển thị các namespace:
Option Explicit

On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim objWMIService
Dim colNamespaces
Dim objNamespace

strComputer = "."
strWMINamespace = "\root\CIMV2"

Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace)
Set colNamespaces = objWMIService.InstancesOf("__NAMESPACE")

For Each objNamespace In colNamespaces
WScript.Echo objNamespace.Name
Next
Tại sao chúng ta cần tìm hiểu tất cả các vấn đề này? Lý do chính là bởi tính linh
hoạt! Ví dụ, nếu cần chạy script trên một máy từ xa, chúng ta có thể thay đổi
biến strComputer thành địa chỉ của máy từ xa. Hoặc nếu cần hiển thị một phần
khác của namespace, chúng ta có thể thêm một vài dòng vào script để nó nhận
dữ liệu đầu vào của ngườ
i dùng trên biến strWMINamespace.
Nhà cung cấp WMI
Tìm ra đúng namespace là thách thức đầu tiên (mặc dù hầu hết các trường hợp
kết nối tới namespace mặc định là đủ). Ngoài ra bạn còn cần tìm ra đúng nhà
cung cấp phù hợp để truy vấn hoặc update dữ liệu trên hệ thống bạn đang
hướng đến. Dưới đây là script có tên ShowProviders.vbs, hiển thị tất cả nhà
cung cấp WMI cho namespace root\CIMV2:
Option Explicit

On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim objWMIService
Dim colWin32Providers
Dim objWin32Provider

strComputer = "."
strWMINamespace = "\root\CIMV2"

Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace)
Set colWin32Providers = objWMIService.InstancesOf("__Win32Provider")

For Each objWin32Provider In colWin32Providers
WScript.Echo objWin32Provider.Name
Next
Và kết quả sau khi chạy script này trên một máy Windows XP là:
C:\scripts>cscript ShowProviders.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Win32_WIN32_TSLOGONSETTING_Prov
MS_NT_EVENTLOG_PROVIDER
Win32_WIN32_TSENVIRONMENTSETTING_Prov
SCM Event Provider
ProviderSubSystem
VolumeChangeEvents
NamedJobObjectLimitSettingProv
HiPerfCooker_v1

WMIPingProvider
Microsoft WMI Forwarding Event Provider
Win32_WIN32_TSNETWORKADAPTERSETTING_Prov
SystemConfigurationChangeEvents
Win32_WIN32_TERMINALSERVICE_Prov
Win32_WIN32_TSREMOTECONTROLSETTING_Prov
Win32_WIN32_TSNETWORKADAPTERLISTSETTING_Prov
Win32_WIN32_COMPUTERSYSTEMWINDOWSPRODUCTACTIVATIONSETTI
NG_Prov
Win32_WIN32_TSSESSIONDIRECTORY_Prov
CmdTriggerConsumer
Standard Non-COM Event Provider

×