Tài liệu 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ị - Pdf 10

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

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

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_BootConfig
uration")
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:

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:

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).


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status