Viết kịch bản Terminal Service – Phần 14

Quản trị mạng - Trong phần trước của loạt bài này, chúng tôi đã tích hợp một chức năng để cho phép chúng ta có thể xem các session của dịch vụ đầu cuối hiện hành trong framework kịch bản đã tạo. Trong phần này, chúng tôi sẽ tiếp tục giới thiệu cho các bạn bằng cách bổ sung thêm một số chức năng nữa vào kịch bản của mình.

Trước khi bắt đầu

Trong phần trước chúng tôi đã nhận thấy rằng chúng ta vẫn chưa cung cấp mã hiện hành cho kịch bản của mình ở phần cuối, chính vì vậy trong bài này chúng tôi sẽ thực hiện điều đó và thể hiện cho các bạn kịch bản của nó:

@echo off
set _menu=D
set _SRV=Mirage
:Loop
cls
Echo What do you want to do?
Echo A: Select a Different Terminal Server
Echo B: View the Current Sessions
Echo C: This choice is not yet available
Echo.
Echo D: Quit
Echo.
Echo The currently selected terminal server is %_SRV%
Echo.
Set /P _menu=Please enter your choice:

if not "%_menu%"=="" set _menu=%_menu:~0,1%
REM echo %_menu%

If /i "%_menu%"=="A" goto sub_server
If /i "%_menu%"=="B" goto sub_session
If /i "%_menu%"=="C" goto sub_nothing
if /I "%_menu%"=="D" goto:eof
goto:loop

@Echo Off
Set /P _SRV=Please enter the name of the server that you want to work with
goto:Loop

:sub_session
Query Session /server:%_svr% /Counter
Pause
goto:Loop

goto:eof

:sub_nothing
echo Reserved for future code
goto:eof

Một thứ mà chúng tôi muốn chỉ ra trong đoạn mã trên trước khi bắt đầu là chúng tôi đã bổ sung thêm lệnh Pause vào cuối thường trình :sub_session. Thao tác này có tác dụng ngăn chặn để không cho xóa màn hình trước khi bạn kịp đọc đầu ra của nó.

Thiết lập lại một session

Lúc này, kịch bản của chúng ta có thể hiển thị các thông tin về session, chúng ta hãy bổ sung thêm một thường trình để cho phép chúng ta thiết lập lại một session. Có thể thực hiện điều đó bằng cách sử dụng lệnh Reset Session, tuy nhiên lệnh này yêu cầu chúng ta phải cung cấp số session. Để thực hiện điều đó, chúng ta sẽ hỏi quản trị viên về số của session, xác nhận số session và sau đó thiết lập lại nó.

Đoạn mã đã sử dụng khi thiết lập lại session đòi hỏi phải tinh tế đôi chút, tuy nhiên chúng tôi sẽ không sử dụng bất cứ thứ gì mới ở đây và đây là đoạn mã đó:

:sub_reset
Set /P _sesnum=Please enter the Session ID that you want to reset
Echo The session that you are about to reset is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_reset2
Goto:loop

:sub_reset2
reset session %_sesnum%
goto:sub_session

Như những gì bạn có thể thấy ở trên, chúng ta sẽ phải hỏi quản trị viên để nhập vào số session mà chúng ta muốn thiết lập lại. Chúng ta sẽ đọc session đó vào một biến có tên named _sesnum. Sau đó sử dụng lệnh query session để hiển thị session để xác nhận lại một lần nữa.

Ở đây, chúng ta phải hỏi các quản trị viên xem đó có phải là session mà chúng ta muốn thiết lập lại hay không, bằng cách hỏi họ để nhập vào Y hoặc N. Giá trị này sẽ được đọc vào biến có tên named _yn. Tuy nó không được thể hiện trong khối mã bên dưới nhưng ở phần đầu của kịch bản, chúng tôi đã gán biến này là N.

Nếu quản trị viên nhập vào N, thì chúng ta sẽ bị đưa trở lại thường trình lặp mà không thực hiện bất cứ việc gì. Nếu quản trị viên nhập vào Y thì chúng ta sẽ chuyển đến thường trình thứ hai có tên :sub_reset2, thực hiện một hành động reset thực sự, sau đó quay trở lại vòng lặp chính của kịch bản.

Kết nối và hủy kết nối

Như những giới thiệu trước, chúng ta có thể sử dụng lệnh để hủy kết nối một session, và lệnh để kết nối một session. Với một chút cố gắng, chúng ta có thể thay đổi đoạn mã trên để thuận tiện hơn cho việc kết nối và hủy kết nối các session.

Bạn có thể xem ví dụ về đoạn mã mà chúng tôi đã sử dụng để hủy kết nối một session bên dưới:

:sub_disconnect
Set /P _sesnum=Please enter the Session ID that you want to disconnect
Echo The session that you are about to reset is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_disconnect2
Goto:loop

:sub_disconnect2
TSDISCON %_sesnum%
goto:sub_session

