Để kết nối tới instance của một lớp, bạn cần phải chỉ định instance ri êng biệt
bằng cách sử dụng key property của lớp. Chúng ta có thể xem key property l à
một thuộc tính cung cấp bộ nhận dạng cần thiết cho một instance của lớp v à
các key property được đánh dấu bằng Key qualifier trong tài liệu MSDN. Hãy
xem trang MSDN về cấu hình lớp Win32_BootConfiguration để có thể biết
thêm về key property cho lớp này. Hình 1 hiển thị một phần của trang này, chỉ
ra cho bạn cách phân biệt key property của lớp:
11 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1760 | Lượt tải: 5
Bạn đang xem nội dung tài liệu Quản lý mạng Windows bằng Script - Kịch bản trả về tất cả các giá trị, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Quản lý mạng Windows bằng Script - Phần 13: Kịch bản trả về tất cả các
giá trị
Trong phần trước của loạt bài này chúng ta đã đến với kịch bản có tên gọi là
DisplayClassProperties.vbs, đây là kịch bản hiển thị tên các thuộc tính của lớp
WMI. Đây là những gì của nội dung kịch bản, bằng sử dụng
Win32_BootConfiguration như một lớp, chúng ta đang kết nối vào biệt danh
WMI:
Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem
strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = ":Win32_BootConfiguration"
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace & strWMIQuery)
WScript.Echo "Number of properties of " & strWMIQuery & " class is " &
objWMIService.Properties_.count
For Each objItem in objWMIService.Properties_
Wscript.Echo "Property: " & objItem.name
Next
Khi chạy kịch bản này (sử dụng các thông tin quản trị cục bộ) trên máy tính
Windows XP (với Cscript.exe được cấu hình từ trước như một kịch bản
Windows mặc định), kết quả cho được như sau:
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
Property: ScratchDirectory
Property: SettingID
Property: TempDirectory
Như đã đề cập đến trong phần cuối, kịch bản này có thể dễ dàng được tùy
chỉnh để hiển thị tên thuộc tính của bất kỳ lớp WMI nào. Ví dụ, nếu muốn hiển
thị tất cả tên thuộc tính trong lớp Win32_DiskPartition, chúng ta chỉ cần thay
đổi dòng:
strWMIQuery = ":Win32_BootConfiguration"
thành:
strWMIQuery = ":Win32_DiskPartition"
Khi chạy lại kịch bản thì kết quả thu được sẽ là:
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_DiskPartition class is 34
Property: Access
Property: Availability
Property: BlockSize
Property: Bootable
Property: BootPartition
Property: Caption
Property: ConfigManagerErrorCode
Property: ConfigManagerUserConfig
Property: CreationClassName
Property: Description
Property: DeviceID
Property: DiskIndex
Property: ErrorCleared
Property: ErrorDescription
Property: ErrorMethodology
Property: HiddenSectors
Property: Index
Property: InstallDate
Property: LastErrorCode
Property: Name
Property: NumberOfBlocks
Property: PNPDeviceID
Property: PowerManagementCapabilities
Property: PowerManagementSupported
Property: PrimaryPartition
Property: Purpose
Property: RewritePartition
Property: Size
Property: StartingOffset
Property: Status
Property: StatusInfo
Property: SystemCreationClassName
Property: SystemName
Property: Type
Hiển thị các giá trị của mỗi thuộc tính
Ở đây chúng ta quay lại để sử dụng Win32_BootConfiguration như một lớp,
nếu thay đổi để kịch bản sẽ liệt kê không chỉ tên của tất cả các thuộc tính mà
còn cả giá trị của chúng thì bạn chỉ cần thay đổi dòng:
Wscript.Echo "Property: " & objItem.name
thành:
Wscript.Echo "Property: " & objItem.name & vbTab & "Value: " &
objItem.value
Kết quả khi chạy:
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 Value:
Property: Caption Value:
Property: ConfigurationPath Value:
Property: Description Value:
Property: LastDrive Value:
Property: Name Value:
Property: ScratchDirectory Value:
Property: SettingID Value:
Property: TempDirectory Value:
Kết quả các giá trị đều là trống. Tại sao lại như vậy?
Đây là những gì đang tiếp tục, hãy xem dòng này:
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace & strWMIQuery)
Việc đưa vào các giá trị của mỗi biến chúng ta có thể ghi lại dòng này như sau:
Set objWMIService =
GetObject("winmgmts:\\.\root\CIMV2:Win32_BootConfiguration")
Lưu ý rằng chúng ta đang kết nối đến một lớp WMI cụ thể
(Win32_BootConfiguration) trong biệt danh WMI để có thể trả về một bộ gồm
có các thuộc tính của lớp này. Sau đó chúng ta muốn hiển thị tên và giá trị của
mỗi thuộc tính. Nhưng các giá trị được trả về NULL (trống rỗng) là bởi vì chưa
kết nối được với nstance cụ thể của lớp này. WMI Glossary nói rằng một
instance là “một thể hiện của thế giới thực đã quản lý đối tượng kèm với một
lớp cụ thể” và “các instance gồm có giá trị thực” và giá trị thực này là những gì
chúng ta muốn. Vậy có thể kết nối đến một instance của một lớp như thế nào?
Để kết nối tới instance của một lớp, bạn cần phải chỉ định instance riêng biệt
bằng cách sử dụng key property của lớp. Chúng ta có thể xem key property là
một thuộc tính cung cấp bộ nhận dạng cần thiết cho một instance của lớp và
các key property được đánh dấu bằng Key qualifier trong tài liệu MSDN. Hãy
xem trang MSDN về cấu hình lớp Win32_BootConfiguration để có thể biết
thêm về key property cho lớp này. Hình 1 hiển thị một phần của trang này, chỉ
ra cho bạn cách phân biệt key property của lớp:
Hình 1: Key property cho lớp Win32_BootConfiguring
Từ trang MSDN này, chúng ta có thể thấy được rằng key property cho lớp
Win32_BootConfiguration là Name. Điều này nghĩa là chúng ta cần phải chỉ
định một giá trị cho thuộc tính này trong chuỗi biệt danh WMI nếu chúng ta
muốn kết nối đến một instance cụ thể của lớp để lấy các giá trị của mỗi thuộc
tính lớp. Hay nói cách khác, tất cả những gì cần phải thực hiện là thay đổi
dòng:
strWMIQuery = ":Win32_BootConfiguration"
thành:
strWMIQuery = ":Win32_BootConfiguration.Name='SOMETHING'"
Tại “SOMETHING” là giá trị thuộc tính tên của một instance cụ thể trong lớp.
Chúng ta có thể tìm thấy giá trị key property của một instance cụ thể của lớp
như thế nào? Có một cách là sử dụng Windows Management Instrumentation
Tester (wbemtest.exe). Bắt đầu bằng đánh wbemtest tại cửa sổ lệnh để bạn có
thể mở được cửa sổ như dưới đây:
Hình 2: Windows Management Instrumentation Tester
Kích nút Connect và kết nối đến không gian tên root\cimv2:
Hình 3: Kết nối đến lớp Win32_BootConfiguration
Kích Connect để quay về cửa sổ chính, nơi có tất cả các nút hiển thị ở đây:
Hình 4: Đã kết nối đến lớp
Kích nút Enum Instances và đánh tên lớp để có thể hiển thị được tất cả các
instance của lớp:
Hình 5: Hiển thị các instance của lớp
Cuối cùng, kích OK để hiển thị tất cả instance của lớp như đã được liệt kê bởi
key property của chúng (Name):
Hình 6: Các instance của Win32_BootConfiguration
Sau khi tất cả đã được loại ra chỉ còn lại có một instance của lớp này trên máy
tính và thuộc tính Name của instance này có giá trị là "BootConfiguration"!
điều này có nghĩa là để hiển thị các giá trị của các thuộc tính của instance của
lớp Win32_BootConfiguration trên máy tính của chúng ta thì tất cả những gì
cần thiết là thay đổi dòng này:
strWMIQuery = ":Win32_BootConfiguration"
thành:
strWMIQuery = ":Win32_BootConfiguration.Name='BootConfiguration'"
Cách khác, kịch bản DisplayClassProperties.vbs được duyệt lại bây giờ như
sau:
Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem
strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery = ":Win32_BootConfiguration.Name='BootConfiguration'"
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace & strWMIQuery)
WScript.Echo "Number of properties of " & strWMIQuery & " class is " &
objWMIService.Properties_.count
For Each objItem in objWMIService.Properties_
Wscript.Echo "Property: " & objItem.name & vbTab & "Value: " &
objItem.value
Next
Khi chạy kịch bản này, nó sẽ không chỉ hiển thị tên các thuộc tính mà còn cả
giá trị của chúng nữa:
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.Name='BootConfiguration' class
is 9
Property: BootDirectory Value: \WINDOWS
Property: Caption Value: \Device\Harddisk0\Partition1
Property: ConfigurationPath Value: \WINDOWS
Property: Description Value: \Device\Harddisk0\Partition1
Property: LastDrive Value: C:
Property: Name Value: BootConfiguration
Property: ScratchDirectory Value:
C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp
Property: SettingID Value:
Property: TempDirectory Value:
C:\WINDOWS\system32\config\systemprofile\Local Settings\Temp
Đặt thông tin này vào bảng để dễ đọc hơn:
BootDirectory \WINDOWS
Caption \Device\Harddisk0\Partition1
ConfigurationPath \WINDOWS
Description \Device\Harddisk0\Partition1
LastDrive C:
Name BootConfiguration
ScratchDirectory C:\WINDOWS\system32\config\systemprofile\Local
Settings\Temp
SettingID Value:
TempDirectory C:\WINDOWS\system32\config\systemprofile\Local
Settings\Temp
Kết luận
Chúng ta có thể thấy rằng kịch bản “trả về tất cả các giá trị” đơn giản này đã
cho những thông tin hữu dụng về máy tính. Đây là một bài tập mà bạn có thể
tự thực hiện: thay vì kết nối đến một instance của lớp
Win32_BootConfiguration (chỉ có một instance của lớp này), bạn hãy cố gắng
kết nối đến một instance của lớp Win32_DiskPartition (lớp có một vài instance
nếu máy tính của bạn có nhiều partition). Để thực hiện điều đó, trước tiên bạn
cần sử dụng wbemtest để hiển thị các instance của lớp này (tìm hiểu thêm về
key property khác với các instance này) và sau đó thay đổi kịch bản
DisplayClassProperties.vbs để nó có thể hiển thị các thuộc tính và các giá trị
của instance cụ thể của lớp này (nghĩa là phân vùng đĩa bạn đã chỉ định).
% Hết %
Văn Linh (Theo Windows Networking)
Các file đính kèm theo tài liệu này:
- quan_ly_mang_windows_bang_script_0136.pdf