QuảnlýmạngWindowsbằngScript-Phần10:Cácthủthuậtcủakịch
bản điềukhiểnxa
Trong các bài viết trước, chúng ta đã được giới thiệu về một số khái
niệm và các vấn đề xung quanh kịchbảnđiềukhiểnxa trên nền
Windows. Trong phần này chúng tôi sẽ tiếp tục giới thiệu cho cácbạn
hai thủthuật liên quan đến kịchbảnđiềukhiểnxa này qua sử dụng
kịch bản WMI được viết bằng VBScript.
Thủ thuật 1: Tạo Cscript.exe, cấu hình kịchbản mặc định trên các máy
tính từ xa
Đây là thủthuật đầu tiên và nó thực sự đơn giản nhưng cũng khá thông minh
do đó chúng ta cần phải có một số kiến thức cơ bản để dễ dàng tiếp cận. Bảo
đảm rằng bạn biết một số cách để khởi chạy kịchbản trên các máy tính
Windows. Ví dụ, nếu bạn có kịchbản ChangeIPAddress.vbs trên một máy
tính thì có thể khởi chạy nó bằng cách:
- Kích đúp vào file .vbs hoặc shortcut trỏ đến file.
- Kích Start, sau đó kích Run, nhập vào ChangeIPAddress.vbs và kích OK.
- Mở một cửa sổ lệnh và điều hướng đến thư mục có kịch bản, nhập vào
ChangeIPAddress.vbs sau đó nhấn ENTER.
Điều gì sẽ xảy ra nếu bạn thực hiện những thứ này, câu trả lời đó phụ thuộc
vào những thiết lập mặc định nào được đặt cho WindowsScript Host (WSH)
trên máy tính của bạn. WindowsScript Host (WSH) là một ngôn ngữ kịch
bản độc lập dùng cho các scripting engine, có nghĩa là WSH sử dụng
scripting engine là VBScript để chạy cáckịchbản VBScript, vì vậy WSH
hành động như “môi trường” bên trong mà kịchbảncủabạn chạy. Tuy nhiên
WSH thực sự có hai cấu hình kịchbản mặc định:
- Wscript.exe, cung cấp một hộp thoại trên Windows cho việc thiết lập các
thuộc tính kịchbản và hiển thị đầu ra kịch bản.
- Cscript.exe, cho phép cấu hình các thuộc tính kịchbản và hiển thị đầu ra
kịch bản từ cửa sổ lệnh.
Hãy xem sự khác nhau giữa chúng trong trường hợp bạn không biết hoặc
quên. Chúng tôi sẽ sử dụng kịchbản ChangeIPAddress.vbs từ phần 2 của
loạt bài này để minh chứng. Hãy mở cửa sổ lệnh trên máy tính Windows
Vista và sử dụng kịchbản này để thay đổi địa chỉ IP của máy tính thành
172.16.11.173. Bây giờ việc đầu tiên cần chú ý đó là thay đổi các thiết lập
cấu hình mạng cần thiết những tiêu chuẩn quản trị cục bộ trên máy, để thực
hiện điều này chúng ta cần kích chuột phải vào shortcut củacửa sổ lệnh dưới
Accessories và chọn Run As Administrator. Khi thực hiện điều đó thì cửa sổ
User Account Control (UAC) xuất hiện, kích Continue để tiếp tục (nếu tài
khoản người dùng đầu tiên là một thành viên trong nhóm quản trị cục bộ
trên máy) hoặc nhập vào các thông tin quan trọng củatài khoản quản trị cục
bộ (nếu tài khoản chỉ là một thành viên của nhóm người dùng cục bộ trên
máy).
Mở cửa sổ lệnh mức quản trị và đánh lệnh để thay đổi địa chỉ của máy tính
(Hình 1).
Hình 1: Thay đổi địa chỉ IP dùng kịchbản
Điều gì sẽ xảy ra khi chúng ta nhấn ENTER, khi nhấn xong một vài giây
sau, hộp thoại dưới đây sẽ xuất hiện (Hình 1)
Hình 2: Đầu ra củakịchbản xuất hiện như một hộp thoại
Thông báo này đến từ đâu? Bạn hãy nhớ lại rằng kịchbảncủa chúng ta
Change IPAddress.vbs gồm có các dòng dưới đây ở cuối củakịch bản:
'Display result or error code
If errEnableStatic=0 Then
Wscript.Echo "Adapter's IP address has been successfully changed to " &
strAddress
Else
Wscript.Echo "Changing the adapter's address was not successful. Error
code " & errEnableStatic
End If
Vậy những gì đang xảy ra là lệnh Wscript.Echo đang hiển thị đầu ra (nghĩa
là hiển thị một hộp thoại) thay vì hiển thị đầu ra bên trong cửa sổ lệnh. Lý do
là vì mặc định Wscript.exe có cấu hình kịchbản mặc định và cấu hình này
được thiết lập cho những gì nó hiển thị đầu ra bằngcửa sổ giống như vậy.
Chúng ta có thể dừng các hành vi này và lấy đầu ra kịchbản để hiển thị bên
trong cửa sổ lệnh được không? Có một cách có thể giải quyết được nhiệm vụ
này đó là triệu gọi Cscript.exe được cấu hình kịchbản dòng lệnh khi chạy
kịch bản. Bạn có thể thực hiện được điều này như hình 3 dưới đây:
Hình 3: Sử dụng cscript.exe xuất đầu ra kịchbản bên trong cửa sổ lệnh
Tuy nhiên cách này có thể làm phiền bạn vì phải đánh cscript trước khi đánh
tên kịchbản giống như vậy, vì vậy bạn có thể thiết lập Cscript.exe như một
cấu hình kịchbản mặc định cho tất cả triệu gọi WSH bằng thực hiện này
(Hình 4):
Hình 4: Tạo cscript.exe cho cấu hình mặc định
Bây giờ chúng ta có thể chạy kịchbản và hiển thị đầu ra của nó từ bên trong
cửa sổ lệnh mà không cần phải đánh cscript trước (Hình 5):
Hình 5: Khi Cscript.exe là cấu hình kịchbản mặc định thì đầu ra
của kịchbản được hiển thị bên trong cửa sổ lệnh
Chúng ta có một nhóm kịchbản giống ChangeIPAddress.vbs mà muốn chạy
từ xabằng cách triển khai chúng đến các máy đích như kịchbản đăng nhập
hoặc khởi động kịchbảnbằng Group Policy. Bên cạnh đó một số kịchbản
có các câu lệnh Wscript.Echo trong chúng tạo đầu ra kịch bản. Điều gì sẽ
xảy ra khi một trong cáckịchbản đó được triển khai cho máy tính điều
khiển xa và chạy trên máy? Một loạt cáccửa sổ sẽ xuất hiện trên màn hình
desktop của người dùng như kịchbản chạy trên máy, và người dùng sẽ phải
kích OK, OK và OK,… cho tới khi cáccửa sổ bật ra này biến mất hết và
kịch bản kết thúc công việc của nó. Vậy có cách nào để khắc phục hiện
tượng này?
Chúng ta có thể khắc phục hiện tượng này bằng hai cách. Đầu tiên, bạn có
thể soạn thảo tất cả cáckịchbản xóa hoặc chú thích câu lệnh Wscript.Echo
để kịchbản không tạo ra bất cứ đầu ra nào. Đó là một chút trở ngại, đặc biệt
nếu bạn có một số lượng lớn kịch bản. Vì vậy phương pháp thứ hai là gì?
Đây là một mẹo nhỏ mà chúng tôi muốn chia sẻ với bạn:
Trong môi trường Active Directory trong Group Policy đang được sử dụng
để quảnlýcác máy tính desktop, bạn có thể thay đổi cấu hình kịchbản từ
Wscript.exe thành Cscript.exe trên các máy tính trong một OU bằngcác
bước dưới đây:
1. Sử dụng Notepad để tạo một file văn bản có tên là ChangeToCscript.bat
với hai dòng dưới đây trong nó:
@echo off
cscript //h:cscript //s
2. Mở GPO được liên kết đến OU và điều hướng đến Computer
Configuration\Windows Settings\Scripts\Startup.
3. Kích đúp vào thiết lập chính sách khởi động Startup để mở trang thuộc
tính của nó.
4. Kích nút Show Files và copy/paste file ChangeToCscript.bat từ Windows
Explorer vào thư mục con của SYSVOL, nơi cáckịchbản khởi động được
đặt.
5. Kích nút Add trên trang thuộc tính cho thiết lập chính sách khởi động.
6. Kích nút Browse và chọn ChangeToCscript.bat.
7. Đóng tất cả các trang thuộc tính.
8. Việc bổ sung thêm kịchbản khởi động này sẽ làm cho kịchbản mặc định
trên các máy tính mục tiêu được chuyển từ Wscript.exe thành Cscript.exe
trong lần khởi động lại tiếp theo củacác máy tính đó, và điều này sẽ làm
việc mà không cần quan tâm đến người dùng mục tiêu là người dùng chuẩn
hay quản trị viên cục bộ.
Lưu ý
: ChangeToCscript.bat phải được chạy như một kịchbản khởi động và
không là kịchbản đăng nhập. Nếu bạn chạy nó như một kịchbản đăng nhập
thì nó sẽ chỉ làm việc khi người dùng mục tiêu là quản trị viên trên máy tính.
Bạn có thể làm gì với chỉ một file có hai dòng? Bây giờ bạn có thể triển khai
các kịchbản mà bạn muốn đối với các máy tính mục tiêu và không phải lo
lắng về người dùng gặp phải rất nhiều cửa sổ pop-up xuất hiện trên màn hình
của họ.
Thủ thuật 2: Thực hiện “runAs” mà không cần các thông tin chỉ định
Thủ thuậtthứ hai được đệ trình với chúng tôi bởi một trong các độc giả sau
khi đã đọc cácphần trước loạt bài này. Chúng tôi được phép trích dẫn trực
tiếp từ email giải thích của anh ấy:
FYI là cách tôi thực hiện ‘runAs’ mà không cần phải nhập vào các thông tin
quan trọng khác, là sử dụng tài khoản quản trị viên cục bộ cho WMI, sau đó
lưu mật khẩu quản trị trong một file văn bản trên một mạng chia sẻ được bảo
vệ bởi sự cho phép NTFS. Ví dụ, nếu ‘tech1’, ‘tech4’ và ‘tech5’ là cáctài
khoản miền thông thường (không phải quản trị miền), nhưng các người dùng
này được thẩm định để chạy kịchbản WMI, sau đó tôi cho phép truy cập
NTFS cáctài khoản này thành file văn bản, file văn bản này gồm có mật
khẩu quản trị cục bộ. Sau đó có kịchbản nhập passwword và kết nối bằng sử
dụng Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2", strComputer & “\Administrator”, strImportedPassword).
Ở trên là không đúng 100%. Tôi sử dụng.
Set objSWbemLocator =
CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString("S
eSecurityPrivilege")
Set objWMIService =
objSWbemLocator.ConnectServer(strComputer,
"root\cimv2", strComputer & "\administrator",
strPWD, "", "", &H80)
Set objReg =
objSWbemLocator.ConnectServer(strComputer,
"root\default", strComputer & "\administrator",
strPWD, "", "", &H80)
Set oReg = objReg.Get("StdRegProv")
…để hoàn thành thứ tương tự.
Việc kết nối với tài khoản quản trị cục bộ lại có hiệu quả thú vị khác; nó
không để lại bản sao profile tài khoản quản trị miền củabạn trên máy tính
trong Documents and Settings. Khi sử dụng tài khoản miền của mình, tôi đã
có một số người dùng hỏi “Tại sao bạn được kết nối vào máy tính của tôi”
và việc phân vân rằng đang xảy ra việc rình mò gì đó. Bằng cách sử dụng tài
khoản quản trị cục bộ, họ không nhận ra bất cứ ai đã kết nối (họ được khóa
không cho xem cácbản ghi bảo mật).
Với bản ghi, trong thực tế chúng ta có một cặp mật khẩu quản trị cục bộ
khác nhau sử dụng ở đây; vì vậy kịchbản nhập vào một danh sách và thử
từng cái một cho tới khi thành công hoặc hết các tùy chọn.
. Quản lý mạng Windows bằng Script - Phần 10: Các thủ thuật của kịch
bản điều khiển xa
Trong các bài viết trước, chúng ta. đến kịch bản điều khiển xa này qua sử dụng
kịch bản WMI được viết bằng VBScript.
Thủ thuật 1: Tạo Cscript.exe, cấu hình kịch bản mặc định trên các