Tải bản đầy đủ (.pdf) (10 trang)

Quản lý các mạng Windows dùng script - Phần 2: Hoàn chỉnh script

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (183.56 KB, 10 trang )

Quản lý các mạng Windows dùng script - Phần 2: Hoàn chỉnh script

Nguồn : quantrimang.com 
Mitch Tulloch
Ở phần trước chúng ta đã biết đến một số khái niệm cơ bản về kỹ thuật scripting
như đối tượng (object), phương thức (method), thuộc tính (property) và viết ra
một scritp đơn giản thay đổi địa chỉ IP gán cho bộ điều hợp mạng. Sau đó, chúng
ta đã sử dụng bốn script đầu tiên, được g
ọi là ChangeIPAddress.vbs:
strComputer = "."
arrIPAddress = Array("172.16.11.99")
arrSubnetMask = Array("255.255.255.0")
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration")
For Each objNetAdapter in colNetAdapters
errEnableStatic =
objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Next
Khi chạy script này trên server Windows, nó thay đổi thành công địa chỉ IP của
máy từ .45 sang .99. (Kiểm tra bằng lệnh ipconfig trước và sau khi chạy script).
Kết quả hoàn toàn tốt.

Nhưng script chúng ta đã xây dựng mới từng lại ở mức khá đơn giản. Còn thiếu
nhiều yếu tố quan trọng khác như các định nghĩa biến, điều khiển lỗi, dùng dữ
liệu đầu vào và xác nhậ
n dữ liệu đầu ra cần phải bổ sung vào để có được một
script tương đối hoàn chỉnh. Chúng ta sẽ thực hiện điều đó trong phần hai này.

Các định nghĩa biến



Việc đầu tiên chúng ta cần làm để sắp xếp gọn gàng script là định nghĩa các biến
sẽ dùng. VBScript cho phép định nghĩa ngầm các biến đơn giản bằng cách dùng
nó trong một câu lệnh, nhưng sẽ tốt hơn nế
u bạn khai báo tường minh chúng
ngay khi bắt đầu script. Khai báo một biến sẽ nói cho VBScript biết về sự tồn tại
của nó để cấp phát bộ nhớ lưu trữ. Vì sao khai báo biến tường minh lại hay
hơn? Ví dụ như trong một script dài, bạn thường phạm phải một hay một số lỗi
gõ phím nhầm. Và khi gõ nhầm tên của một biến, script của bạn sẽ không chạy
được. Nếu khai báo biến tường mình ở
đầu script thì bất kỳ biến nào được khai
báo ngầm về sau trong script (có thể là nguyên nhân gây ra lỗi gõ nhầm) sẽ tạo
ra một lỗi runtime. Các thông báo lỗi có thể sẽ giúp bạn xác định được vị trí
nhầm lẫn và gỡ lỗi cho script của bạn.

Để VBScript biết bạn khai báo tường minh tất cả các biến trong script, thêm lệnh
sau vào đầu script:
Option Explicit
Nếu thêm lệnh này vào đầu script ChangeIPAddress.vbs và chạy nó từ
Command Prompt, kết quả là:
C:\Documents and Settings\Administrator.DC-
1\Desktop>ChangeIPAddress.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights
reserved.
C:\Documents and Settings\Administrator.DC-
1\Desktop\ChangeIPAddress.vbs(2, 1) Microsoft VBScript
runtime error: Variable is undefined: 'strComputer'
Điều mà VBScript (hay cơ
chế script đã đăng ký của Windows Script Host để

chạy các script VBScript) muốn nói ở đây là có một lỗi trong dòng 2 của script:
strComputer = "."
Vì sao lại xuất hiện lỗi này? Đó là do chúng ta đang gán giá trị cho một biến xâu
(strComputer) chưa được khai báo. Vì thế, bây giờ chúng ta cần thêm các khai
báo cho biến dùng trong script:
Option Explicit
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim arrIPAddress
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic
strComputer = "."
arrIPAddress = Array("172.16.11.93")
arrSubnetMask = Array("255.255.255.0")
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each objNetAdapter in colNetAdapters
errEnableStatic =
objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Next
Chú ý là khi dùng Option Explicit (tuỳ chọn khai báo tường minh), bạn phải khai
báo tất cả biến trong script của mình, gồm cả đối tượng, xâu, mảng, tập hợp,
biến cho đoạn mã lỗi… Nghe có vẻ rất rắc rối phức tạp nhưng thực tế chỉ cần
chạy một số trang dài, ngay cả khi chạy chương trình gỡ lỗi rungning time, bạn
sẽ biết nó hữu ích như th
ế nào. Cũng chú ý là không cần khai báo biến theo trình

tự, chỉ cần nhớ khai báo cho từng biến trước khi dùng là được. Thông thường
người ta đặt tất cả khai báo biến vào một phần riêng trên đầu script như chúng
ta đã làm ở trên.

Điều khiển lỗi

