Qu
Dim arrIPA
Dim arrSub
Dim colNe
Dim errEn
If WScript
Wscript
WScrip
End If
strComput
strAddres
s
arrIPAddre
arrSubnetM
Set objWM
Set colNetA
IPEnabled=
For Each o
errEnab
Next
Dòng:
strComput
cho chún
XP2 ban
Bây giờ
k
một máy
ng ta biết rằn
đầu có địa c
khi chúng ta
trạm quản l
bản đã hoạt đ
bản cần đến n
bản trả lại lỗi
rocedure ca
c mạng W
ount = 0 Then
: ChangeIPAd
d
guments.Item(0
rAddress)
"255.255.255.0
etObject("winm
jWMIService.E
in colNetAdap
NetAdapter.En
ng máy tính đ
chỉ IP là 172
a chạy kịch b
lý có tên là X
động. Ví dụ
nhiều thời gi
i dưới đây: C
all failed.
Windows d
Tro
objNetAdapter
strComputer
strAddress
_IP_address"
rComputer & "
elect * from W
IPAddress, arrS
ợp bởi kịch b
g cách đánh
hứ xảy ra đư
XP2 đã thay
thi
angeIPAddre
pt - Phần
rước chúng t
ss.vbs được
đổi địa chỉ I
chúng ta đã t
ce
r
"\root\cimv2")
Win32_Network
SubnetMask)
bản có tên XP
ChangeIPA
ược đưa ra dư
đổi từ 172.1
ess.vbs(23, 6
7: Xử lý
Giải pháp dễ dàng
Một thứ chúng ta có thể thực hiện là nói rằng “Hãy bỏ qua lỗi”. Đó là những gì được nói với
phương pháp này. Sau tất cả, bất kỳ quản trị viên trong thế giới thực nào cũng biết rằng CNTT
không phải là một khoa học đúng về mọi chi tiết và chúng thường kết thúc bằng việc áp dụng
“cách giải quyết khác” đối với các 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
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
Khi bạn đã cố gắng viết kịch bản cho riêng mình, đôi khi nó có thể làm việc, đôi khi không làm
việc. Nếu nó không làm việc, hãy thực hiện các bước dưới đây:
1. Đầu tiên vào trang MSDN của Win32_NetworkAdapterConfiguration class.
2. Tìm trên trang này phương pháp phải thực hiện để thay đổi cổng trên adapter mạng. Kiểm tra
'ARGUMENTS:
'1. gateway_address
'2. metric
'=========================-
Option Explicit
Dim objWMIService
Dim objNetAdapter
Dim strComputer
Dim strGateway
Dim arrGateway
Dim intMetric
Dim arrMetric
Dim colNetAdapters
Dim errGateway
'Check for missing arguments
If WScript.Arguments.Count = 0 Then
Wscript.Echo "Usage: ChangeGateway.vbs gateway_address metric"
WScript.Quit
End If
strComputer = "xp2"
strGateway = Wscript.Arguments.Item(0)
arrGateway = Array(strGateway)
intMetric = Wscript.Arguments.Item(1)
arrMetric = Array(intMetric)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")