Triển khaiWindows7 – Phần18:XácđịnhUUIDcủamáytính
Trong phần này chúng tôi sẽ giới thiệu cho các bạn cách tạo kịch bản để xác
định UUIDmáy tính.
Mẹo: Bạn có thể tìm kiếm thêm thông tin về việc tự động hóa triểnkhai LTI
trong Windows7 Resource Kit
của Microsoft.
Trong phần 16 của loạt bài này, chúng tôi đã giới thiệu cho các bạn về cách
sử dụng cơ sở dữ liệu MDT để tùy chỉnh triển khaiWindows7 dựa trên
UUID của các máytính mục tiêu. Trong phần đó, các bạn cũng đã biết cách
sử dụng WMI để xácđịnhUUIDcủamáytính nếu UUID này không được
hiển thị trong BIOS hệ thống hoặc tàiliệu đi kèm. Phương pháp mà chúng
tôi đã giới thiệu để thực hiện việc này có đôi chút khiến các bạn khó hiểu,
thêm vào đó là máytính mà bạn muốn xácđịnhUUID đã cài đặt hệ điều
hành Windows.
Điều này làm xuất hiện một câu hỏi: Liệu có thể sử dụng WMI để xácđịnh
UUID máytính nếu không có hệ điều hành cài đặt trên nó? Câu trả lời là
Yes. Để thực hiện điều này, đầu tiên chúng ta cần xóa phần mã đã được thực
hiện trong hai phần trước. Sau đó xây dựng một Windows Preinstallation
Environment (WinPE) image, add một kịch bản vào image này, burn image
vào đĩa CD. Sau đó có thể sử dụng CD này để khởi động máytính mới và
chạy kịch bản để xácđịnhUUIDcủa hệ thống.
Đó là những gì mà chúng tôi muốn giới thiệu cho các bạn trong phần này và
phần tiếp theo ngay sau nó. Đầu tiên trong phần này, chúng tôi sẽ tạo một
kịch bản để hiển thị UUIDmáy tính. Sau đó trong phần tiếp theo, chúng tôi
sẽ giới thiệu cách tạo một CD WinPE "tools" tùy chỉnh để bạn có thể sử
dụng kịch bản trên hệ thống máytính chưa được cài đặt hệ điều hành nhằm
xác địnhUUIDcủa hệ thống. Khi đã sử dụng CD WinPE của mình để chạy
kịch bản trên một số máytính mục tiêu, bạn có thể nhập các UUID này vào
cơ sở dữ liệu MDT và triểnkhai các Windows image tùy chỉnh cho mỗi máy
tính như mong muốn.
Viết kịch bản xácđịnhUUID
Trong phần 16 của loạt bài này, chúng tôi đã giới thiệu cho các bạn cách xác
định UUIDcủamáytính bằng WMI như sau:
1. Chúng ta bắt đầu với kịch bản DisplayClassProperties.vbs để hiển thị
tên của tất cả các thuộc tính lớp WMI cùng với các giá trị của các
thuộc tính này.
2. Tiếp đến chúng ta có thể chạy lệnh WBEMTEST trên máytính để xác
định cách cần tùy chỉnh dòng strWMIQuery = <string> trong kịch
bản của chúng ta như thế nào nhằm làm cho kịch bản làm việc trên
một máytính nào đó. Các bước để thực hiện việc này là: (a) chạy
WBEMTEST, (b) kết nối đến root\cimv2 phần tên, (c) kích Enum
Instances, (d) đánh Win32_ComputerSystemProduct, (e) nhấn OK.
Đầu ra kết quả từ WBEMTEST sẽ được sử dụng làm giá trị của
<string> trong dòng trên của kịch bản. Quá trình này phải được thực
hiện một cách thủ công vì đầu ra của lệnh WBEMTEST không hỗ trợ
việc copy vào clipboard!
3. Khi kịch bản được tùy chỉnh, chúng ta chạy nó trên máytính và tích
hợp nó vì một phầncủa đầu ra kịch bản là UUIDcủamáy tính.
Tất cả các thao tác trên có thể làm cho bạn hơi khó hiểu – chắc chắn bạn
cũng sẽ thích không phải chạy WBEMTEST trên máytính hoặc phải tùy
chỉnh kịch bản mỗi khi phải chạy nó cũng như thích có được kịch bản để cho
ra kết quả UUIDmáytính chứ không phải một loạt các thông tin cần phải
chọn lọc.
Ở đây có cách để thực hiện điều đó. Chúng ta cần bắt đầu với bằng file
DisplayClassProperties.vbs đã được thay đổi lấy từ phần 16 của loạt bài
này.
' DisplayClassProperties.vbs
' Used to find the UUID of a specific desktop computer
' By Mitch Tulloch (www.mtit.com)
Option Explicit
On Error Resume Next
Dim strComputer
Dim strWMINamespace
Dim strWMIQuery
Dim objWMIService
Dim colItems
Dim objItem
strComputer = "."
strWMINamespace = "\root\CIMV2"
strWMIQuery =
":Win32_ComputerSystemProduct.IdentifyingNumber='MXG5380254
NA540',Name='PY196AV-ABA
a1130e',Version='0n31211CT101AMBEM00'"
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
Lúc này, để hoàn thiện những gì WBEMTEST thực hiện và trả về các
instance của lớp Win32_ComputerSystemProduct chúng ta cần sử dụng
phương pháp SWbemServices.InstancesOf
của đối tượng SwbemServices.
Để chỉ ra cách thực hiện, chúng toi đã điều chỉnh kịch bản dưới đây từ một
trang hướng dẫn viết kịch bản cho Windows 2000 khá ưu việt (tham khảo
kịch bản gốc tại đây
)
strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
Wscript.Echo "Name: " & objSWbemObject.Name
Next
Phiên bản được tùy chỉnh cho kịch bản ở trên như sau:
strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
("SELECT * FROM Win32_ComputerSystemProduct")
For Each objSWbemObject In colSWbemObjectSet
strIdentifyingNumber = objSWbemObject.IdentifyingNumber
strName = objSWbemObject.Name
strVersion = objSWbemObject.Version
Next
Wscript.Echo "IdentifyingNumber: " & strIdentifyingNumber
Wscript.Echo "Name: " & strName
Wscript.Echo "Version: " & strVersion
Lý do chúng ta cần kịch bản trên để xácđịnh các giá trị của ba thuộc tính
IdentifyingNumber, Name và Version là vì lớp
Win32_ComputerSystemProduct có ba thuộc tính “key” có tên
IdentifyingNumber, Name và Version. Để thấy chúng, bạn có thể tham khảo
tài liệu trên MSDN tại đây
. Cần phải nhớ rằng thuộc tính key là thuộc tính
cung cấp nhận dạng duy nhất cho mỗi một instance của một lớp, và để kết
nối đến một instance của một lớp, bạn cần chỉ định instance cụ thể bằng cách
sử dụng thuộc tính key của lớp. Các thuộc tính key sẽ được đánh dấu bằng
"Key" trong tàiliệu MSDN.
Lúc này chúng ta chỉ cần kết hợp kịch bản đã được tùy chỉnh ở trên với kịch
bản DisplayClassProperties.vbs để tạo thành một kịch bản mới có tên
UUID.vbs (lưu ý rằng chúng tôi đã đơn giản hóa kịch bản này bằng cách bỏ
qua các định nghĩa biến và quản lý lỗi):
'UUID.vbs
'Displays the UUID of a computer
'By Mitch Tulloch (www.mtit.com)
strComputer = "."
strWMINamespace = "\root\CIMV2"
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery("SELECT *
FROM Win32_ComputerSystemProduct")
For Each objSWbemObject In colSWbemObjectSet
strIdentifyingNumber = objSWbemObject.IdentifyingNumber
strName = objSWbemObject.Name
strVersion = objSWbemObject.Version
Next
strWMIQuery = ":Win32_ComputerSystemProduct.IdentifyingNumber='" &
strIdentifyingNumber _
& "',Name='" & strName & "',Version='" & strVersion & chr(39)
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
strWMINamespace & strWMIQuery)
For Each objItem in objWMIService.Properties_
If objItem.name = "UUID" Then
Wscript.Echo objItem.name & " = " & objItem.value
End If
Next
Lưu ý rằng phần quan trọng ở đây là làm sao bảo đảm các dấu ngoặc kép
đúng trong câu lệnh strWMIQuery = <string>. Cho ví dụ, câu lệnh kết thúc
bằng & chr(39) cần gắn thêm vào một dấu đóng của ngoặc kép để hoàn thiện
cú pháp câu lệnh. Tuy nhiên cũng cần thực hiện một mẹo nhỏ mà chúng tôi
đã áp dụng để kịch bản trên làm việc – cách thức mà chúng tôi thực hiện là
chèn tạm thời một câu lệnh Wscript.echo strWmiQuery ngay sau lệnh
strWMIQuery = <string> để có thể chạy kịch bản và đầu ra của các nội
dung của chuỗi nhằm xácđịnh xem liệu chuỗi có cú pháp đúng hay không,
sau đó thực hiện thay đổi và chạy kịch bản lại lần nữa cho tới khi có được cú
pháp đúng.
Test kịch bản
Giờ đây chúng ta sẽ đi test xem kịch bản của mình có làm việc hay không
bằng cách chạy nó từ dòng lệnh trên máytính có cài đặt hệ điều hành
Windows XP (hình 1):
Hình 1: Chạy file UUID.vbs trên máytính có hệ điều hành
Chúng ta hãy làm đơn giản hóa việc chạy kịch bản bằng cách tạo một file
batch đi theo mang tên UUID.bat:
@ECHO OFF
cscript.exe //nologo UUID.vbs
Cách thức thực hiện này sẽ làm cho chúng ta dễ dàng hơn trong việc chạy
kịch bản cũng như làm cho đầu ra dễ hiểu hơn (hình 2):
Hình 2: Chạy file UUID.bat trên máytính có một hệ điều hành
Kết luận
Lúc này kịch bản đã sẵn sàng, chúng ta cần xây dựng một image WinPE và
tích hợp kịch bản của mình vào trong image này nhằm có thể chạy kịch bản
của mình trên các hệ thống mới chưa có hệ điều hành.
. Triển khai Windows 7 – Phần 18: Xác định UUID của máy tính
Trong phần này chúng tôi sẽ giới thiệu cho các bạn cách tạo kịch bản để xác
định UUID máy. dữ liệu MDT để tùy chỉnh triển khai Windows 7 dựa trên
UUID của các máy tính mục tiêu. Trong phần đó, các bạn cũng đã biết cách
sử dụng WMI để xác định