Quản lý các mạng Windows dùng script

84 318 2
Quản lý các mạng Windows dùng script

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Quản lý các mạng Windows dùng script

Quản các mạng Windows dùng Script Mitch Tulloch 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 đế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ỉ toà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 scriptcá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 hoá 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 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 toá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 quá 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 luôn luôn là doituong.thuoctinh hoặc doituong.phuongthuc). Chúng ta có thể dễ dàng đoá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 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ế? 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à 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. Phần 2: Hoàn chỉnh script Ở phần trước chúng ta đã biết đến một số khái niệm cơ bản về kỹ thuật scripting như đối tượng (object), phương thức (method), thuộc tính (property) và viết ra một scritp đơn giản thay đổi địa chỉ IP gán cho bộ điều hợp mạng. Sau đó, chúng ta đã sử dụng bốn script đầu tiên, được gọi là ChangeIPAddress.vbs: 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 Khi chạy script này trên server Windows, nó thay đổi thành công địa chỉ IP của máy từ .45 sang . 99. (Kiểm tra bằng lệnh ipconfig trước và sau khi chạy script). Kết quả hoàn toàn tốt. Nhưng script chúng ta đã xây dựng mới từng lại ở mức khá đơn giản. Còn thiếu nhiều yếu tố quan trọng khác như các định nghĩa biến, điều khiển lỗi, dùng dữ liệu đầu vào và xác nhận dữ liệu đầu ra cần phải bổ sung vào để có được một script tương đối hoàn chỉnh. Chúng ta sẽ thực hiện điều đó trong phần hai này. Các định nghĩa biến Việc đầu tiên chúng ta cần làm để sắp xếp gọn gàng script là định nghĩa các biến sẽ dùng. VBScript cho phép định nghĩa ngầm các biến đơn giản bằng cách dùng nó trong một câu lệnh, nhưng sẽ tốt hơn nếu bạn khai báo tường minh chúng ngay khi bắt đầu script. Khai báo một biến sẽ nói cho VBScript biết về sự tồn tại của nó để cấp phát bộ nhớ lưu trữ. Vì sao khai báo biến tường minh lại hay hơn? Ví dụ như trong một script dài, bạn thường phạm phải một hay một số lỗi gõ phím nhầm. Và khi gõ nhầm tên của một biến, script của bạn sẽ không chạy được. Nếu khai báo biến tường mình ở đầu script thì bất kỳ biến nào được khai báo ngầm về sau trong script (có thể là nguyên nhân gây ra lỗi gõ nhầm) sẽ tạo ra một lỗi runtime. Các thông báo lỗi có thể sẽ giúp bạn xác định được vị trí nhầm lẫn và gỡ lỗi cho script của bạn. Để VBScript biết bạn khai báo tường minh tất cả các biến trong script, thêm lệnh sau vào đầu script: Option Explicit Nếu thêm lệnh này vào đầu script ChangeIPAddress.vbs và chạy nó từ Command Prompt, kết quả là: C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. C:\Documents and Settings\Administrator.DC-1\Desktop\ChangeIPAddress.vbs(2, 1) Microsoft VBScript runtime error: Variable is undefined: 'strComputer' Điều mà VBScript (hay cơ chế script đã đăng ký của Windows Script Host để chạy các script VBScript) muốn nói ở đây là có một lỗi trong dòng 2 của script: strComputer = "." Vì sao lại xuất hiện lỗi này? Đó là do chúng ta đang gán giá trị cho một biến xâu (strComputer) chưa được khai báo. Vì thế, bây giờ chúng ta cần thêm các khai báo cho biến dùng trong script: Option Explicit Dim objWMIService Dim objNetAdapter Dim strComputer Dim arrIPAddress Dim arrSubnetMask Dim colNetAdapters Dim errEnableStatic strComputer = "." arrIPAddress = Array("172.16.11.93") 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 Chú ý là khi dùng Option Explicit (tuỳ chọn khai báo tường minh), bạn phải khai báo tất cả biến trong script của mình, gồm cả đối tượng, xâu, mảng, tập hợp, biến cho đoạn mã lỗi… Nghe có vẻ rất rắc rối phức tạp nhưng thực tế chỉ cần chạy một số trang dài, ngay cả khi chạy chương trình gỡ lỗi rungning time, bạn sẽ biết nó hữu ích như thế nào. Cũng chú ý là không cần khai báo biến theo trình tự, chỉ cần nhớ khai báo cho từng biến trước khi dùng là được. Thông thường người ta đặt tất cả khai báo biến vào một phần riêng trên đầu script như chúng ta đã làm ở trên. Điều khiển lỗi Bây giờ, chúng ta đã loại bỏ được các lỗi gõ nhầm khi chạy script đã được soát lại, script hoạt động. Nhưng nếu nó không hoạt động thì sao? Ví dụ, chuyện gì sẽ xảy ra nếu chúng ta thay đổi script đi một chút để chạy trên một máy từ xa thay vì máy cục bộ mà trong đó máy từ xa không nằm trên mạng? Một lần nữa lỗi thời gian chạy (tức lỗi xảy ra khi script đang được thực thi, ngược lại với lỗi cú pháp mà VBScript có thể nhận ra khi biên dịch script trước khi chạy nó) sẽ xuất hiện và script sẽ bị ngừng lại, hiển thị một thông báo lỗi tương tự như thông báo chúng ta đã thấy ở trên. Chuyện gì sẽ xảy ra nếu chúng ta viết ra một script để thực hiện một số thao tác? Trong trường hợp này tất nhiên chúng ta không muốn có một lỗi thời gian chạy khiến script phải dừng lại giữa chừng mà ít nhất script cũng phải thực hiện tất cả các thao tác khác đã được xây dựng. Một ví dụ điển hình là script giám sát các thiết lập trên một số máy tính mà không thay đổi các thiết lập đó. Trong trường hợp này bạn sẽ cần xây dựng script chạy liên tục cho dù một hay một số máy bị hư hỏng không chạy được. Cách đơn giản nhất để kiểm soát các lỗi thời gian chạy là lờ chúng đi khi chúng xuất hiện. Bạn có thể nói với VBScript thực hiện điều này bằng cách thêm lệnh sau vào gần nơi bắt đầu của script, chẳng hạn như ngay sau Option Explicit: On Error Resume Next Tất nhiên, bạn còn muốn thực hiện thêm nhiều thứ khác trong kiểm soát lỗi. Ví dụ như kiểm tra sự tồn tại của một điều kiện lỗi thời gian chạy ở một số điểm nào đấy trong script (như ngay sau khi kết nối tới dịch vụ WMI trên một máy từ xa) để xác định xem liệu một hoạt động nào đó script được quy định để thực hiện có thành công hay không. Sau đó, dựa trên kết quả kiểm tra điều kiện lỗi, bạn có thể quyết định script các hoạt động tiếp theo của script. Ví dụ, nếu một lỗi xuất hiện, bạn có thể nhận được thông báo nói rằng: “Computer X not found” (không tìm thấy máy tính X) và sau đó script tiếp tục chạy. Chúng ta sẽ tìm hiểu sâu hơn về kiểm soát lỗi trong một số bài khác, còn bây giờ bạn chỉ cần thêm lệnh trên vào để bỏ qua bất kỳ lỗi thời gian chạy nào xuất hiện. Dữ liệu đầu vào của người dùng Sẽ phải làm gì nếu chúng ta muốn mô tả địa chỉ IP mới cho máy khi chạy script thay vì viết mã cho nó vào script dưới dạng 172.16.11.99? Trong trường hợp này chúng ta cần chỉnh sửa script để cho phép cung cấp dữ liệu vào của người dùng khi chạy nó. Thực hiện bằng cách thêm vào các tham số khi chạy script từ dòng lệnh. Ví dụ gõ ChangeIPAddress.vbs 172.16.11.188 sẽ thay đổi địa chỉ IP của bộ điều hợp mạng thành 172.16.11.188… Chúng ta có thể thực hiện như sau: Option Explicit On Error Resume Next 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 = "." 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 Chúng ta hãy phân tích từng phần một. Đầu tiên là khai báo một biến mới: Dim strAddress Đây là một biến xâu (string) sẽ chứa tham số (địa chỉ IP) chúng ta mô tả khi chạy script. Tiếp theo là thêm các dòng bên dưới vào sau phần khai báo: If WScript.Arguments.Count = 0 Then Wscript.Echo "Usage: ChangeIPAddress.vbs new_IP_address" WScript.Quit End If Các dòng này thực hiện điều gì? Thuộc tính Arguments của đối tượng WScript trả về tập hợp các tham số được mô tả khi chạy script. Phương thức Count trả ra số lượng tham số chúng ta nhập vào và mục đích của phần đoạn mã này là kiểm tra xem liệu chúng ta có quên nhập bất kỳ tham số (số tham số bằng 0) nào không. Nếu có, nó sẽ báo hiệu (hoặc hiển thị) một thông báo nói cho bạn biết cách sử dụng script phù hợp như thế nào và chương trình chạy của script bị ngừng lại hoàn toàn. Cuối cùng, dòng cũ: arrIPAddress = Array("172.16.11.93") nơi chúng ta viết mã cho địa chỉ IP mới theo kiểu gán mảng bây giờ đã được thay thế bằng hai dòng bên dưới: strAddress = Wscript.Arguments.Item(0) arrIPAddress = Array(strAddress) Dòng đầu tiên lấy ra phần tử đầu tiên (phần tử 0) của tập hợp WScript.Arguments và gán nó trở thành biến xâu strAddress. Dòng thứ hai sau đó lấy biến xâu strAddress này và gán nó trở thành phần tử đầu tiên của mảng arrIPAddress. Hãy xem chuyện gì xảy ra khi chạy script mới này, đầu tiên không mô tả tham số, sau đó là chạy với một tham số: C:\Documents and Settings\Administrator.DC-1\Desktop>ipconfig Windows IP Configuration Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 172.16.11.31 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 172.16.11.1 C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Usage: ChangeIPAddress.vbs new_IP_address C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs 172.16.11.188 Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. C:\Documents and Settings\Administrator.DC-1\Desktop>ipconfig Windows IP Configuration Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 172.16.11.188 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 172.16.11.1 Chương trình chạy khá tuyệt! Kiểm chứng đầu ra Nếu bạn thấy chán khi phải gõ mãi lệnh ipconfig sau khi chạy script để kiểm tra kết quả, còn một cách khác giúp bạn: sử dụng các dòng như bên dưới: For Each objNetAdapter in colNetAdapters errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask) Next Mục đích của đoạn mã này là thay đổi địa chỉ IP được gán cho bộ điều hợp mạng, dùng phương thức objNetAdapter.EnableStatic. Nhưng bạn nên chú ý là cần phải có một biến err- (ở đây là errEnableStatic) dùng làm nơi lưu trữ đoạn mã lỗi trả về khi chạy phương thức. Danh sách mã lỗi có thể được trả về từ phương thức EnableStatic của lớp Win32_NetworkAdapterConfiguration bạn có thể tham khảo trên MSDN. Và từ danh sách này chúng ta có thể thấy kết quả trả về bằng 0 nghĩa là thao tác script thực hiện đã thành công (ví dụ như địa chỉ IP của bộ điều hợp đã được thay đổi thành công). Cách đơn giản nhất để kiểm tra là thêm dòng bên dưới vào cuối script: Wscript.Echo errEnableStatic Chạy script lại một lần nữa: C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs 172.16.11.237 Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. 0 C:\Documents and Settings\Administrator.DC-1\Desktop>ipconfig Windows IP Configuration Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 172.16.11.237 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 172.16.11.1 Chắc chắn như vậy là đủ. Kết quả trả về bằng 0 cho thấy địa chỉ IP đã được thay đổi thành công. Một phương thức hay hơn sẽ hiển thị một thông báo bằng cách thay lệnh báo hiệu lại bằng lệnh sau: 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 Thêm các lệnh sau vào cuối script và chạy lại hai lần, một với địa chỉ IP chính xác và một với địa chỉ IP tuỳ ý: C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs 172.16.11.173 Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Adapter's IP address has been successfully changed to 172.16.11.173 C:\Documents and Settings\Administrator.DC-1\Desktop>ChangeIPAddress.vbs 172.16.11.1492567 Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Changing the adapter's address was not successful. Error code 70 C:\Documents and Settings\Administrator.DC-1\Desktop> Kết luận Việc cuối cùng chúng ta cần làm là thêm một vài chú thích vào script để diễn giải cho script. Đây luôn là một ý kiến hay vì có thể một năm sau đọc lại và muốn thay đổi một điểm gì đó trong script, bạn sẽ dễ dàng tìm ra cái mình cần. Đây là script hoàn chỉnh cuối cùng của chúng ta để thay đổi địa chỉ IP bộ điều hợp mạng: ========================= ' NAME: ChangeIPAddress.vbs ' 'AUTHOR: Mitch Tulloch 'DATE: October 2006 ' ARGUMENTS: '1. new_IP_address '=========================- 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) [...]... script hoặc quản mã nguồn để xem hay chỉnh sửa các thiết lập cấu hình trên máy Windows, xem trạng thái của các ứng dụng, dịch vụ Windows và thực hiện toàn bộ nhiều công việc hữu ích khác của một quản trị viên như triển khai, bảo trì, gỡ lỗi các mạng Windows Nói cách khác, nói tới WMI tức là nói tới: • • • Hệ điều hành Windows: làm việc trên môi trường Windows và cho các máy chạy Microsoft Windows Management:... Win32_NetworkAdapterConfiguration để quản 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 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... 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ộ... colItems WScript.Echo objItem.Caption Next Và đây là kết quả chạy của script: C:\scripts>cscript DisplayTimeZone.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001 All rights reserved (GMT-06:00) Central Time (US & Canada) Hãy xem script này hoạt động như thế nào Đầu tiên, bạn có thể thấy chúng dựa trên rất nhiều các script đã được tạo ở trên Nói cách khác,... cụ quản doanh nghiệp dựa trên nền tảng Web WBEM là công nghệ hợp tác phát triển bởi Microsoft, Cisco, Intel, Compaq và BMC Software nhằm hỗ trợ quản các hệ thống máy chủ và máy để bàn trong môi trường doanh nghiệp WMI cung cấp mô hình thể hiện, lưu trữ và truy vấn cấu hình, thông tin trạng thái hay nhiều khía cạnh hoạt động khác của các máy Windows Các nhà phát triển có thể dùng WMI để viết script. .. 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 cầu hình mạng TCP/IP cho các máy chạy trên nền Windows Ở... 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 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... Nhưng dùng danh sách các nhà cung cấp này, bạn có thể dễ dàng tìm kiếm trên MSDN để biết thêm thông tin về một nhà cung cấp cụ thể và tìm kiếm phương thức hỗ trợ Các lớp WMI Bên cạnh namespace và provider (nhà cung cấp), bạn cũng cần phải hiểu về các lớp WMI nếu muốn tăng cường thêm sức mạnh của WMI cho các hoạt động quản trị Windows trên script Lớp là một mẫu của kiểu đối tượng bạn có thể quản bằng... ta đã biết cách thay đổi địa chỉ IP của một bộ điều hợp mạng trên máy tính Windows dùng VBScript Chúng ta cũng đã biết về nhiều khái niệm cơ bản của Windows scripting như lớp (class), đối tượng (object), thuộc tính (property), phương thức (method) và các kiểu biến khác nhau như biến xâu (string), biến mảng (array), biến nguyên (integer), biến tập hợp (collection) Kết thúc ở phần một là một script đơn... 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à 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à 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

