Вот весь код (но немного подправленный мною):
Set Args = WScript.Arguments.Unnamed
if Args.Count <> 3 then
WScript.Echo "??? usage: cscript.exe rstsess2.vbs APIPassword GroupID Cash /sn:ServerName"
WScript.Quit
end if
APIPass = Args(0)
Obj = Args(1)
Cash = Args(2)
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
Srv.APILogon(APIPass)
UserList = Srv.ApiGetBillProp(3, Obj)
' Получили список клиентов группы
' Проверяем, что это таблица - двухмерный массив
if not IsArray(UserList) or not IsArray(UserList(0)) then
WScript.Echo "Нет данных"
WScript.Quit
end if
for I = 0 to UBound(UserList, 1)
User = UserList(I)
' Получили строку - описание пользователя
UserID = User(1)
UserState = Srv.APIGetUserState(UserID)
' Считываем текущее состояние сессии
OldState = UserState(4)
OldBall = UserState(19)
WScript.Echo "Клиент " & User(0) & " --- " & UserState(30)
if not (UserState(20) = 0) and not (UserState(21) = 0) then
' WScript.Echo "Клиент " & User(0) & " --- " & UserState(20)
' Переводим пользователя в СТОП
' Srv.APISetUserState UserID, 0, 0, "Script", "Очищаем сессию"
' Переводим сессию пользователя в состояние, которое было ранее.
' Если надо всех обязательно запустить, то поправьте OldState на "2"
' Srv.APISetUserState UserID, Cash+OldBall, OldState, "Script", "Запускаем сессию"
if Cash+OldBall < 0 then
' Так как APISetUserState не вводит отрицательное значение оплаты, вводим это через атрибут
' Srv.APISetAttr 3, UserID, "User_Cash", Cash+OldBall, true
end if
' WScript.Echo "Клиент " & User(0) & " на счету " & Cash+OldBall
End if
next