Страницы: 1
RSS
Скрипт смены статуса пользователя
 
Доброго времени суток!

Так как консоль ТИ v3 не установить на Windows XP, а по работе иногда необходимо вкл/откл пользователей к интернету. Искал варианты, но разработчики не хотят делать в Web-морде ТИ раздела Монитор работы, чтобы можно было сменить с Паузы на Работает и тп. Было предложено использовать API (SDK).

В итоге, решил сделать скрипт, который поможет решить мою проблему. Установил на компьютере консоль ТИ от версии 2 (для работы скрипта надо).

Написал два файла: Bat-ник и Vbs-скрипт. 
Bat-ник
Запускаем Bat-ник, пишешь имя пользователя (компа). Если нашлось в ТИ, то покажет небольшую информацию, а в конце текущий статус BillState (Старт, Пауза, Стоп). Затем предлагает на какой статус сменить. По окончанию предложит еще сменить или выйти.

Vbs-скрипт
cscript.exe billstate.vbs AdmID AdmPass UserID BillState /sn:ServerName

AdmID - Учетка админа
AdmPass - Пароль админа
UserID - Имя пользователя (компа) у которого будем менять статус
BillState - необязательный аргумент (указывать когда надо сменить статус)
0 - Стоп
1 - Пауза
2 - Старт

/sn:ServerName  - Указываем сервер ТИ

Скажу сразу я не программист, поэтому извиняюсь за корявость кода. 
Прошу конструктивной критики, предложений по улучшению.

Коды bat и vbs приложу в комментарии
 
Bat-ник
@echo off
:enteruser
set strName=""
echo Укажите имя пользователя или компьютера:
set /p "strName=%strName%"


if "%strName%"=="" (
    echo Ничего не введено.
    echo ..........................................
    goto enteruser
if "%strName%"==" " (
    echo Ничего не введено.
    echo ..........................................
    goto enteruser
) else (
    goto info
)

:info
cscript.exe //nologo "%~dp0billstate.vbs" AdmID AdmPass %strName% /sn:ServerName
:status
echo ..........................................
echo Варианты статуса клиента:
echo 1. Стоп
echo 2. Пауза
echo 3. Работает
echo 0. Выход
echo ..........................................
set /p choice=Введите номер, чтобы сменить статус: 

if '%choice%'=='' goto status
if '%choice%'==' ' goto status
if '%choice%'=='1' goto statusstop
if '%choice%'=='2' goto statuspause
if '%choice%'=='3' goto statusstart
if '%choice%'=='0' goto endwork

echo ------Повторите свой выбор------
goto status
:statusstop
cscript.exe //nologo "%~dp0billstate.vbs" AdmID AdmPass %strName% 0 /sn:ServerName
goto additionally
:statuspause
cscript.exe //nologo "%~dp0billstate.vbs" AdmID AdmPass %strName% 1 /sn:ServerName
goto additionally
:statusstart
cscript.exe //nologo "%~dp0billstate.vbs" AdmID AdmPass %strName% 2 /sn:ServerName
goto additionally

:additionally
echo ..........................................
echo Что делать дальше:
echo 1. Сменить ещё одному пользователю
echo 0. Выход
echo ..........................................
set /p choiceadd=Введите номер: 

if '%choiceadd%'=='' goto additionally
if '%choiceadd%'==' ' goto additionally
if '%choiceadd%'=='1' goto enteruser
if '%choiceadd%'=='0' goto endwork

:endwork
exit


khrts2018-06-18 02:33:54
 
billstate.vbs

Set Args = WScript.Arguments.Unnamed

If Args.Count < 3 Then
WScript.Echo "??? usage: cscript.exe billstate.vbs AdmID AdmPass UserID BillState /sn:ServerName"
WScript.Quit
End If

AdmID = Args(0)
AdmPass = Args(1)
UserID = Args(2)
'Аргумент статуса в Мониторе работы пользователя
If Args.Count = 4 Then
BillSt = Args(3)
End If

'Проверяем указан ли сервер в аргументах
If WScript.Arguments.Named.Exists("sn") Then
ServName = WScript.Arguments.Named.Item("sn")
Set Srv = CreateObject("TrafInsp.TrafInspAdmin", ServName)
Else
Set Srv = CreateObject("TrafInsp.TrafInspAdmin")
End If

'Проверяем логин и пароль администратора
Set Perm = Srv.QueryPermissions()
LogOn = Perm.DoSharedLogon(AdmID, AdmPass, "Script")

itUser = 3
UserGUID = Srv.ItemGUIDByName(itUser, UserID)

'Проверяем есть ли такой пользователь
If UserGUID = "" Then
WScript.Echo "Клиент " & UserID & " не найден"
Else

Set Dom = WScript.CreateObject("Msxml2.DOMDocument.6.0")
conf_AttrLevelDetail = 5
'Получаем данные по клиенту
Dom.loadXML Srv.GetList(itUser, UserGUID, null, conf_AttrLevelDetail)
Set DocEl = Dom.DocumentElement
Set Node = DocEl.SelectSingleNode("UserItem")

If Not Node Is Nothing Then
'Если будет четвертый аргумент, то выполняем смену статуса
If Args.Count=4 Then
'Сверяем статус с аргументом
If Node.getAttribute("BillState") = BillSt Then
WScript.Echo "******************************************"
WScript.Echo "Ошибка! Статусы одинаковые"
Else
Node.SetAttribute "BillState", BillSt
Srv.UpdateList itUser, Dom.xml
'Покажет на какой статус сменилось
BillChange = "Неизвестно"
If BillSt = "0" Then
BillChange = "Стоп"
End If
If BillSt = "1" Then
BillChange = "Пауза"
End If
If BillSt = "2" Then
BillChange = "Работает"
End If
WScript.Echo "******************************************"
WScript.Echo "Статус изменен на: " & Chr(9) & BillChange
End If
Else
'Иначе просто получаем информацию о пользователе
WScript.Echo "******************************************"
WScript.Echo "Имя клиента        " & Chr(9) & Node.getAttribute("DisplayName")
WScript.Echo "Группа             " & Chr(9) & Node.getAttribute("GroupDisplayName")
'Покажет какой тип доступа: Разрешен или Запрещен
DisabledMode = "Разрешен"
If Node.getAttribute("DisabledMode") = "0" Then
DisabledMode = "Запрещен"
End If
WScript.Echo "Доступ             " & Chr(9) & DisabledMode
'Покажет какой статус в Мониторе работы
BillState = "Неизвестно"
If Node.getAttribute("BillState") = "0" Then
BillState = "Стоп"
End If
If Node.getAttribute("BillState") = "1" Then
BillState = "Пауза"
End If
If Node.getAttribute("BillState") = "2" Then
BillState = "Работает"
End If
WScript.Echo "Статус             " & Chr(9) & BillState
End If
Else
'Если данных по клинту не нашло, то выводим сообщение
WScript.Echo "Нет данных"
End If
End If
Страницы: 1
Читают тему (гостей: 2)