Ngày đăng: 27/04/2013, 16:37

Hình ảnh liên quan

Hình 1: Một số thuộc tính của lớp Win32_NetworkAdapterConfiguration - Quản lý các mạng Windows dùng script

Hình 1.

Một số thuộc tính của lớp Win32_NetworkAdapterConfiguration Xem tại trang 20 của tài liệu.
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:  - Quản lý các mạng Windows dùng script

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: Xem tại trang 22 của tài liệu.
Hình 4: Thông tin chi tiết về phương thức EnableStatic của lớp Win32_NetworkAdapterConfiguration - Quản lý các mạng Windows dùng script

Hình 4.

Thông tin chi tiết về phương thức EnableStatic của lớp Win32_NetworkAdapterConfiguration Xem tại trang 23 của tài liệu.
Hình 6: Thông tin chi tiết về phuơng thức SetTcpipNetbios - Quản lý các mạng Windows dùng script

Hình 6.

Thông tin chi tiết về phuơng thức SetTcpipNetbios Xem tại trang 25 của tài liệu.
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:  - Quản lý các mạng Windows dùng script

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: Xem tại trang 26 của tài liệu.
Hình 8: Ngắt NetBIOS cho TCP/IP dùng một script - Quản lý các mạng Windows dùng script

Hình 8.

