Xem mẫu

  1. BỘ CÔNG THƢƠNG TRƢỜNG CAO ĐẲNG CÔNG NGHIỆP VÀ THƢƠNG MẠI GIÁO TRÌNH MÔ ĐUN: QUẢN TRỊ HỆ THỐNG WEBSERVER VÀ MAILSERVER NGHỀ : QUẢN TRỊ MẠNG Trình độ: CAO ĐẲNG NGHỀ Ban hành kèm theo Quyết định số: /QĐ-CDCN&TM ngày tháng năm 2018 của Hiệu trưởng Trường Cao đẳng Công nghiệp và Thương Mại Vĩnh phúc, năm 2018
  2. MỤC LỤC CHƢƠNG 1. NHỮNG KHÁI NIỆM CƠ BẢN ...............................................1 1.1. Scripts và Network Scripting ....................................................................1 1.2. Các thành phần của Script .........................................................................2 1.3. Điều khiển lỗi, định nghĩa biến và dữ liệu ngƣời dùng .............................4 1.4. Ví dụ về xây dựng và thi hành một Scripts ...............................................5 CHƢƠNG 2. KIỂM SOÁT QUẢN LÝ WINDOWS BẰNG SCRIPT (WINDOWS MANAGEMENT INSTRUMENTATION – WMI SCRIPTS) ........................7 2.1.Giới thiệu WMI .........................................................................................7 2. 2. Nguyên tắc hoạt động của WMI ............................................................ 13 2.3. Các lớp WMI .......................................................................................... 14 2.4. Sử dụng WMI ......................................................................................... 16 2.5. Các thuộc tín của WMI ........................................................................... 29 CHƢƠNG 3. VIẾT KỊCH BẢN CHẠY TRÊN CÁC MÁY TỪ XA (SCRIPTING REMOTE)........................................................................................................ 34 3.1. Giới thiệu về Scripting Romote và xây dựng Scripting Romote .............. 34 3.3. Xử lý sự cố lỗi với Scripting Romote ...................................................... 40 3.4. Xử lý lỗi kịch bản điều khiển từ xa bằng Network Monitor 3.0 .............. 48 3.5. Tìm hiểu kịch bản điều khiển xa ............................................................. 57 3.6.Các thủ thuật của kịch bản điều khiển xa ................................................. 61 CHƢƠNG 4. MỘT SỐ THỦ THUẬT SCRIPTS KHÁC ................................. 67 4.1. Thủ thuật “runas” nhƣng với sự mã hóa .................................................. 67 4.2.Truy vấn cho quản trị viên cục bộ bằng WMIC ....................................... 72 4.4. Sử dụng WMIC tƣơng tác ....................................................................... 95 4.4. Sử dụng WMIC trong các file Batch ....................................................... 96
  3. CHƢƠNG TRÌNH MÔN HỌC Tên môn học: Quản trị hệ thống Webserver, Mail server Mã môn học: MĐCC13030131 Thời gian thực hiện môn học: 75 giờ; (Lý thuyết: 15 giờ; Thực hành, thí nghiệm, thảo luận, bài tập: 57 giờ; Kiểm tra: 3 giờ) I. Vị trí, tính chất của môn học: - Vị trí của môn học: Môn học đƣợc bố trí sau khi sinh viên học xong các môn học chung, các môn học cơ sở chuyên ngành, sau một số mô đun chuyên môn nghề nhƣ: Mạng máy tính căn bản, Hệ điều hành, Quản trị Windows server cơ bản, Quản trị Windows Server nâng cao. - Tính chất của môn học: Là môn học môn học, mô đun chuyên môn ngành, nghề. II. Mục tiêu môn học: Môn học này cung cấp cho ngƣời học các kiến thức cơ bản về kịch bản quản lý, điều hành mạng, kịch bản tấn công mạng, kỹ thuật xây dựng kịch bản mạng - Về kiến thức: + Trình bày đƣợc các kiến thức cơ bản về kịch bản mạng và kỹ thuật xây dựng kịch bản, các bƣớc xây dựng và triển khai kịch bản quản lý, kiểm soát Windows và điều khiển từ xa trên nền VB Scripts - Về kỹ năng: + Xây dựng đƣợc kịch bản triển khai quản lý máy tính và hệ thống mạng. + Tự động hóa việc quản lý, phát hiện lỗi, báo cáo và xử lý lỗi bằng Scripts. + Sử dụng các lớp, các đối tƣợng và thành phần của đối tƣợng để xây dựng các kỹ thuật kịch bản hỗ trợ tự động hóa quá trình kiểm soát và điều khiển. - Về thái độ: Có đạo đức và lƣơng tâm nghề nghiệp, ý thức kỷ luật tốt, tích cực tiếp thu kiến thức mới. III. Nội dung môn học: 1. Nội dung tổng quát và phân phối thời gian: Thời gian (giờ) TT Nội dung môn học Tổng Lý Thự Kiể số thuyế c m 1
  4. t hành tra 1 Chƣơng 1. Những khái niệm cơ bản 5 5 0 2 Chƣơng 2. Kiểm soát quản lý Windows bằng Script (Windows Management 23 3 19 1 Instrumentation – WMI Scripts) 3 Chƣơng 3. Viết kịch bản chạy trên các máy từ xa (scripting remote) 22 2 19 1 4 Chƣơng 4. Một số thủ thuật Scripts khác 25 5 19 1 Tổng cộng 75 15 57 3 2. Nội dung chi tiết: Chƣơng 1. Những khái niệm cơ bản Mục tiêu: - Kiến thức: Trình bày kịch bản và kịch bản mạng máy tính trên nền tảng hệ điều hành Windows, liệt kê đƣợc các bƣớc xây dựng và triển khai đƣợc một kịch bản và mô tả đƣợc các thành phần của một Scripts. - Kỹ năng: + Viết đƣợc 1 Script sử dụng mã lệnh có sẵn + Triển khai đƣợc 1 Script đã xây dựng - Thái độ: Tích cực tìm hiểu về kịch bản mạng. Nội dung chƣơng: Thời gian: 5 giờ (LT: 5; TH: 0) 1.1. Scripts và Network Scripting 1.2. Các thành phần của Script 1.3. Điều khiển lỗi, định nghĩa biến và dữ liệu ngƣời dùng 1.4. Ví dụ về xây dựng và thi hành một Scripts Chƣơng 2. Kiểm soát quản lý Windows bằng Script (Windows Management Instrumentation – WMI Scripts) Mục tiêu: - Kiến thức: Trình bày đƣợc ý nghĩa và nguyên tắc hoạt động của VMI, các lớp WMI và cách sử dụng WMI. - Kỹ năng: + Xây dựng đƣợc WMI để quản lý kiểm soát Windows và hệ thống máy tính trên hệ thống mạng + Triển khai Script để tự động hóa quá trình kiểm soát hệ thống mạng - Thái độ: Tích cực tìm hiểu về các thành phần phần của WMI Scripts. Nội dung chƣơng: Thời gian: 23 giờ (LT: 3; TH: 20) 2
  5. 2.1. Giới thiệu WMI 2.2. Nguyên tắc hoạt động của WMI 2.3. Các lớp WMI 2.4. Sử dụng WMI 2.5. Sử dụng Win32_NetworkAdapterConfiguration 2.6. Các thuộc tín của WMI Chƣơng 3. Viết kịch bản chạy trên các máy từ xa (scripting remote) Mục tiêu: - Kiến thức: Trình bày đƣợc ý nghĩa và nguyên tắc hoạt động của kịch bản trên các máy từ xa, các lớp scripting remote và cách sử dụng scripting remote. - Kỹ năng: + Xây dựng đƣợc scripting remote để quản lý kiểm soát điều khiển từ xa các máy tính trên hệ thống mạng + Triển khai Script để tự động hóa quá trình điều khiển từ xa trong hệ thống mạng - Thái độ: Tích cực tìm hiểu về các thành phần phần của Remote Scripting. Nội dung chƣơng: Thời gian: 22 giờ (LT: 2; TH: 20) 3.1. Giới thiệu về Scripting Romote và xây dựng Scripting Romote 3.2. Xử lý sự cố lỗi với Scripting Romote 3.3. Xử lý lỗi kịch bản điều khiển từ xa bằng Network Monitor 3.0 3.4. Tìm hiểu kịch bản điều khiển xa 3.5. Các thủ thuật của kịch bản điều khiển xa Chƣơng 4. Một số thủ thuật Scripts khác Mục tiêu: - Kiến thức: Sinh viên trình bày đƣợc các thủ thuật runas, truy vấn cục bộ để lấy thông tin, tƣơng tác và xử lý theo lô. - Kỹ năng: + Triển khai đƣợc các thủ thuật mã hóa, truy vấn, tƣơng tác và xử lý theo lô với thủ thuật runas và các WMIC tƣơng ứng Thái độ: Tích cực tìm hiểu về các kỹ thuật Script bổ sung Nội dung chƣơng: Thời gian: 25 giờ (LT: 5; TH: 20) 4.1. Thủ thuật “runas” nhƣng với sự mã hóa 4.2. Truy vấn cho quản trị viên cục bộ bằng WMIC 4.3. Sử dụng WMIC tƣơng tác 4.4. Sử dụng WMIC trong các file Batch IV. Điều kiện thực hiện chƣơng trình: 3
  6. Đầy đủ tài liệu học tập nhƣ: Giáo án, giáo trình về môn học Kỹ thuật kịch bản mạng V. Phƣơng pháp và nội dung đánh giá: 1. Nội dung - Về kiến thức: + Trình bày đƣợc các kiến thức nền tảng về kịch bản mạng + Trình bày đƣợc các đặc điểm kỹ thuật của một số kịch bản thông dụng + Trình bày đƣợc các kỹ thuật xây dựng và triển khai kịch bản mạng. - Về kỹ năng: + Xây dựng và lập trình đƣợc các script để quản lý và tự động hóa quá trình kiểm soát và điều khiển từ xa. + Triển khai một số kỹ thuật kịch bản mạng phổ biến. - Về thái độ: Có đạo đức và lƣơng tâm nghề nghiệp, ý thức kỷ luật tốt, tích cực tiếp thu kiến thức mới. 2. Phƣơng pháp - Học sinh tham gia học ít nhất 80% tổng số tiết môn học, tham gia kiểm tra và thi kết thúc môn học theo quy chế hiện hành. - Điểm đánh giá quá trình gồm có: + Kiểm tra thƣờng xuyên: 01 bài kiểm tra (Điểm hệ số 1) + Kiểm tra định kỳ: 03 bài kiểm tra (Điểm hệ số 2) + Thi kết thúc môn học: - Thang điểm: thang điểm 10. VI. Hƣớng dẫn sử dụng chƣơng trình: 1. Phạm vi áp dụng chƣơng trình: Chƣơng trình môn học Network Scripting đƣợc sử dụng để giảng dạy cho trình độ cao đẳng khóa tuyển sinh năm 2017. 2. Hƣớng dẫn một số điểm chính về phƣơng pháp giảng dạy môn học: - Tuỳ theo nội dung của mỗi bài mà giáo viên có thể sử dụng những phƣơng pháp mang tính chất vừa truyền thống vừa hiện đại nhƣ: thuyết trình, trực quan, hoạt động nhóm.. - Để đảm bảo và nâng cao chất lƣợng đào tạo của môn học rất cần có sự đầu tƣ cơ sở vật chất, trang thiết bị, đồ dùng dạy học nhƣ: phòng học thực hành máy tính, máy chiếu đa năng, giáo trình, các Video trực quan, Các thiết bị phần cứng và thiết bị mạng máy tính 3. Những trọng tâm chƣơng trình cần chú ý: 4
  7. CHƢƠNG 1. NHỮNG KHÁI NIỆM CƠ BẢN 1.1. Scripts và Network Scripting 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ế 1
  8. 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 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 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. 1.2. Các thành phần của Script 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 2
  9. 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 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) 3
  10. 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) 1.3. Điều khiển lỗi, định nghĩa biến và dữ liệu ngƣời dùng 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 4
  11. 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 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. 1.4. Ví dụ về xây dựng và thi hành một Scripts 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") 5
  12. 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 6
  13. CHƢƠNG 2. KIỂM SOÁT QUẢN LÝ WINDOWS BẰNG SCRIPT (WINDOWS MANAGEMENT INSTRUMENTATION – WMI SCRIPTS) 2.1. Giới thiệu WMI WMI là viết tắt của Windows Management Instrumentation. Đƣợc thiết kế bởi Microsoft, đây là một cơ sở hạ tầng để quản lý dữ liệu và thông tin đƣợc chuẩn hóa độc lập với thiết bị. Kể từ Windows 2000, WMI đƣợc cài đặt sẵn với hệ điều hành Windows. - WMI là sự triển khai của Microsoft về Quản lý Doanh nghiệp Dựa trên Web, WBEM (Web-Based Enterprise Management), đƣợc quản lý bởi DMTF (DMTF - Distributed Management Task Force). WBEM đặt ra các tiêu chuẩn để cho phép truy cập dữ liệu từ các công nghệ và thiết bị không đồng nhất trên một kiến trúc tiêu chuẩn hóa. WBEM sử dụng Mô hình Thông tin Chung CIM (CIM - Common Information Model) làm giản đồ để xác định thông tin về các đối tƣợng. Cả hai đều lƣu trữ tệp và chấp nhận lệnh in từ máy khách (Client) và sau đó gửi chúng đến một máy in trong mạng. WMI ra đời từ thời kỳ của Windows 98 hoặc sớm hơn. Trƣớc đây nó đƣợc gọi với cái tên khác Web-Based Enterprise Management (WBEM), tức Công cụ quản lý 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 lý 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 hoặc quản lý 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: có thể đƣợc dùng để quản lý các máy tính này.  Instrumentation: cung cấp nhiều công cụ để xem và chỉnh sửa những thứ chạy bên trong các máy tính này. 7
  14. Bạn có thể ví máy tính Windows giống nhƣ một chiếc xe ô tô và WMI giống nhƣ nguồn điện hay các thiết bị điện cho phép bảng đo đồng hồ hiển thị tốc độ, nhiệt độ động cơ, RPM… của ô tô. Bản thân các điều khiển bảng đo đồng hồ này không phải là WMI. Bạn cần phải đƣa ra cách lấy thông tin từ bảng điện và thể hiện nó ở dạng có thể đọc đƣợc. Viết VBScript sử dụng WMI cũng giống nhƣ tạo các bảng đo đồng hồ trung gian, liên hệ với thiết bị bên dƣới ô tô và hiển thị thông tin đối tƣợng để có thể cho bạn biết cần phải làm gì và điều khiển nào động cơ đang thực hiện. Nói cách khác, Windows tích hợp tất cả công cụ dựng sẵn này qua WMI. Bạn chỉ cần biết cách làm sao lấy chúng ra để thực hiện những điều mình muốn nhƣ thay đổi địa chỉ IP, xem múi giờ, khởi động lại máy từ xa, hiển thị danh sách các bản vá đã đƣợc cài đặt… WMI Namespace Đến giờ, chúng ta vẫn chƣa biết gì về cách thức hoạt động của WMI? Cũng không hẳn thế. Thực ra, để hiểu đƣợc về WMI đòi hỏi chúng ta cần phải kiên nhẫn và có một chút kiến thức cơ sở. Hãy bắt đầu bằng cách xem xét các namespace WMI. Trong thuật ngữ WMI, namespace là một cơ sở dữ liệu logic của các lớp và các thể hiện của chúng. Dƣới đây là một script đơn giản có tên ShowNamespaces.vbs, liệt kê tất cả các namespace WMI bên dƣới namespace gốc: Set objWMIService = GetObject("winmgmts:\\.\root") Set colNamespaces = objWMIService.InstancesOf("__NAMESPACE") For Each objNamespace In colNamespaces WScript.Echo objNamespace.Name Next Và kết quả chạy script trên một máy Windows XP là: C:\scripts>cscript ShowNamespaces.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. SECURITY RSOP Cli SecurityCenter WMI CIMV2 Policy 8
  15. Microsoft DEFAULT directory subscription Mỗi namespace này có thể là một nguồn cho phép bạn truy vấn thông tin liên quan đến trạng thái hay cấu hình một số yếu tố của máy tính Windows (thông thƣờng cũng có thể chỉnh sửa cấu hình đó). Các namespace này đƣợc tổ chức theo kiểu cấu trúc phân tầng nhƣ cấu trúc thƣ mục trên ổ cứng. Ví dụ, chúng ta có thể hiển thị tất cả namespace dƣới namespace gốc root\CIMV2 bằng cách thay đổi dòng đầu tiên trong script nhƣ sau: Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") Khi chạy script đã đƣợc thay đổi, kết quả có dạng: C:\scripts>cscript ShowNamespaces.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. ms_409 Applications Thực tế, root\CIMV2 là namespace WMI mặc định trên các máy Windows. Điều này có nghĩa là nếu bạn không mô tả một namespace để kết nối tới trong dòng đầu tiên của script, WMI sẽ mặc định tự động kết nối tới namespace root\CIMV2. Vì thế, nếu chúng ta thay đổi dòng đầu tiên thành: Set objWMIService = GetObject("winmgmts:\\") thì kết quả cũng giống nhƣ trên. Chú ý là chúng ta có thể bỏ phần trƣớc trong winmgmts:\\.\root\CIMV2 đi. Nhớ lại trong bài một, phần trƣớc thể hiện máy cục bộ và mặc định WMI cho rằng bạn muốn làm việc với máy cục bộ. Nhƣng thực tế, khi viết script ngƣời ta thƣờng sử dụng các biến (và định nghĩa chúng). Vì thế ở đây chúng ta có thể dùng một script phổ biến hơn để hiển thị các namespace: Option Explicit On Error Resume Next Dim strComputer 9
  16. Dim strWMINamespace Dim objWMIService Dim colNamespaces Dim objNamespace strComputer = "." strWMINamespace = "\root\CIMV2" Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace) Set colNamespaces = objWMIService.InstancesOf("__NAMESPACE") For Each objNamespace In colNamespaces WScript.Echo objNamespace.Name Next Tại sao chúng ta cần tìm hiểu tất cả các vấn đề này? Lý do chính là bởi tính linh hoạt! Ví dụ, nếu cần chạy script trên một máy từ xa, chúng ta có thể thay đổi biến strComputer thành địa chỉ của máy từ xa. Hoặc nếu cần hiển thị một phần khác của namespace, chúng ta có thể thêm một vài dòng vào script để nó nhận dữ liệu đầu vào của ngƣời dùng trên biến strWMINamespace. Nhà cung cấp WMI Tìm ra đúng namespace là thách thức đầu tiên (mặc dù hầu hết các trƣờng hợp kết nối tới namespace mặc định là đủ). Ngoài ra bạn còn cần tìm ra đúng nhà cung cấp phù hợp để truy vấn hoặc update dữ liệu trên hệ thống bạn đang hƣớng đến. Dƣới đây là script có tên ShowProviders.vbs, hiển thị tất cả nhà cung cấp WMI cho namespace root\CIMV2: Option Explicit On Error Resume Next Dim strComputer Dim strWMINamespace Dim objWMIService Dim colWin32Providers Dim objWin32Provider strComputer = "." strWMINamespace = "\root\CIMV2" 10
  17. Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace) Set colWin32Providers = objWMIService.InstancesOf("__Win32Provider") For Each objWin32Provider In colWin32Providers WScript.Echo objWin32Provider.Name Next Và kết quả sau khi chạy script này trên một máy Windows XP là: C:\scripts>cscript ShowProviders.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Win32_WIN32_TSLOGONSETTING_Prov MS_NT_EVENTLOG_PROVIDER Win32_WIN32_TSENVIRONMENTSETTING_Prov SCM Event Provider ProviderSubSystem VolumeChangeEvents NamedJobObjectLimitSettingProv HiPerfCooker_v1 WMIPingProvider Microsoft WMI Forwarding Event Provider Win32_WIN32_TSNETWORKADAPTERSETTING_Prov SystemConfigurationChangeEvents Win32_WIN32_TERMINALSERVICE_Prov Win32_WIN32_TSREMOTECONTROLSETTING_Prov Win32_WIN32_TSNETWORKADAPTERLISTSETTING_Prov Win32_WIN32_COMPUTERSYSTEMWINDOWSPRODUCTACTIVATIONSETTING_ Prov Win32_WIN32_TSSESSIONDIRECTORY_Prov CmdTriggerConsumer Standard Non-COM Event Provider SessionProvider WBEMCORE RouteEventProvider WhqlProvider 11
  18. Win32_WIN32_TSSESSIONSETTING_Prov Win32_WIN32_TERMINALTERMINALSETTING_Prov Win32_WIN32_TSCLIENTSETTING_Prov Win32_WIN32_TERMINALSERVICESETTING_Prov WMI Kernel Trace Event Provider Win32_WIN32_PROXY_Prov NamedJobObjectProv MS_Shutdown_Event_Provider SECRCW32 Win32ClockProvider MS_Power_Management_Event_Provider Win32_WIN32_WINDOWSPRODUCTACTIVATION_Prov RouteProvider Cimwin32A Msft_ProviderSubSystem Win32_WIN32_TERMINALSERVICETOSETTING_Prov NamedJobObjectSecLimitSettingProv Win32_WIN32_TSSESSIONDIRECTORYSETTING_Prov Win32_WIN32_TSPERMISSIONSSETTING_Prov Win32_WIN32_TSACCOUNT_Prov Win32_WIN32_TERMINAL_Prov MSIProv DskQuotaProvider NetDiagProv Win32_WIN32_TSGENERALSETTING_Prov CIMWin32 NamedJobObjectActgInfoProv NT5_GenericPerfProvider_V1 WMI Self-Instrumentation Event Provider MS_NT_EVENTLOG_EVENT_PROVIDER Nghe chừng có vẻ quá nhiều! 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ợ 12
  19. 2. 2. Nguyên tắc hoạt động của WMI - Để hoạt động nhƣ một máy chủ (Server), một thiết bị phải đƣợc cấu hình để lắng nghe các yêu cầu từ máy khách (Client) trên kết nối mạng. Chức năng này có thể tồn tại nhƣ một phần của hệ điều hành nhƣ một ứng dụng, vai trò đã cài đặt hoặc kết hợp cả hai. Ví dụ: hệ điều hành Windows Server của Microsoft cung cấp chức năng lắng nghe và phản hồi các yêu cầu của máy khách. Các vai trò (Roles) hoặc dịch vụ (Service) đƣợc cài đặt bổ sung làm tăng loại yêu cầu máy khách mà máy chủ có thể đáp ứng. Trong một ví dụ khác, máy chủ Apache Web server phản hồi các yêu cầu của trình duyệt Internet thông qua một ứng dụng bổ sung, Apache, đƣợc cài đặt trên cùng một hệ điều hành. - Khi một máy khách yêu cầu dữ liệu hoặc chức năng từ máy chủ, nó sẽ gửi một yêu cầu qua mạng. Máy chủ nhận đƣợc yêu cầu này và phản hồi với thông tin thích hợp. Đây là mô hình yêu cầu và phản hồi của mạng máy khách-máy chủ, còn đƣợc gọi là mô hình gọi và phản hồi (Call and Response Model). Máy chủ thƣờng sẽ thực hiện nhiều tác vụ bổ sung nhƣ là một phần của một yêu cầu và phản hồi, bao gồm xác minh danh tính của ngƣời yêu cầu, đảm bảo rằng máy khách có quyền truy cập vào dữ liệu hoặc tài nguyên đƣợc yêu cầu và định dạng đúng hoặc trả lại phản hồi cần thiết theo dự kiến đƣờng. - Khi các thiết bị trên mạng hoạt động, các cài đặt, thông số và trạng thái khác nhau có thể đƣợc đo và tạo tại bất kỳ thời điểm nào. Ví dụ, ổ đĩa cứng có tổng dung lƣợng lƣu trữ, dung lƣợng lƣu trữ đã sử dụng, dung lƣợng lƣu trữ trống hoặc nhiệt độ bên trong. Các giá trị này là động và thay đổi theo cách sử dụng hệ thống. Tại bất kỳ thời điểm nào, việc đọc các thông số này trong thiết bị vẫn tồn tại cho dù có ai để ý đến chúng hay không - Nền tảng WMI platform cung cấp một cách thống nhất để tạo và thực thi các tập lệnh (script) đọc các thông số và trong một số trƣờng hợp, có thể thay đổi các cài đặt đó mà không cần cài đặt thêm các tác nhân phần mềm (gọi là Agent) hoặc màn hình (Monitor). Trong trƣờng hợp của ổ cứng, WMI Provider có thể trả lời yêu cầu về nhiệt độ của ổ cứng cũng nhƣ gửi cảnh báo đến Trình quản lý đối tƣợng WMI Object Manager nếu nhiệt độ vƣợt quá mức đặt trƣớc. - Ngoài ra, đối với các ứng dụng quản lý, nền tảng WMI cung cấp Giao diện lập trình ứng dụng API (API - Application Programming Interface) ở cấp Trình quản lý đối tƣợng WMI Object Manager để không cần phải hiểu chi tiết cụ thể của từng nhà cung cấp WMI. Ví dụ, ứng dụng quản lý chỉ cần gọi Trình quản lý đối tƣợng WMI Object Manager chứ không cần truy vấn trực tiếp ổ cứng. 13
  20. - Khi một thiết bị đƣợc truy vấn hoặc một sự kiện đƣợc kích hoạt, dữ liệu sẽ truyền qua kiến trúc tiêu chuẩn của thiết bị đƣợc quản lý thông qua WMI Provider của nó đến Trình quản lý đối tƣợng WMI Object Manager và tới WMI Consumer. Toàn bộ cơ sở hạ tầng này đƣợc chuẩn hóa trên các thiết bị và nền tảng để bất kỳ phần mềm quản lý doanh nghiệp hỗ trợ WMI nào cũng có thể truy cập dữ liệu đƣợc thu thập trên bất kỳ thiết bị hỗ trợ WMI nào mà không cần biết bất kỳ điều gì về các thiết bị hoặc cấu trúc mạng giữa chúng. WMI có sẵn trên bất kỳ máy tính Windows hiện tại nào và do đó có thể đƣợc quản lý thông qua WMI 2.3. 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 lý bằng WMI. Ví dụ lớp có tên Win32_LogicalDisk là một mẫu đĩa logic trên các máy Windows, và WMI dùng lớp này để tạo một thể hiện của Win32_LogicalDisk cho từng đĩa đƣợc cài. Dƣới đây là một script có tên ShowClasses.vbs hiển thị tất cả các lớp (có khả năng là các đối tƣợng có thể quản lý) của namespace root\CIMV2: Option Explicit On Error Resume Next Dim strComputer Dim strWMINamespace Dim objWMIService Dim colClasses Dim objClass strComputer = "." strWMINamespace = "\root\CIMV2" Set objWMIService = GetObject("winmgmts:\\" & strComputer & strWMINamespace) Set colClasses = objWMIService.SubclassesOf() For Each objClass In colClasses WScript.Echo objClass.Path_.Path Next Và một số kết quả sau khi chạy script này trên máy Windows XP: 14
nguon tai.lieu . vn