Quản lý mạng Windows bằng Script - Phần 12: Các thuộc tính của lớp
WMI
Quay trở lại phần ba của loạt bài này, chúng ta đã phát triển kịch bản đơn giản có tên
displayTimeZone.vbs để hiển thị thiết lập vùng thời gian hiện hành trên máy tính của bạn: Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem
strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = "SELECT * FROM Win32_TimeZone"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace)
Set colItems = objWMIService.ExecQuery(strWMIQuery)
For Each objItem In colItems
WScript.Echo objItem.Caption
Next
Khi tôi chạy kịch bản này, nó cho kết quả như sau:
C:\scripts>DisplayTimeZone.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
7
0x7 July
8
0x8 August
9
0x9 September
10
0xA October
11
0xB November
12
0xC December
Để sử dụng thông tin này, đơn giản tôi chỉ thay đổi dòng WScript.Echo objItem.Caption thành
WScript.Echo objItem.DaylightMonth và đây là những gì tôi nhận được khi chạy kịch bản này:
C:\scripts>DisplayTimeZone.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
3
Liệt kê các thuộc tính của một lớp
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
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
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2:Win32_TimeZone")
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
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.
Kết luận