Ngắt NetBIOS cho TCP/IP dùng một script Xem tại trang 27 của tài liệu.
Hình 9: NetBT đã được loại bỏ thành công - Quản lý các mạng Windows dùng script

Hình 9.

NetBT đã được loại bỏ thành công Xem tại trang 28 của tài liệu.
Hình 1: Thiết lập chính sách Windows Firewall để cho phép quản trị từ xa - Quản lý các mạng Windows dùng script

Hình 1.

Thiết lập chính sách Windows Firewall để cho phép quản trị từ xa Xem tại trang 35 của tài liệu.
Khi bạn khởi chạy NM3, nó sẽ có giao diện như hình 1: - Quản lý các mạng Windows dùng script

hi.

bạn khởi chạy NM3, nó sẽ có giao diện như hình 1: Xem tại trang 43 của tài liệu.
Hình 2: Mở một tab capture mới - Quản lý các mạng Windows dùng script

Hình 2.

Mở một tab capture mới Xem tại trang 44 của tài liệu.
Hình 3: Vết tích của ping 172.16.11.125 - Quản lý các mạng Windows dùng script

Hình 3.

Vết tích của ping 172.16.11.125 Xem tại trang 45 của tài liệu.
Hình 4: Các “cuộc đàm thoại” - Quản lý các mạng Windows dùng script

