Quản lý các mạng Windows dùng Script - Phần 1: Những khái niệm
cơ bản
Đây là phần đầu tiên trong loạt bài về các mạng Windows scripting. Phần này
đề cập đến những khái niệm cơ bản nhất về kỹ thuật scripting (kỹ thuật viết
kịch bản) trong các mạng chạy hệ điều hành Windows. Những phần còn lại của
loạt bài sẽ chuyển đến các bạn nội dung chi tiết của nhiều khía cạnh khác nhau
trong chủ đề này.
Có một câu nói như thế này, không rõ của vĩ nhân hay thường dân nào nhưng
tôi thấy quả rất chí lý: “Đưa cho một anh chàng sắp chết đói một con cá, bạn
nuôi được anh ta một ngày; nhưng nếu dạy cho anh ta cách câu cá, bạn nuôi
anh ta cả đời”.
Còn gì đúng hơn thế, và càng đúng hơn trong thế giới bận rộn của các chuyên
gia công nghệ thông tin (mà chúng ta vẫn quen miệng gọi là dân IT) khi làm
việc với kỹ thuật scripting: “Đưa cho một admin một script, bạn giúp anh ta
giải quyết một vấn đề; nhưng nếu dạy anh ta cách viết script như thế nào, bạn
giúp anh ta làm được công việc gắn liền với cả đời anh ta”.
Giá mà tự động hoá được công việc quản trị hàng ngày bằng các script, cuộc
sống của những admin sẽ thoải mái và nhẹ nhàng hơn nhiều. Tại sao cần phải
biết và dùng script? Không phải đã có hàng trăm script được viết sẵn trôi nổi
trên thế giới mạng mà bạn có thể tải về dùng một cách dễ dàng, như lấy từ
nguồn trung tâm Script Center Script Repository của Microsoft chẳng hạn. Vậy
tại sao? Hàng trăm kịch bản (script) viết sẵn, xin thưa rằng đúng. Tải về dùng
dễ dàng, xin thưa rằng lại càng đúng. Ấy vậy mà đúng nhưng chưa đủ. Chúng
hữu ích và giúp đỡ bạn rất nhiều, nhưng nhiều khi đòi hỏi riêng theo cấu hình
cụ thể trong môi trường của bạn lại làm khó chúng. Có khi trong hàng trăm
hàng nghìn script tải về bạn chỉ chọn lọc được một script phù hợp mà vẫn phải
điều chỉnh đôi chút. Đơn giản vì tác giả viết ra nó không nằm trong tổ chức của
bạn, không thực hiện theo cấu hình của bạn và mối quan tâm của họ lại hướng
quản trị Windows (Windows admin script). VBScript không chỉ là một ngôn
ngữ mạnh mà cú pháp của nó còn khá đơn giản để học và làm. VBScript có thể
dùng chung với Windows Management Instrumentation (WMI) và Active
Directory Services Interfaces (ADSI) để viết kịch bản cho bất kỳ khía cạnh nào
của một hệ thống chạy hệ điều hành Windows hay một mạng dùng Active
Directory. Chúng ta sẽ bắt đầu học về Windows scripting bằng cách dùng
VBScript với WMI để thực hiện một điều sẽ rất hữu ích: thay đổi địa chỉ IP
của một network adapter.
Tại sao lại cần thực hiện điều này? Đó là do chúng ta sẽ phải sử dụng nhiều
đến một máy chủ ảo và một PC ảo để thiết lập môi trường kiểm tra. Chúng ta
sẽ cần phải chuyển một máy ảo (VM) chạy hệ điều hành Windows Server 2003
từ mạng ảo này sang mạng ảo khác để sử dụng lại server (máy chủ) cho một số
mục đích khác. Như thế có nghĩa là chúng ta sẽ cần thay đổi địa chỉ IP trên
server (cũng có thể là cổng vào mặc định nữa). Bạn có thể thực hiện điều này
bằng cách mở Network Connections trong Control Panel và kích phải chuột lên
Local Area Connections, chọn Properties > Internet Protocol (TCP/IP) trên tab
General và bấm chọn Properties, nhập địa chỉ IP mới rồi ấn OK hai lần. Đây là
cách thực hiện phổ biến nhưng nghe qua bạn đã thấy khá dài dòng và mệt mỏi.
Với những chuyên gia, họ thích sử dụng Command Promt hơn, lệnh dùng ở
đây là Netsh. Song, khi sử dụng lệnh này bạn cần cẩn trọng vì nó có nhiều ngữ
cảnh, lệnh và tham số khác nhau rất khó nhớ. Thực hiện sai một thao tác cũng
có thể dẫn đến hậu quả nghiêm trọng. Nếu chưa thực sự chắc chắn, hãy nhờ sự
giúp đỡ của phần trợ giúp Help hoặc quay trở lại cách thứ nhất.
Nhưng mục đích của chúng ta ở đây là học về script. Do đó, chúng ta sẽ xem
xét cách thay đổi địa chỉ IP của máy dùng VBScript và WMI như thế nào mà
trước hết là phải biết đến một số khái niệm cơ bản như đối tượng (object),
phương thức (method), thuộc tính (property), namespace…
bạn phải đưa tham số vào cho nó. Ví dụ, để gọi phương thức SetCookingTime
(thiết lập thời gian nấu), chúng ta có thể định nghĩa biến CookingTime (thời
gian nấu) trong một số giây nhất định và sau đó đưa biến này vào phương thức
SetCookingTime thiết lập cho một trường hợp cụ thể của lớp này (một trường
hợp thực, không phải là lò vi sóng trong lớp trừu tượng). Với WMI VBScript,
chúng ta có thể thực hiện như sau:
intCookingTime = 120
errSetCookingTime = objMicrowave.SetCookingTime(intCookingTime)
Nhưng đối tượng lò vi sóng (objMicrowave) ở đâu ra? Chúng ta vẫn chưa tạo
nó, vì vậy hãy tạo bằng cách dùng lệnh Set và phương thức CreateObject:
Set objMicrowave = CreateObject("MicrowaveOven")
Thực ra, nếu xét kỹ hơn thì objMicrowave không phải là đối tượng của lớp
MicrowaveOven. Chính xác hơn nó là một đối tượng tham chiếu tới một thể
hiện của lớp MicrowaveOven. Nhưng hiện tại chúng ta mới chỉ bắt đầu với
những gì cơ bản nhất nên các khía cạnh sâu hơn này sẽ được tìm hiểu ở sau.
Tiếp theo, tạo thêm biến strColor để thiết lập thuộc tính màu sắc cho lò vi sóng
của chúng ta. Đặt giá trị biến là Green (màu xanh là cây), script sẽ có dạng như
bên dưới (với một số chú thích bên cạnh):
strColor = "Green" 'gán màu cho lò vi sóng
intCookingTime = 120 'quy định thời gian nấu (tính theo giây)
Set objMicrowave = CreateObject("MicrowaveOven") 'tạo một thể hiện của
đối tượng
errSetCookingTime = objMicrowave.SetCookingTime(intCookingTime) 'gọi
một phương thức để
bộ điều hợp mạng trên máy có đường bao TCP/IP và được cho phép trên bộ
điều hợp. Tập hợp trả về sau khi thực hiện phương thức này sẽ được gán với
biến colNetAdapters.
Chúng ta có thể làm gì với tập hợp này? Khi có một tập hợp trong tay, bạn phải
lặp vòng nó, dùng một lệnh lặp như For Each. Vòng lặp tiếp theo sẽ như thế
này:
For Each objNetAdapter in colNetAdapters
' do something to each network adapter's configuration
Next
Bạn luôn phải lặp vòng các tập hợp cho dù tập hợp đó chỉ có một đối tượng.
Bây giờ, điều chúng ta thực sự muốn là thay đổi địa chỉ IP cho adapter của
mình. Vì thế, hãy định nghĩa thêm một số biến:
arrIPAddress = Array("172.16.11.99")
arrSubnetMask = Array("255.255.255.0")
Chú ý là các biến định nghĩa địa chỉ IP và subnet mask mới phải là các biến
mảng. Tại sao lại như thế? Lý do đầu tiên là các máy tính Windows nhiều khi
không phải chỉ có một địa chỉ IP, một cổng vào mặc định… Vậy thì tại sao
không dùng biến mảng cho tất cả các thiết lập IP được nhất quán. Và lý do thứ
hai, nếu tìm kiếm lớp Win32_NetworkAdapterConfiguration trong WMI
Reference trên MSDN, bạn sẽ thấy được phải dùng đến biến mảng. Chúng ta sẽ
nghiên cứu sâu hơn về WMI Reference trong tương lai, còn bây giờ thì tạm
thời chấp nhận ở mức độ chưa rõ ràng một chút.
Cuối cùng, cần gọi phương thức EnableStatic của lớp
dùng Administrator, chuyển tới thư mục Desktop và chạy script, dùng
Cscript.exe. Kết quả trả về:
C:\Documents and Settings\Administrator\Desktop>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.16.11.45
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.11.1
C:\Documents and Settings\Administrator.DC-1\Desktop>cscript
ChangeIPAddress.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
C:\Documents and Settings\Administrator\Desktop>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.16.11.99
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.11.1