Các thuộc tín của WMI

Một phần của tài liệu Giáo trình quản trị hệ thống mail server và web server (nghề quản trị mạng máy tính) (Trang 35 - 40)

2. Nguyên tắc hoạt động của WMI

2.5.Các thuộc tín của WMI

Bây giờ chúng ta có thể tiếp tục quá trình bằng cách thay đổi thuộc tính <property> trong WScript.Echo objItem.<property> và vì vậy từ từ làm việc thông qua hiển thị từng cái một trong các thuộc tính của lớp Win32_TimeZone, nhƣng đây có phải là cách dễ dàng hơn? Chúng ta có thể hiển thị đƣợc các thuộc tính của lớp này trong một kịch bản mà không cần đặt tên chúng trong kịch bản? Điều này thực hiện đƣợc nhƣng trƣớc khi thực hiện hãy thử và liệt kê số các thuộc tính của lớp này. Đây là cách chúng ta thực hiện:

Option Explicit

On Error Resume Next Dim strComputer Dim strWMINamespace Dim strWMIQuery Dim objWMIService Dim colItems Dim objItem strComputer = "." strWMINamespace = "\root\CIMV2" strWMIQuery = ":Win32_TimeZone"

30 & strWMIQuery)

WScript.Echo "Number of properties of " & strWMIQuery & " class is " & objWMIService.Properties_.count

Đây là kết quả chạy kịch bản mới này, kịch bản mà chúng ta sẽ gọi nó là DisplayClassProperties.vbs:

C:\scripts>DisplayClassProperties.vbs

Microsoft (R) Windows Script Host Version 5.6

Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Number of properties of :Win32_TimeZone class is 24

Xem một bảng kiểm kê các thuộc tính tại Win32_TimeZone MSDN sẽ cho chúng ta thấy con số 24 là hoàn toàn chính xác, điều đó có nghĩa là lớp Win32_TimeZone có 24 thuộc tính trong tổng số.

Kịch bản mới này làm việc nhƣ thế nào? Đầu tiên bạn lƣu ý rằng thay vì kết nối đến không gian tên mặc định ("\root\CIMV2") trên máy tính cục bộ (“.”) chúng ta kết nối trực tiếp đến lớp Win32_TimeZone trên máy tính. Hay nói theo cách khác, dòng:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace & strWMIQuery)

có thể đƣợc thay thế bởi

Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone") và nó sẽ thực hiện các công việc một cách tƣơng tự. Một điều khác mà bạn sẽ chú ý là một thứ trong dòng cuối cùng của kịch bản:

objWMIService.Properties_.count

Chúng ta biết về các thuộc tính (nhƣ <object>.<property>) và các phƣơng pháp (<object>.<method>) từ phần đầu tiên của loạt bài này, nhƣng

objWMIService.Properties_.count có hai chu kỳ trong nó. Điều gì sẽ xảy ra ở đây? Chúng ta hãy quay lại dòng này một lần nữa:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace & strWMIQuery)

những gì chúng ta đã nhìn thấy tƣơng đƣơng với

31

Biệt danh trong lệnh WMI này là winmgmts:\\.\root\CIMV2:Win32_TimeZone và nó định nghĩa đƣờng dẫn đến lớp WMI mà chúng ta quan tâm trong việc tăng truy cập, khi bạn sử dụng hàm GetObject trên biệt danh này thì nó sẽ trả về một đối tƣợng

SwbemObject, đối tƣợng này sau đó đƣợc gán cho biến objWMIService bằng lệnh Set. (Chính xác hơn, hàm GetObject trả lại một tham chiếu cho đối tƣợng SwbemObject đã đƣợc cung cấp bởi thành phần COM).

Nói cách khác, khi lệnh

Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone") đƣợc thực thi, thì chúng ta sẽ có một đối tƣợng SwbemObject đƣợc trả về. Các đối tƣợng có các thuộc tính, vì vậy những thuộc tính gì mà đối tƣợng SwmebObject có đƣợc? Một thuộc tính đƣợc gọi là Properties_ và sử dụng kí hiệu chuẩn <object><properties> điều này có nghĩa là Properties_ property của một đối tƣợng SwebmObject sẽ đƣợc định nghĩa bởi SWbemObject.Properties_ ( đƣờng gạch dƣới từ là phần tên của thuộc tính). Bạn có thể đọc thêm về SWbemObject.Properties_ property của đối tƣợng SwebmObject trên trang này, và nó sẽ cho bạn thấy rằng thuộc tính này là “một bộ sƣu tập các thuộc tính của lớp hiện tại” hoặc theo cách nói khác, SWbemObject.Properties_ property là một bộ sƣu tập. Bạn cũng nên nhớ rằng một bộ sƣu tập là một loại đối tƣơng gồm có nhiều thành phần (thành phần đó có thể là các đối tƣợng khác hoặc các thuộc tính nhƣng không phải là các phƣơng pháp).