Hình 4.

Các “cuộc đàm thoại” Xem tại trang 46 của tài liệu.
Hình 5: Việc kiểm tra một gói - Quản lý các mạng Windows dùng script

Hình 5.

Việc kiểm tra một gói Xem tại trang 47 của tài liệu.
Hình 6: Các kết quả thu được khi chạy ChangeIPAddress.vbs 172.16.11.144 - Quản lý các mạng Windows dùng script

Hình 6.

Các kết quả thu được khi chạy ChangeIPAddress.vbs 172.16.11.144 Xem tại trang 48 của tài liệu.
Hình 7: Kết quả chạy ChangeGateway.vbs 172.16.11. 21 - Quản lý các mạng Windows dùng script

Hình 7.

Kết quả chạy ChangeGateway.vbs 172.16.11. 21 Xem tại trang 49 của tài liệu.
Lưu ý từ hình này rằng máy tính nguồn (test124) vẫn cho rằng máy đích có địa chỉ IP là - Quản lý các mạng Windows dùng script

u.

ý từ hình này rằng máy tính nguồn (test124) vẫn cho rằng máy đích có địa chỉ IP là Xem tại trang 60 của tài liệu.
Phần 9: Tìm hiểu kịch bản điều khiển xa - Quản lý các mạng Windows dùng script

