Tìm kiếm PhanVien.Com Web
Download PhanVien.Com Toolbar
Danh mục thông tin

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

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:
Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi.

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

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 (http://msdn2.microsoft.com/en-us/library/aa393259.aspx):

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 chuyên 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 hoàn toà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 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")
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 . . . . . . . . . . . . : XP2
        Primary Dns  Suffix  . . . . . . . : contoso.com
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:

        Connection-specific DNS  Suffix  . :
        Description . . . . . . . . . . . : Intel  21140-Based PCI Fast Ethernet
Adapter (Generic)
        Physical Address. . . . . . . . . : 00-03-FF-21-88-8C
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 172.16.11.80
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 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 . . . . . . . . . . . . : XP2
        Primary Dns  Suffix  . . . . . . . : contoso.com
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:

        Connection-specific DNS  Suffix  . :
        Description . . . . . . . . . . . : Intel  21140-Based PCI Fast Ethernet
Adapter (Generic)
        Physical Address. . . . . . . . . : 00-03-FF-21-88-8C
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 172.16.11.80
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 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!

Tìm bài viết khác
Theo Văn Linh (QuanTriMang,WindowsNetworking)
Updated: 16/05/2008 | Views: 338 | Comments: 0

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

Hiện tại chưa có bình luận nào về bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi!

Bạn có ý kiến gì về bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi này? Hãy gởi suy nghĩ, bình luận, đánh giá, lời khuyên ... của bạn về bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi bạn tại đây.

Other articles

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

Older than Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi in Quản Trị Mạng Máy Tính

Newer than Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi in Quản Trị Mạng Máy Tính

Recently Published - Quản Trị Mạng Máy Tính
Day ao thuat
Latest Comments in Quản Trị Mạng Máy Tính
By tran thi thanh thuy. to' phai? lam` bai` tap lon' ve` phan tich' va` thiet' ke' mang internet ban nao` biet' .....
By hoach. Mình đã từng sử dụng thử PM này và thấy rất hay , hiện giờ mình .....
By Le Quang Trung. Nếu công ty bạn ko dùng IP tĩnh, mà bạn muốn ở ngoài kết nối vào .....
By an. hok co hinh anh minh hoa theo nen kho hieu ah...
By Thanh. choi toi xin 1 file....
By gà con. Câu hỏi 1: cty mình thì xài mạng LAN mình muốn ở nhà xài Remote Desktop .....
By Ngô Hữu Nhân. Bài viết này đọc qua thấy hay đấy, nhưng để mình thử đã rồi ý .....
By tran hong vui. cuu du lieu bi format tren o cung...
By truong son. Luc dau nap tien qua the ATM binh thuong, hien toi nap tien qua the khong duoc, hoi tong .....
By nguyen oanh. tớ chẳng hiểu như thế nào nhưng tớ đang phải làm 1 bài tìm hiểu .....
By nguyen anh tuansydney. rat tot...
By tran trung tri. vo vin qua di mat...
By vietnam. Tôi đã sử dụng phần mềm này và cứu được nhiều tài liệu đã bị .....
Most Comments in Quản Trị Mạng Máy Tính
Monthly Most Views - Quản Trị Mạng Máy Tính
  English Tiếng Việt 
Bạn đang xem bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi được gởi trong chủ đề Quản Trị Mạng Máy Tính - Công Nghệ Thông Tin. Bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi này được lưu trên Server thành hai bản: Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi có dấuQuản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi không dấu. Bạn có thể gởi ý kiến bình luận, đóng góp về bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi này tại phần gởi bình luận ở cuối nội dung bài viết. Lưu ý nội dung của bài viết Quản lý các mạng Windows dùng script - Phần 7: Xử lý sự cố lỗi này có thể không còn phù hợp với thời điểm hiện tại. Nếu phát hiện điều này, xin bạn báo cho BQT biết để gỡ bỏ nó.
Home Page | Privacy | Contact | Friend Links | Search | Sitemap | Up
Copyright © 2008 PhanVien.Com . All rights reserved.