Như những gì bạn thấy, đoạn mã này là một đoạn mã thích ứng trực tiếp mà chúng ta đã sư dụng để thiết lập lại session. Bằng cách thay đổi một vài ký tự, chúng ta có thể tạo các thường trình để thiết lập một kết nối, xem thể hiện bên dưới:

:sub_connect
Set /P _sesnum=Please enter the Session ID that you want to connect to
Echo The session that you are about to connect to is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_connect2
Goto:loop

:sub_connect2
TSDISCON %_sesnum%
goto:sub_loop

Vô hiệu hóa đăng nhập

Thứ cuối cùng mà chúng tôi muốn thực hiện ở đây là tạo một số thường trình mà bạn có thể sử dụng để vô hiệu hóa hoặc kích hoạt các đăng nhập người dùng. Để thực hiện điều đó, chúng ta sẽ cần đến ba thường trình sau. Một kích hoạt đăng nhập, một vô hiệu hóa đăng nhập và một để vô hiệu hóa đăng nhập mới, tuy nhiên sẽ vẫn cho phép người dùng kết nối tới các session đang tồn tại. Đoạn mã dưới đây sẽ vô hiệu hóa đăng nhập:

:sub_Disable_Login
Change Logon /Disable
Goto:loop

Như những gì các bạn thấy, đoạn mã này là một thường trình hết sức đơn giản, thường trình này chỉ sử dụng lệnh Change Logon với khóa chuyển đổi /Disable để vô hiệu hóa các đăng nhập. Cũng theo đó, nếu bạn muốn kích hoạt, hãy thay thế khóa này bằng /Enable. Còn nếu bạn muốn vô hiệu hóa các đăng nhập nhưng vẫn cho phép các kết nối đến các session tồn tại, hãy sử dụng lệnh Change Logon với khóa chuyển đổi /Drain.

Kịch bản hoàn tất

Danh sách bên dưới thể hiện kịch bản hoàn tất của chúng ta. Như những gì các bạn có thể thấy, chúng ta đã phải thêm một vài tùy chọn menu vào tài khoản cho tất cả các chức năng mới mà chúng ta đã tạo. Chúng ta cũng đã bổ sung thêm một dòng lệnh gần phía trên của kịch bản để thể hiện trạng thái các đăng nhập có được kích hoạt hay không. Đây là kịch bản hoàn chỉnh:

@echo off
set _menu=D
set _SRV=Mirage
set _YN=N
:Loop
cls
Echo What do you want to do?
Echo A: Select a Different Terminal Server
Echo B: View the Current Sessions
Echo C: Reset a Session
Echo.
Echo D: Disconnect a Session
Echo E: Connect a Session
echo.
Echo G: Disable User Login
Echo H: Prevent New User Logins
Echo I: Enable User Login
echo.
Echo J: Quit
Echo.
Echo The currently selected terminal server is %_SRV%
Change Logon /Query
Echo.
Set /P _menu=Please enter your choice:

if not "%_menu%"=="" set _menu=%_menu:~0,1%
REM echo %_menu%

If /i "%_menu%"=="A" goto sub_server
If /i "%_menu%"=="B" goto sub_session
If /i "%_menu%"=="C" goto sub_reset
If /i "%_menu%"=="D" goto sub_disconnect
If /i "%_menu%"=="E" goto sub_connect
If /i "%_menu%"=="F" goto sub_reset
If /i "%_menu%"=="G" goto sub_Disable_Login
If /i "%_menu%"=="H" goto sub_Drain_Login
If /i "%_menu%"=="I" goto sub_Enable_Login
if /I "%_menu%"=="J" goto:eof
goto:loop

@Echo Off
Set /P _SRV=Please enter the name of the server that you want to work with
goto:Loop

:sub_session
Query Session /server:%_svr% /Counter
Pause
goto:Loop

:sub_reset
Set /P _sesnum=Please enter the Session ID that you want to reset
Echo The session that you are about to reset is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_reset2
Goto:loop

:sub_disconnect
Set /P _sesnum=Please enter the Session ID that you want to disconnect
Echo The session that you are about to disconnect is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_disconnect2
Goto:loop

:sub_disconnect2
TSDISCON %_sesnum%
goto:sub_session

:sub_connect
Set /P _sesnum=Please enter the Session ID that you want to connect to
Echo The session that you are about to connect to is:
echo.
query session %_sesnum%
echo.
Set /P _yn=Is this Correct (Y/N)
If /i "%_yn%"=="Y" then goto sub_connect2
Goto:loop

:sub_connect2
TSDISCON %_sesnum%
goto:sub_loop

:sub_reset2
reset session %_sesnum%
goto:sub_session

:sub_Enable_Login
Change Logon /Enable
goto:eof

:sub_Disable_Login
Change Logon /Disable
goto:eof

:sub_Drain_Login
Change Logon /Drain
goto:eof

goto:eof

Thứ Năm, 11/12/2008 16:10
51 👨 1.241
0 Bình luận
Sắp xếp theo