h.

ần 9: Tìm hiểu kịch bản điều khiển xa Xem tại trang 61 của tài liệu.
- Cscript.exe, cho phép cấu hình các thuộc tính kịch bản và hiển thị đầu ra kịch bản từ cửa sổ lệnh. - Quản lý các mạng Windows dùng script

script.exe.

cho phép cấu hình các thuộc tính kịch bản và hiển thị đầu ra kịch bản từ cửa sổ lệnh Xem tại trang 65 của tài liệu.
Hình 3: Sử dụng cscript.exe xuất đầu ra kịch bản bên trong cửa sổ lệnh - Quản lý các mạng Windows dùng script

Hình 3.

Sử dụng cscript.exe xuất đầu ra kịch bản bên trong cửa sổ lệnh Xem tại trang 66 của tài liệu.
Hình 2: Đầu ra của kịch bản xuất hiện như một hộp thoại - Quản lý các mạng Windows dùng script

Hình 2.

Đầu ra của kịch bản xuất hiện như một hộp thoại Xem tại trang 66 của tài liệu.
Hình 4: Tạo cscript.exe cho cấu hình mặc định - Quản lý các mạng Windows dùng script

Hình 4.

Tạo cscript.exe cho cấu hình mặc định Xem tại trang 67 của tài liệu.
Hình 5: Khi Cscript.exe là cấu hình kịch bản mặc định thì đầu ra của kịch bản được hiển thị bên trong cửa sổ lệnh  - Quản lý các mạng Windows dùng script