Quả thực SWbemObject.Properties_ là một bộ sƣu tập (một kiểu đối tƣợng) và khi đối tƣợng có các thuộc tính thì bạn có thể sử dụng các thuộc tính này. Một thuộc tính mà một bộ sƣu tập có là .count, nó có thể trả về số các thuộc tính của đối tƣợng, nghĩa là <collection>.<count> trả về số các thành phần trong bộ sƣu tập. Điều này nghĩa là SWbemObject.Properties_.count là một thuộc tính .count của SWbemObject.Properties_ object, vì vậy xuất hiện hai chu kỳ thay vì một chu kỳ thông thƣờng trong cú pháp <object>.<property>. Ít nhất, đó là cách hiểu vấn đề này, nhƣng bạn nên nhớ rằng chúng tôi không phải là những nhà phát triển – mà cũng chỉ là một ngƣời đam mê giống nhƣ bạn, những ngƣời đang tìm hiểu kịch bản để phục vụ công việc của mình!

Hiểnthị các thuộc tính của lớp

Bây giờ chúng ta có thể liệt kê các thuộc tính của lớp Win32_TimeZone, có thể trả về tên của các thuộc tính nhƣ thế nào? Bằng cách nối thêm các dòng dƣới đây vào phần cuối của kịch bản DisplayClassProperties.vbs:

32 For Each objItem in objWMIService.Properties_ Wscript.Echo "Property: " & objItem.name Next

Đây là những gì chúng ta có khi chạy kịch bản: C:\scripts>DisplayClassProperties.vbs

Microsoft (R) Windows Script Host Version 5.6

Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Number of properties of :Win32_TimeZone class is 24

Property: Bias Property: Caption Property: DaylightBias Property: DaylightDay Property: DaylightDayOfWeek Property: DaylightHour Property: DaylightMillisecond Property: DaylightMinute Property: DaylightMonth Property: DaylightName Property: DaylightSecond Property: DaylightYear Property: Description Property: SettingID Property: StandardBias Property: StandardDay Property: StandardDayOfWeek Property: StandardHour Property: StandardMillisecond Property: StandardMinute Property: StandardMonth Property: StandardName Property: StandardSecond Property: StandardYear

Kiểm tra trang MSDN trƣớc, trang đã mô tả về lớp Win32_TimeZone, chúng ta có thể thấy ở trên có tên của các thuộc tính lớp.

33

Kết luận

Sức mạnh của phƣơng pháp này là nó cho phép chúng ta liệt kê tên các thuộc tính của lớp WMI, vì vậy chúng ta có thể học thêm về chúng (nhớ rằng trong phần 3 của loạt bài này chúng ta đã thấy cách liệt kê các lớp WMI của một không gian tên và cùng với danh sách đó chúng ta có thể khám phá và thấy đƣợc những gì chúng ta có thể quản lý thông qua sử dụng WMI).

Ví dụ, nếu chúng ta muốn liệt kê danh sách các thuộc tính của lớp

Win32_BootConfiguration WMI bằng sử dụng kịch bản DisplayClassProperties.vbs, tất cả những gì cần thực hiện là thay đổi dòng:

strWMIQuery = ":Win32_TimeZone" thành dòng nhƣ dƣới đây:

strWMIQuery = ":Win32_BootConfiguration"

Khi chúng ta thực hiện thay đổi này và chạy lại kịch bản thì sẽ có đƣợc kết quả: C:\scripts>DisplayClassProperties.vbs

Microsoft (R) Windows Script Host Version 5.6

Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Number of properties of :Win32_BootConfiguration class is 9

Property: BootDirectory Property: Caption

Property: ConfigurationPath Property: Description

Property: LastDrive Property: Name Value: Property: ScratchDirectory Property: SettingID

34

CHƢƠNG 3. VIẾT KỊCH BẢN CHẠY TRÊN CÁC MÁY TỪ XA (SCRIPTING REMOTE)

Một phần của tài liệu Giáo trình quản trị hệ thống mail server và web server (nghề quản trị mạng máy tính) (Trang 35 - 40)