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

Tài liệu Quản lý các mạng Windows dùng script - Phần 4: Sử dụng Win32_NetworkAdapterConfiguration pdf

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 (3.31 MB, 20 trang )

Quản lý các mạng Windows dùng script - Phần 4: Sử dụng
Win32_NetworkAdapterConfiguration

Sử dụng lớp WMI Win32_NetworkAdapterConfiguration để quản lý
các thiết lập TCP/IP trên các mạng Windows thông qua VBScript.
Trong hai phần đầu của loạt bài này chúng ta đã xem xét một số khái niệm
cơ bản của kỹ thuật Windows scripting trong quản lý các thiết lập mạng
TCP/IP. Để minh hoạ và thực hành, chúng ta đã phát triển một script đơn
giản sau với chức năng thay đổi địa chỉ của một bộ điều hợp mạng:
Option Explicit
On Error Resume Next
Dim objWMIService
Dim objNetAdapter
Dim strComputer ' Can specify IP address or
hostname or FQDN
Dim strAddress 'Contains the new IP address
Dim arrIPAddress
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic
'Check for missing arguments
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
'Display result or error code
If errEnableStatic=0 Then
Wscript.Echo "Adapter's IP address has been
successfully changed to " & strAddress
Else
Wscript.Echo "Changing the adapter's address
was not successful. Error code " & errEnableStatic
End If
Script trên thay đổi địa chỉ IP của một bộ điều hợp mạng, dùng
Win32_NetworkAdapterConfiguration, một trong những lớp WMI hữu ích
nhất để quản lý cầu hình mạng TCP/IP cho các máy chạy trên nền Windows.
Ở phần ba, chúng ta đã dạo một vòng sơ lược qua WMI với những
namespace (không gian tên), provider (nhà cung cấp) và class (lớp) của nó.
Nhờ đó, chúng ta có thể hiểu kỹ càng hơn những dòng mã nằm ở giữa script:
Set objWMIService = GetObject("winmgmts:\\" &
strComputer & "\root\cimv2")
Nếu bạn nhớ lại ở bài trước, dòng này có tác dụng kết nối tới namespace
root\cimv2 trên máy cục bộ bằng cách định nghĩa một đối tượng có tên
objWMIService và đặt nó bằng với giá trị trả về của phương thức GetObject.
Tất nhiên, sau khi kết nối tới namespace này, bạn có thể thu thập thông tin từ

nó.
Còn trong bài ngày hôm nay, dòng mã lệnh chúng ta sẽ tập trung vào theo
sau dòng trên và sử dụng lớp Win32_NetworkAdapterConfiguration:
Set colNetAdapters =
objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration where
IPEnabled=TRUE")
Nhớ lại bạn sẽ thấy, dòng lệnh thứ hai gọi phương thức ExecQuery cho đối
tượng objWMIService mà chúng ta đã mô tả ở dòng đầu. Lệnh SELECT
được đưa vào phương thức này với vai trò như một tham số. Và tập hợp tất
cả cấu hình bộ điều hợp mạng trên hệ thống có giới hạn TCP/IP, được cho
phép trên bộ điều hợp sẽ được trả lại và gán bằng biến colNetAdapters. Sau
khi có tập hợp này, chúng ta có thể lặp vòng nó bằng lệnh For Each… Nhớ
rằng, bạn luôn phải chạy vòng lặp cho các tập hợp dù có tập hợp đó chỉ bao
gồm một đối tượng.
Câu hỏi sẽ được đưa ra ở đây là: Chúng ta có thể làm thêm điều gì với lớp
Win32_NetworkAdapterConfiguration?
Sử dụng các thuộc tính và phương thức của
Win32_NetworkAdapterConfiguration
Bạn đã biết, thuộc tính thể hiện thông tin có thể truy vấn từ một hệ thống
dùng WMI. Một lớp WMI càng có nhiều thuộc tính thì thông tin có thể lấy
ra từ nó càng nhiều. Lớp Win32_NetworkAdapterConfiguration thực tế có
61 thuộc tính khác nhau. Một trong số chúng là duy nhất, hoàn toàn riêng
của Win32_NetworkAdapterConfiguration, còn một số khác là do kế thừa từ
nhiều lớp khác. Bạn có thể tìm thấy danh sách hoàn chỉnh các thuộc tính của
lớp Win32_NetworkAdapterConfiguration trên MSDN. Khi học về sử dụng
Windows scripting để quản lý các mạng Windows dùng script, một điều hết
sức quan trọng là cần phải quen với những thông tin WMI trên MSDN như
thế này. Hình 1 thể hiện một số thuộc tính của lớp
Win32_NetworkAdapterConfiguration:


Hình 1: Một số thuộc tính của lớp Win32_NetworkAdapterConfiguration
Ở hình trên, phần màu vàng minh hoạ là thể hiện thuộc tính nhị phân
IPEnabled được kích vào, dùng để nhận dạng tất cả các bộ điều hợp mạng
trên hệ thống có giới hạn TCP/IP và được cho phép hoạt động. Thực hiện
bằng cách đưa lệnh SQL sau vào như một tham số cho phương thức
objWMIService.ExecQuery:
Select * from Win32_NetworkAdapterConfiguration
where IPEnabled=TRUE
Lệnh Select * from sẽ mở rộng tính năng cho script bằng cách truy vấn tất cả
các thuộc tính khác của lớp. Ví dụ, nếu muốn chọn tất cả bộ điều hợp mạng
trên hệ thống có DHCP, đơn giản chỉ cần thay đổi lệnh SELECT như sau:
Select * from Win32_NetworkAdapterConfiguration
where DHCPEnabled=TRUE
Thông tin tương tự cũng sẽ được tìm thấy trên một trang MSDN giống như
vậy. Hình 2 cho chúng ta thấy điều này:

Hình 2: Thuộc tính DHCPEnabled của lớp
Win32_NetworkAdapterConfiguration
Còn các phương thức của lớp thì sao? Nhớ lại rằng phương thức (method) là
các hàm gọi đến để thực hiện một số thao tác khác nhau dùng WMI. Kết quả
tìm kiếm cho thấy Win32_NetworkAdapterConfiguration cũng có rất nhiều
phương thức, tổng cộng là 41. Bạn có thể tìm các phương thức cho lớp này
nằm trên cùng một trang bên dưới các thuộc tính, như trong Hình 3:

Hình 3: Các phương thức của lớp Win32_NetworkAdapterConfiguration
Trở lại một chút với phần quan trọng sau trong script:
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
Đầu tiên chúng ta dùng thuộc tính IPEnabled của lớp
Win32_NetworkAdapterConfiguration để trả về tập hợp các bộ điều hợp
mạng có giới hạn TCP/IP và được cho phép hoạt động. Sau đó gọi phương
thức EnableStatic của cùng lớp này để thay đổi địa chỉ IP và subnet mask
của các bộ điều hợp mạng này, dùng các biến mảng arrIPAddress và
arrSubnetMask, đã được định nghĩa trước đó trong script. Chúng ta sẽ cần
phải thêm hai biến vào như là các tham số cho phương thức này. Đơn giản là
bởi khi kích vào liên kết EnableStatic trong Hình 3 ở trên, trang MSDN hiển
thị thông tin như Hình 4, cung cấp cho chúng ta những điều cần thiết để có
thể sử dụng được lớp này:

Hình 4: Thông tin chi tiết về phương thức EnableStatic của lớp
Win32_NetworkAdapterConfiguration
Không chỉ cung cấp cho chúng ta cú pháp về cách gọi lớp, MSDN còn cho
chúng ta biết giá trị trả về và cách biên dịch các điều kiện lỗi khác có thể
phát sinh. Đó là lý do vì sao chúng ta dùng biến lỗi trong dòng sau ở script:
errEnableStatic =
objNetAdapter.EnableStatic(arrIPAddress,
arrSubnetMask)
Và đó cũng là lý do vì sao chúng ta sử dụng các dòng sau để ghi nhận mã lỗi
nếu có lỗi nào đó xuất hiện khi script chạy:
If errEnableStatic=0 Then

Wscript.Echo "Adapter's IP address has been
successfully changed to " & strAddress
Else
Wscript.Echo "Changing the adapter's address
was not successful. Error code " & errEnableStatic
End If
Một lần nữa chúng ta có thể mở rộng thêm tính năng cho script bằng cách
gọi một số phương thức khác của lớp. Ví dụ, nếu muốn ngắt NetBIOS qua
TCP/IP (NetBT) trên tất cả các bộ điều hợp mạng có giới hạn TCP/IP, chúng
ta có thể dùng phương thức SetTcpNetbios như ở Hình 5:

Hình 5: Phương thức SetTcpipNetbios của lớp
Win32_NetworkAdapterConfiguration
Kích chuột lên một liên kết trong trang MSDN ở trên, nó sẽ mở ra với các
thông tin hướng dẫn sử dụng phương thức (Hình 6):

Hình 6: Thông tin chi tiết về phuơng thức SetTcpipNetbios
Chúng ta có thể thấy rằng nếu muốn loại bỏ NetBT trên các bộ điều hợp, tất
cả việc cần làm là thay đổi dòng sau trong script:
errEnableStatic =
objNetAdapter.EnableStatic(arrIPAddress,
arrSubnetMask)
thành:
errEnableStatic = objNetAdapter.SetTcpipNetbios(2)
Sau khi thực hiện thay đổi này và “dọn dẹp” script bằng cách loại bỏ các
biến không còn cần dùng đến, đặt lại tên cho các biến khác, chúng ta có
script sau, có thể ngắt NetBT trên tất cả các bộ điều hợp mạng đã nói ở trên:
'=========================
' NAME: DisableNetbios.vbs
'

'AUTHOR: Mitch Tulloch
'DATE: December 2006
'
'ARGUMENTS:
'1. None
'=========================-
Option Explicit
On Error Resume Next
Dim objWMIService
Dim objNetAdapter
Dim strComputer ' Can specify IP address or
hostname or FQDN
Dim colNetAdapters
Dim errDisableNetbios
strComputer = "."
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.SetTcpipNetbios(2)
Next
'Display result or error code
If errDisableNetbios=0 Then
Wscript.Echo "NetBIOS has been successfully
disabled on the adapters"
Else

Wscript.Echo "Disabling NetBIOS was not
successful. Error code " & errDisableNetbios
End If
Hãy xem nó hoạt động ra sao. Hình 7 hiển thị thẻ WINS của hộp thoại
Advanced TCP/IP Properties cho kết nối vùng cục bộ (Local Area
Connection) trên máy Windows Server 2003:

Hình 7: Các thiết lập NetBIOS cho TCP/IP trên máy Windows Server 2003
Chú ý là thiết lập NetBT hiện thời cho máy này là “Default” tương ứng với
giá trị 0 của phương thức SetTcpipNetbios (xem Hình 6 ở trên). Copy script
mới vào Notepad (nhớ tắt chức năng Word Wrap) và ghi nó với tên file
DisableNetbios.vbs. Sau đó chạy script này trên máy chủ của chúng ta trong
cửa sổ dòng lệnh Command Prompt dùng cscript (Hình 8):

Hình 8: Ngắt NetBIOS cho TCP/IP dùng một script
Bây giờ hãy xem liệu nó có hoạt động không. Chúng ta cần đóng các trang
thuộc tính TCP/IP và mở lại chúng để làm mới thiết lập NetBT trong giao
diện GUI, có dạng như hình dưới (Hình 9):

Hình 9: NetBT đã được loại bỏ thành công
Kết luận
Cách tốt nhất để học Windows scripting là xây dựng các ví dụ thực tiễn. Bạn
nên làm các bài tập sau để củng cố những gì đã học trong bài này:
1. Thay đổi script, dùng các tham số như DisableNetbios.vbs 1 để dùng
NetBT, DisableNetbios.vbs 2 để loại bỏ nó và DisableNetbios.vbs 0
để trả nó về thiết lập mặc định dùng DHCP để xác định xem liệu
NetBT được dùng hay bị loại bỏ trên bộ điều hợp.
2. Chỉnh sửa lệnh SELECT trong script để chọn các bộ điều hợp mạng
dựa trên một số thuộc tính khác của lớp
Win32_NetworkAdapterConfiguration, và chỉnh sửa nâng cao hơn để

gọi một số phương thức khác của lớp thực hiện một số thao tác khác
trên cấu hình TCP/IP của các bộ điều hợp mạng.
3. Tìm kiếm trên MSDN để biết thêm về các lớp WMI khác có thể sẽ rất
hữu ích trong các hoạt động quản trị Windows khác.

×