Hình 5.

Khi Cscript.exe là cấu hình kịch bản mặc định thì đầu ra của kịch bản được hiển thị bên trong cửa sổ lệnh Xem tại trang 67 của tài liệu.
Hình 1: Key property cho lớp Win32_BootConfiguring Từ trang MSDN này, chúng ta có thể thấy được rằng key property cho lớp  - Quản lý các mạng Windows dùng script

Hình 1.

Key property cho lớp Win32_BootConfiguring Từ trang MSDN này, chúng ta có thể thấy được rằng key property cho lớp Xem tại trang 80 của tài liệu.
Hình 3: Kết nối đến lớp Win32_BootConfiguration Kích Connect để quay về cửa sổ chính, nơi có tất cả các nút hiển thị ở đây: - Quản lý các mạng Windows dùng script

Hình 3.

Kết nối đến lớp Win32_BootConfiguration Kích Connect để quay về cửa sổ chính, nơi có tất cả các nút hiển thị ở đây: Xem tại trang 81 của tài liệu.
Hình 2: Windows Management Instrumentation Tester Kích nút Connect và kết nối đến không gian tên root\cimv2: - Quản lý các mạng Windows dùng script

Hình 2.

Windows Management Instrumentation Tester Kích nút Connect và kết nối đến không gian tên root\cimv2: Xem tại trang 81 của tài liệu.
Hình 4: Đã kết nối đến lớp - Quản lý các mạng Windows dùng script

Hình 4.

Đã kết nối đến lớp Xem tại trang 82 của tài liệu.
Hình 5: Hiển thị các instance của lớp - Quản lý các mạng Windows dùng script

Hình 5.

Hiển thị các instance của lớp Xem tại trang 82 của tài liệu.
Hình 6: Các instance của Win32_BootConfiguration - Quản lý các mạng Windows dùng script

Hình 6.

Các instance của Win32_BootConfiguration Xem tại trang 83 của tài liệu.
Đặt thông tin này vào bảng để dễ đọc hơn: - Quản lý các mạng Windows dùng script

t.

thông tin này vào bảng để dễ đọc hơn: Xem tại trang 84 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan