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

Quản lý các mạng Windows dùng Script - Phần 1: Những khái niệm cơ bản

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 (148.28 KB, 8 trang )

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
ni được anh ta một ngày; nhưng nếu dạy cho anh ta cách câu cá, bạn ni
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 hố đượ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
đến một cái gì khác cơ. Khi đó các admin phải trở thành những ơng thợ sửa
chữa lành nghề, thay đổi chỗ này một chút, thay đổi chỗ kia một tý, ghép ghép
nối nối để biến vài scrip nhỏ lẻ thành một script hợp nhất lớn hơn hay dùng dữ


liệu đầu ra của script này làm thành dữ liệu đầu vào cho script khác, hay biến


nó thành cơng cụ hoạt động cho một máy từ xa… Quả là rất nhiều việc!
Anh thợ máy muốn sửa chữa được máy móc thì phải hiểu cấu trúc của nó, đó
là điều khơng ai phản bác. Bởi vậy mà anh “thợ” admin muốn biến đổi, điều
chỉnh script thì phải hiểu về nó, phải biết cách xây dựng và viết ra nó, biến
những cái mới hay cái có sẵn thành cái của riêng mình, phù hợp nhất với mình.
Và lúc đó người ta gọi anh là “thợ lành nghề”. Muốn được như vậy, ai cũng
phải bắt đầu với những điều cơ bản nhất, ở đây là Windows scripting. Nói đến
script, nhiều người tưởng chừng rất khó, thực sự khó vì trước hết… script rất
khó dịch sang tiếng Việt! Script nghĩa là “kịch bản”, nhưng dân công nghệ
chúng ta đâu phải là người làm phim nên kịch bản của thế giới IT chỉ tồn
những đoạn mã loằng ngoằng mà chỉ có các chuyên gia mới hiểu, còn nhiều
người “thường thường bậc trung” như… sinh viên cơng nghệ thì chịu! Chính
bởi vậy mà hôm nay chúng ta sẽ bắt đầu từ những cái cơ bản nhất, sau đó nâng
cao dần khả năng hiểu những khía cạnh sâu xa hơn trong viết và dùng script ở
các mạng Windows. Mục đích cuối cùng mà chúng ta hướng tới là kể cả những
người mới bắt đầu tìm hiểu như bạn, như tơi đều có thể script hố tự động cơng
việc, để cuộc sống của các admin an nhàn hơn. Chúng ta sẽ thực hiện điều này
trên cả script do chính bạn viết ra hoặc download về từ nhiều nguồn khác nhau.
Chúng ta cũng sẽ được biết một số tài nguyên liên quan đáng tìm hiểu để có cái
nhìn sâu sắc hơn về Windows scripting, cũng như một số cơng cụ trợ giúp có
thể sẽ rất hữu ích trong tương lai.
Các thiết lập TCP/IP scripting
Hầu như admin nào cũng dùng Visual Basic Script (VBScript) để viết kịch bản
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ắt đầu, hãy chạy script trên một máy cục bộ:
strComputer = "."
Ở đây, tiền tố str- được đặt đầu đối tượng là để chỉ strComputer là một biến có
chứa xâu, cịn dấu chấm là ký hiệu tham chiếu tới máy cục bộ và được dùng
như một điểm bắt đầu của namespace WMI. Vậy không gian tên WMI là gì?

Thực ra, đó là một tập hợp phân cấp các lớp đối tượng khác nhau, có thể được
dùng để quản lý nhiều mặt khác nhau của máy tính Windows. Ví dụ, có một
namespace gốc và bên dưới nó là hàng tá namespace con khác như
SECURITY, CIMV2, perfmon… Hầu hết các lớp WMI hữu ích nằm trong
khơng gian tên root\cimv2 và trước khi làm việc với bất kỳ lớp nào trong số
đó, chúng ta cần diễn giải chúng thành các đối tượng. Sau đó là xem xét thuộc
tính của các đối tượng này và gọi phương thức để thao tác chúng.
Lớp, đối tượng, thuộc tính, phương thức - chúng là những gì? Dưới đây là một


phân tích đơn giản có thể giúp bạn hiểu về chúng: xem xét lớp
MicrowaveOven, tức tập hợp trừu tượng của tất cả các lị vi sóng (khơng có
một lị thực nào được đưa vào trong đó cả). Lớp này có thể có các thuộc tính:
màu sắc (Color), kích thước theo khối lập phương (CubicInches), mặt quay
trịn (HasTurntable)… Có lẽ bạn hiểu thuộc tính chính là các đặc điểm, tính
chất đặc trưng cho một lớp. Nói cách khác, các lị vi sóng này sẽ có một màu
nào đó, có một kích thước bên trong nào đó và chúng có thể quay trịn hoặc
khơng.
Lớp MicrowaveOven cũng có các phương thức. Phương thức, tức là một hàm
tính tốn hoặc được định nghĩa theo một quy luật nhất định để lớp có thể thao
tác hoặc bạn có thể thao tác với lớp. Với lớp cụ thể này, một số phương thức có
thể dùng là SetCookingTime (thiết lập thời gian nấu), SetPowerLevel (thiết lập
mức điện sử dụng), Reset (nấu lại)… Thông thường, để gọi một phương thức
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 để
‘thiết lập thời gian nấu và ghi lại đoạn mã lỗi kết
quả
objMicrowave.Color = strColor 'thiết lập giá trị thuộc tính Color (màu sắc)
Cũng khơng q khó phải khơng các bạn!
Trở lại với script
Muốn truy cập các thiết lập cấu hình TCP/IP của máy dùng WMI, bạn cần viết
mã:
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Lệnh này sẽ kết nối bạn 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à thiết lập nó bằng với giá

trị trả về của phương thức GetObject. Sau khi kết nối tới namespace này, bạn
có thể thu thập thông tin như bên dưới:
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
Dòng lệnh này chạy như thế nào? Đầu tiên, bạn có thể thấy đối tượng có tên
objWMIService mà chúng ta vừa mơ tả một phút trước ở dịng bên trên. Sau
đối tượng này là ExecQuery, có thể là thuộc tính mà cũng có thể là phương
thức (cấu trúc của lệnh ln ln là doituong.thuoctinh hoặc
doituong.phuongthuc). Chúng ta có thể dễ dàng đốn ra đó là một phương thức
vì đằng sau nó là một câu truy vấn. Phương thức ExecQuery được gọi bằng


cách thêm một tham số vào nó. Tham số ở đây là một lệnh SQL (SELECT), trả
ra tập hợp (được đánh dấu bởi tiền tố “col-”) của tất cả (dấu hoa thị) cấu hình
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 ln 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
Win32_NetworkAdapterConfiguration để thay đổi địa chỉ IP và cổng vào mặc
định của bộ điều hợp mạng sang thiết lập mới chúng ta đã định nghĩa trong các
biến mảng. Thực hiện như sau:


errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Ở đây, biến err- là cần thiết, giống như một nơi lưu trữ đoạn mã lỗi trả về khi
phương thức chạy.
Mang tất cả lại với nhau
Bây giờ, ghép tất cả các phần lại với nhau và hãy xem chúng ta có những gì:
strComputer = "."
arrIPAddress = Array("172.16.11.99")
arrSubnetMask = Array("255.255.255.0")
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from
Win32_NetworkAdapterConfiguration")
For Each objNetAdapter in colNetAdapters
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Next
Bạn biết đấy, đoạn mã này đưa ra các định nghĩa biến, điều khiển lỗi, dùng dữ
liệu đầu vào và kiểm chứng kết quả trả về. Chúng ta sẽ sử dụng lại đoạn mã
này trong những phần sau của loạt bài, nhưng đầu tiên hãy xem liệu nó có làm

việc hay không. Ghi script lại với tên ChangeIPAddress.vbs (nhớ là phải tắt
Word Wrap trong Notepad) và copy nó lên desktop của máy chủ có địa chỉ tĩnh
172.16.11.45. Sau đó, mở cửa sổ dòng lệnh Command Promp với vai trò người
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
Vâng, nó đã làm việc! Địa chỉ IP của máy đã được thay đổi thành công từ .45
thành .99 như hiển thị trên lệnh Ipconfig thứ hai.
Còn nhiều điều thú vị nữa về Windows scripting, nhưng xin hẹn các bạn ở
phần hai. Và bây giờ thì xin tạm biệt!




×