Bây giờ, chúng ta đã loại bỏ được các lỗi gõ nhầm khi chạy script đã được soát
lại, script hoạt động. Nhưng nếu nó không hoạt động thì sao? Ví dụ, chuyện gì
sẽ xảy ra nếu chúng ta thay đổi script đi một chút để chạy trên một máy từ xa
thay vì máy cục bộ mà trong đó máy từ xa không nằm trên mạng? Một lần nữa
lỗi thời gian chạy (tức lỗi xảy ra khi script đang được thực thi, ngược lại với lỗi cú
pháp mà VBScript có thể nhận ra khi biên dịch script trước khi chạy nó) sẽ xuất
hiện và script sẽ bị ngừng lại, hiển thị một thông báo lỗi t
ương tự như thông báo
chúng ta đã thấy ở trên. Chuyện gì sẽ xảy ra nếu chúng ta viết ra một script để
thực hiện một số thao tác? Trong trường hợp này tất nhiên chúng ta không
muốn có một lỗi thời gian chạy khiến script phải dừng lại giữa chừng mà ít nhất
script cũng phải thực hiện tất cả các thao tác khác đã được xây dựng. Một ví dụ
điển hình là script giám sát các thiết lập trên một số
máy tính mà không thay đổi
các thiết lập đó. Trong trường hợp này bạn sẽ cần xây dựng script chạy liên tục
cho dù một hay một số máy bị hư hỏng không chạy được.

Cách đơn giản nhất để kiểm soát các lỗi thời gian chạy là lờ chúng đi khi chúng
xuất hiện. Bạn có thể nói với VBScript thực hiện điều này bằng cách thêm lệnh
sau vào gần nơi bắt đầu của script, chẳng hạ
n như ngay sau Option Explicit:
On Error Resume Next
Tất nhiên, bạn còn muốn thực hiện thêm nhiều thứ khác trong kiểm soát lỗi. Ví
dụ như kiểm tra sự tồn tại của một điều kiện lỗi thời gian chạy ở một số điểm

nào đấy trong script (như ngay sau khi kết nối tới dịch vụ WMI trên một máy từ
xa) để xác định xem liệu một hoạt động nào đó script được quy định để thực
hiện có thành công hay không. Sau đó, dựa trên kết quả kiểm tra điều kiện lỗi,
bạn có thể quyết định script các hoạt động tiếp theo của script. Ví dụ, nếu một lỗi
xuất hiện, bạn có thể nhận được thông báo nói rằng: “Computer X not found”
(không tìm thấy máy tính X) và sau đó script tiếp tục chạy. Chúng ta sẽ tìm hiểu
sâu hơ
n về kiểm soát lỗi trong một số bài khác, còn bây giờ bạn chỉ cần thêm
lệnh trên vào để bỏ qua bất kỳ lỗi thời gian chạy nào xuất hiện.

Dữ liệu đầu vào của người dùng

Sẽ phải làm gì nếu chúng ta muốn mô tả địa chỉ IP mới cho máy khi chạy script
thay vì viết mã cho nó vào script dưới dạng 172.16.11.99? Trong trường hợp này
chúng ta cần chỉnh sửa script để cho phép cung cấp dữ liệu vào của ngườ
i dùng
khi chạy nó. Thực hiện bằng cách thêm vào các tham số khi chạy script từ dòng
lệnh. Ví dụ gõ ChangeIPAddress.vbs 172.16.11.188 sẽ thay đổi địa chỉ IP của
bộ điều hợp mạng thành 172.16.11.188… Chúng ta có thể thực hiện như sau:
Option Explicit
On Error Resume Next
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim strAddress
Dim arrIPAddress
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic
If WScript.Arguments.Count = 0 Then

Wscript.Echo "Usage: ChangeIPAddress.vbs
new_IP_address"
WScript.Quit
End If
strComputer = "."
strAddress = Wscript.Arguments.Item(0)
arrIPAddress = Array(strAddress)
arrSubnetMask = Array("255.255.255.0")
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each objNetAdapter in colNetAdapters
errEnableStatic =
objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Next
Chúng ta hãy phân tích từng phần một. Đầu tiên là khai báo một biến mới:
Dim strAddress
Đây là một biến xâu (string) sẽ chứa tham số (địa chỉ IP) chúng ta mô tả khi chạy
script. Tiếp theo là thêm các dòng bên dưới vào sau phần khai báo:
If WScript.Arguments.Count = 0 Then
Wscript.Echo "Usage: ChangeIPAddress.vbs
new_IP_address"
WScript.Quit
End If
Các dòng này thực hiện điều gì? Thuộc tính Arguments của đối tượng WScript
trả về tập hợp các tham số được mô tả khi chạy script. Phương thức Count trả ra
số lượng tham số
chúng ta nhập vào và mục đích của phần đoạn mã này là kiểm
tra xem liệu chúng ta có quên nhập bất kỳ tham số (số tham số bằng 0) nào

không. Nếu có, nó sẽ báo hiệu (hoặc hiển thị) một thông báo nói cho bạn biết
cách sử dụng script phù hợp như thế nào và chương trình chạy của script bị
ngừng lại hoàn toàn.

Cuối cùng, dòng cũ:
arrIPAddress = Array("172.16.11.93")
nơi chúng ta viết mã cho địa chỉ IP mới theo kiểu gán mảng bây giờ
đã được
thay thế bằng hai dòng bên dưới:
strAddress = Wscript.Arguments.Item(0)
arrIPAddress = Array(strAddress)
Dòng đầu tiên lấy ra phần tử đầu tiên (phần tử 0) của tập hợp
WScript.Arguments và gán nó trở thành biến xâu strAddress. Dòng thứ hai sau
đó lấy biến xâu strAddress này và gán nó trở thành phần tử đầu tiên của mảng
arrIPAddress.

Hãy xem chuyện gì xảy ra khi chạy script mới này, đầu tiên không mô tả tham
số, sau đó là chạy với một tham số:

×