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

Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi

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 (227.46 KB, 9 trang )

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 =
objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)


Next
Dịng:
strComputer = "xp2"
cho chúng ta biết rằng máy tính được tích hợp bởi kịch bản có tên XP2. Máy tính


điều khiển xa XP2 ban đầu có địa chỉ IP là 172.16.11.43.
Bây giờ khi chúng ta chạy kịch bản này bằng cách đánh ChangeIPAddress.vbs
172.16.11.65 từ một máy trạm quản lý có tên là XP, những thứ xảy ra được đưa
ra dưới đây:
1. Kịch bản đã hoạt động. Ví dụ địa chỉ của XP2 đã thay đổi từ 172.16.11.43
thành 172.16.11.65.
2. Kịch bản cần đến nhiều thời gian để thực thi
3. Kịch bản trả lại lỗi dưới đây: C:\tools\ChangeIPAddress.vbs(23, 6)
SWbemObjectEx: The remote procedure call failed.
Làm thế nào chúng ta có thể giải quyết được các kết quả đó?
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 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 ( />Extends the functionality of SWbemObject. This object adds the Refresh
method for SWbemRefresher objects.
(Mở rộng chức năng của SWbemObject. Đối tượng này bổ sung phương pháp
Refresh cho các đối tượng SwbemRefresher)
Vì vậy SwbemObjectEx cơ bản chỉ bổ sung thêm chức năng cho SWbemObject.
Vậy SwbemObject là gì?
Contains and manipulates a single WMI object class or instance.
(Gồm một đối tượng WMI hoặc một sự kiện)
Điều đó có nghĩa gì? Trang này cho chúng ta nhiều thơng tin nhưng nó khơng
thích hợp. Mặc dù vậy trong các trường hợp, SwbemObject (SWbemObjectEx)
là tất cả những gì bạn quản lý hay truy vấn trong WMI. Trong kịch bản của chúng
ta, chúng ta đang truy vấn lớp Win32_NetworkAdapterConfiguration và trả về
một bộ sưu tập các đối tượng gọi là colNetAdapter thể hiện các adapter mạng
trên máy tính. Vì vậy SWbemObjectEx (hoặc SWbemObject) đã đề cập đến
trong thông báo lỗi này làm đơn giản hóa đối tượng đang thể hiện bản thân

adapter mạng, ví dụ như objNetAdapter. Vậy tại sao objNetAdapter tạo ra lỗi.
Dẫu sao đây cũng dường như trở thành vấn đề. Theo một trong những chun
gia có uy tín, có thể một thành phần nào đó có trong hotfix cho Windows XP bị
thay đổi cách mà lệnh gọi trả về được tạo và được đệ trình khi câu lệnh gây ra
lỗi được thực thi. Thông thường nếu gọi phương pháp EnableStatic của một đối
tượng được thuyết minh bằng một ví dụ của lớp
Win32_NetworkAdapterConfiguration hồn tồn thành cơng nó sẽ trả về 0, có
nghĩa là khơng có lỗi. Cịn nếu nó trả về 1 thì điều đó có nghĩa cần phải khởi
động lại. Rõ ràng với Windows XP sẽ không cần phải khởi động lại khi bạn thay
đổi địa chỉ IP trên adapter mạng. Nếu với một vài lý do, một hotfix có thể thay đổi


gì đó trong WMI hoặc thành phần khác để Windows không khởi động lại trước
khi địa chỉ mới được thay thế trên máy mục tiêu, điều này có thể tạo ra một lỗi vì
cấu hình adapter mạng trên máy rơi vào trạng thái khơng rõ ràng cho tới khi máy
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
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 nhanh trong trang sẽ cho bạn điều này:
SetGateways - Specifies a list of gateways for routing packets destined for
a different subnet than the one this adapter is connected to.
(SetGateways – một danh sách cổng dành cho việc định tuyến các gói đã được
trù định trước đối với subnet khác so với subnet mà adapter này được kết nối
đến)


Đó chính là những gì chúng ta muốn, vì vậy kích chuột vào SetGateways để mở
trang SetGateways Method của Win32_NetworkAdapterConfiguration Class
3. Trên trang SetGateways Method này bạn sẽ thấy giải thích này:
The SetGateways WMI class method specifies a list of gateways for routing
packets to a subnet that is different from the subnet that the network
adapter is connected to. This method only works when the Network
Interface Card (NIC) is in the static IP mode.
(Phương pháp lớp SetGateways WMI chỉ định một danh sách cổng dành cho
việc định tuyến các gói cho một mạng con khác đối với mạng con mà adapter
mạng được kết nối đến. Phương pháp này chỉ làm việc khi Network Interface
Card (NIC) ở chế độ IP tĩnh)
Chính vì vậy bạn đã học được rằng máy tính mục tiêu phải có địa chỉ tĩnh trước

khi bạn gọi phương pháp này. Đọc kỹ hơn bạn có thể tìm thấy cú pháp cho việc
gọi phương pháp này như dưới đây:
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
Dim
Dim
Dim
Dim

objWMIService
objNetAdapter
strComputer
strGateway
arrGateway



Dim
Dim
Dim
Dim

intMetric
arrMetric
colNetAdapters
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")
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each objNetAdapter in colNetAdapters
errGateway = objNetAdapter.SetGateways(arrGateway,
arrMetric)
Next

'Display result or error code
If errGateway=0 Then
Wscript.Echo "Adapter's gateway has been successfully
changed to " & strGateway
Else
Wscript.Echo "Changing the adapter's gateway was not
successful. Error code " & errGateway
End If
Copy đoạn kịch bản này vào Notepad (trong chế độ Word Wrap đã bị bỏ) và lưu
lại với tên ChangeGateway.vbs. Giờ hãy kiểm tra nó. Truy cập vào máy từ xa
XP2, mở cửa sổ lệnh nhập vào lệnh ipconfig /all và kết quả như sau:
C:\>ipconfig /all


Windows IP Configuration
Host Name . . . . .
Primary Dns Suffix
Node Type . . . . .
IP Routing Enabled.
WINS Proxy Enabled.

.
.
.
.
.

.
.
.

.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.

.
.

:
:
:
:
:

XP2
contoso.com
Unknown
No
No

Ethernet adapter Local Area Connection:
Connection-specific
Description . . . .
Based PCI Fast Ethernet
Adapter (Generic)
Physical Address. .
8C
Dhcp Enabled. . . .
IP Address. . . . .
Subnet Mask . . . .
Default Gateway . .

DNS Suffix . :
. . . . . . . : Intel 21140-


. . . . . . . : 00-03-FF-21-88.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.


.
.
.
.

:
:
:
:

No
172.16.11.80
255.255.255.0
172.16.11.1

C:\>
Bây giờ trên máy trạm quản trị XP, bạn mở cửa sổ lệnh và chạy kịch bản mới
này như dưới đây:
C:\tools>ChangeGateway.vbs 172.16.11.2 5
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights
reserved.
Adapter's gateway has been successfully changed to
172.16.11.2
C:\tools>
Kịch bản này cần đến khoảng 5 giây để kết thúc, khơng có lỗi nào xuất hiện (Lưu
ý rằng ở đây chúng tôi đã bỏ qua On Error Resume Next từ header của kịch bản
đã đưa ra vì chúng tôi muốn quan sát bất kỳ lỗi nào nếu chúng xuất hiện)
Hãy quay trở lại máy tính từ xa XP2 và chạy ipconfig /all một lần nữa:
C:\>ipconfig /all



Windows IP Configuration
Host Name . . . . .
Primary Dns Suffix
Node Type . . . . .
IP Routing Enabled.
WINS Proxy Enabled.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.

.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

:
:
:
:
:

XP2
contoso.com
Unknown

No
No

Ethernet adapter Local Area Connection:
Connection-specific
Description . . . .
Based PCI Fast Ethernet
Adapter (Generic)
Physical Address. .
8C
Dhcp Enabled. . . .
IP Address. . . . .
Subnet Mask . . . .
Default Gateway . .

DNS Suffix . :
. . . . . . . : Intel 21140-

. . . . . . . : 00-03-FF-21-88.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

:
:
:
:

No
172.16.11.80

255.255.255.0
172.16.11.2

C:\>
Nó đã làm việc. Khơng có lỗi nào xuất hiện – chúng ta đã chạy một kịch bản từ
xa đối với một máy tính khác và nó đã thay đổi cổng mặc định của máy tính mục
tiêu.
Chúng ta có thể kiểm tra xem tham số đo có bị thay đổi hay không? Lệnh
ipconfig không hiển thị thông tin này nhưng chúng ta có thể sử dụng netsh để
có được điều này như dưới đây:
C:\>netsh interface ip show address
Configuration for interface "Local Area Connection"
DHCP enabled:
No
IP Address:
172.16.11.80
SubnetMask:
255.255.255.0
Default Gateway:
172.16.11.2
GatewayMetric:
5
InterfaceMetric:
0
C:\>
Đây chính là kết quả cần thấy!


 




×