проверка состояния учетной записи
Не подскажите как бы сворганить скриптик который будет запускаться и следить включена учетная запись пользователя или отключена и есть ли активная сессия данного пользователя на терминальном сервере?
|
Petya V4sechkin |
16-03-2009 18:27 1065651 |
hse2000, что должен делать этот скрипт помимо слежения?
|
если все условия выполнены (т.е. учетка заблокирована и сеанс пользователя не активен), то запускается один батник который отправляет почту, что все ОК, если хотя бы одно условие не выполнено, то запускается другой батник, который отправляет сообщение, что false
|
примерно так:
Код:
@Echo Off
Set TUser=User1
Set TServer=%ComputerName%
For /F "Skip=1 UseBackQ" %%i In (`WMIC /NODE:"%TServer%" UserAccount Where 'Name Like "%TUser%"' Get Disabled^|Find /I "E"`) Do Set UserDisabled=%%i
Call :GetUserSession "%TUser%" "%TServer%"
If %UserSession% EQU 0 If /I "%UserDisabled%"=="TRUE" Call Batnik1.CMD&GoTo CONT
Call Batnik2.CMD
:CONT
EXIT
:GetUserSession
:: ------------
:: IN : %1 - User Name
:: %2 - Server Name
:: OUT: %UserSession%
For /F "Tokens=1-4 Skip=3 Delims=# " %%i In ('qwinsta /Server:"%~2"') Do (
If /I "%%i"=="rdp-tcp" If /I "%%k"=="%~1" Set UserSession=%%l&GoTo :EOF
If /I "%%i"=="%~1" Set UserSession=%%j&GoTo :EOF
)
Set UserSession=0&GoTo :EOF
|
по сессии все работает, а с блоком пользователя косяк
пробовал убирать из кода If /I "%UserDisabled%"=="TRUE" по сессии батник отрабатыет, в случае с пользователем:
E:\Documents and Settings\Administrator\Desktop>For /F "Skip=1 UseBackQ" %i In (
`WMIC /NODE:"" UserAccount Where 'Name Like ""' Get Disabled`) Do Set UserDisabl
ed=%i
No Instance(s) Available.
:\Documents and Settings\Administrator\Desktop>Set UserDisabled=
в чем может быть проблема?
|
hse2000, извиняюсь, после очередной редакции хвосты не подправил
|
сейчас ошибки нет. НО!!! в обоих случаях запускается второй батник
Код:
@Echo Off
Set TUser=User1
Set TServer=%ComputerName%
For /F "Skip=1 UseBackQ" %%i In (`WMIC /NODE:"%TServer%" UserAccount Where 'Name Like "%TUser%"' Get Disabled`) Do Set UserDisabled=%%i
Call :GetUserSession "%TUser%" "%TServer%"
If %UserSession% EQU 0 If /I "%UserDisabled%"=="TRUE" Call e:\1.bat&GoTo CONT
Call e:\2.bat
:CONT
EXIT
:GetUserSession
:: ------------
:: IN : %1 - User Name
:: %2 - Server Name
:: OUT: %UserSession%
For /F "Tokens=1-4 Skip=3 Delims=# " %%i In ('qwinsta /Server:"%~2"') Do (
If /I "%%i"=="rdp-tcp" If /I "%%k"=="%~1" Set UserSession=%%l&GoTo :EOF
If /I "%%i"=="%~1" Set UserSession=%%j&GoTo :EOF
)
Set UserSession=0&GoTo :EOF
|
Вот сама отработка
Код:
E:\>Set TUser=User1
E:\>Set TServer=SRV
E:\>For /F "Skip=1 UseBackQ" %i In (`WMIC /NODE:"SRV" UserAccount Where 'Name Li
ke "User1"' Get Disabled`) Do Set UserDisabled=%i
E:\>Set UserDisabled=FALSE
:\>Set UserDisabled=
E:\>Call :GetUserSession "User1" "SRV"
E:\>For /F "Tokens=1-4 Skip=3 Delims=# " %i In ('qwinsta /Server:"SRV"') Do (
If /I "%i" == "rdp-tcp" If /I "%k" == "User1" Set UserSession=%l & GoTo :EOF
If /I "%i" == "User1" Set UserSession=%j & GoTo :EOF
)
E:\>Set UserSession=0 & GoTo :EOF
E:\>If 0 EQU 0 If /I "" == "TRUE" Call e:\1.bat & GoTo CONT -может я ошибаюсь, но мне кажется что скрипт не подставляет тут значение в кавычки
E:\>Call e:\2.bat
.
|
Цитата:
Цитата hse2000
может я ошибаюсь, но мне кажется что скрипт не подставляет тут значение в кавычки
»
|
именно так, проверьте работу команды:
Код:
WMIC /NODE:"SRV" UserAccount Where 'Name Like "User1"' Get Disabled
З.Ы. Надеюсь, "SRV" и "User1" реальные имена сервера и его локального пользователя?
|
Да, имена реальные. Вот обработка команды (1-й случай - включена, 2-й случай - отключена):
Код:
E:\Documents and Settings\Administrator>WMIC /NODE:"SRV" UserAccount Where 'Name
Like "User1"' Get Disabled
Disabled
FALSE
E:\Documents and Settings\Administrator>WMIC /NODE:"SRV" UserAccount Where 'Name
Like "User1"' Get Disabled
Disabled
TRUE
Видно, что так эта команда отрабатывает.
|
понятно - на 2003-й WMIC генерит в конце пустую строку, которая сбрасывает значение переменной UserDisabled (исправил), я тестил на XP - там этой строки не было и скрипт работал как задумано
|
Вот сварганил на проверку учетки VBS
Код:
Dim objUser, objShell, objWSNet, strComputerName
Dim blnStatus
Const ComputerName = "."
strUser = InputBox("Имя управляемой записи:", "Включение (выключение) учётной записи")
If Len(strUser) > 0 Then
On Error Resume Next
Set objWSNet = CreateObject("WScript.Network")
Set objWSNet = Nothing
Set objUser = GetObject("WinNT://" & ComputerName & "/" & strUser & ",user")
If Err.Number = 0 Then
Set objShell = CreateObject("WScript.Shell")
blnStatus = objUser.AccountDisabled
If blnStatus Then
'Запись отключена
objShell.Run "c:\2.bat"
Else
'Запись включена
objShell.Run "c:\1.bat"
End If
Set objUser = Nothing
End If
WScript.Quit 0
end if
|
Время: 15:13.
© OSzone.net 2001-