Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi
Ngu
ồn : quantrimang.com
Mitch Tulloch
Trong bài viết trước chúng ta đã dùng đến kịch bản ChangeIPAddress.vbs
được phát triển trước đó và đã sử dụng nó để thay đổi địa chỉ IP trên máy
tính từ xa. Đây là những gì mà chúng ta đã thay đổi kịch bản:
Option Explicit
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 = "xp2"
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 =
vấn đề nảy sinh khi không có những giải pháp đúng cho chúng.
Vì vậy làm thế nào chúng ta có thể bỏ qua lỗi? Hãy thêm dòng dưới đây vào gần
vị trí bắt đầu của phần đầu (header):
On Error Resume Next
Hay nói cách khác, phần đầu (header) của chúng ta sẽ như sau:
Option Explicit
On Error Resume Next
Dim objWMIService
...
Bây giờ chúng ta không xem lỗi, và kịch bản của chúng ta làm việc. Tuy nhiên nó
vẫn cần đế
n nhiều thời gian để thực thi, thực tế có thể cần đến vài phút. Vậy cái
gì sẽ tiếp diễn?
Xử lý sự cố thông báo lỗi
Các thông báo lỗi đôi khi khá khó hiểu và điều này là một trong những vấn đề
đáng quan tâm. Đây là một thông báo lỗi:
SWbemObjectEx: The remote procedure call failed.
Và đây là dòng mã tạo ra nó:
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress,
arrSubnetMask)
Dòng mã này làm việc (ví dụ địa chỉ IP bị thay đổi trên máy tính mục tiêu) nhưng
sau đó nó đưa ra một thông báo lỗi. Tại sao lại như vậy? Chúng ta hãy bắt đầu
bằng cách tìm hiểu SwebObjectEx có ý nghĩa gì. Tìm kiếm nhanh trong MSDN
có thể cho thấy (http://msdn2.microsoft.com/en-us/library/aa393259.aspx
):
Extends the functionality of SWbemObject. This object adds the Refresh
method for SWbemRefresher objects.
tính này được khởi động lại. Tuy nhiên khi kịch bản vẫn đang chạy trên máy trạm
quản trị, khi cấu hình adapter mạng của máy tính mục tiêu đang ở trạng thái
không xác rõ ràng thì kết nối RPC giữa hai máy tính là rấ
t tồi trước khi kịch bản
này kết thúc. Chính vì vậy sẽ xuất hiện lỗi ở đây.
Chí ít đó cũng là câu trả lời tốt nhất mà chúng tôi có được cho vấn đề này, và
chúng tôi vẫn tiếp tục nghiên cứu tỉ mỉ. Tuy nhiên hãy xem nếu chúng ta có thể
xác nhận vì một lý do nào đó mà vấn đề này được giải quyết, ví dụ lỗi đó chỉ liên
quan với phương pháp EnableStatic của Win32_NetworkAdapterConfiguration.
Việc gì sẽ xảy ra n
ếu chúng ta cố gắng viết một kịch bản khác để thực hiện một
việc gì đó khác với adapter mạng trên máy tính mục tiêu thay vì thay đổi địa chỉ
IP của nó? Ví dụ, làm cách nào để thay đổi được cổng mặc định thay vì địa chỉ
IP trên máy tính mục tiêu? Nếu điều đó được thực hiện thì ít nhất chúng ta cũng
có thể kết nối thành công từ máy trạm quản trị đến máy tính từ xa và gọ
i phương
pháp WMI để thay đổi thiết lập mạng trên nó.
Thay đổi cổng mặc định
Ở phần này chung tôi khuyên bạn nên quay lại đọc một chút phần 4 của loạt bài
này, ở đó chúng tôi đã giới thiệu cho bạn cách sử dụng MSDN để học cách sử
dụng các thuộc tính và phương pháp của Win32_NetworkAdapterConfiguration.
Chúng tôi cho rằng bằng cách làm như vậy bạn có thể tự viết một kịch bản như
v
ậy. Hãy thử nó!
TẠM NGƯNG
SetGateways(A,B)
Ở đây A là biến chuỗi gồm địa chỉ IP cho cổng, B là một giá trị nguyên từ 1 đến
9999 chỉ định tham số đó. Bây giờ bạn phải có đủ thông tin để viết kịch bản.
Cách đơn giản nhất là bắt đầu với kịch bản ChangeIPAddress.vbs gốc của
chúng ta có trong phần 2 và thay đổi nó một chút cho t
ới khi chúng ta có được
một kịch bản mới như dưới đây:
'=========================
' NAME: ChangeGateway.vbs
'
'AUTHOR: Mitch Tulloch
'DATE: February 2007
'
'ARGUMENTS:
'1. gateway_address
'2. metric
'=========================-
Option Explicit
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim strGateway
Dim arrGateway