Войти

Показать полную графическую версию : [решено] проверка состояния учетной записи


hse2000
16-03-2009, 17:34
Не подскажите как бы сворганить скриптик который будет запускаться и следить включена учетная запись пользователя или отключена и есть ли активная сессия данного пользователя на терминальном сервере?

Petya V4sechkin
16-03-2009, 18:27
hse2000, что должен делать этот скрипт помимо слежения?

hse2000
16-03-2009, 22:41
если все условия выполнены (т.е. учетка заблокирована и сеанс пользователя не активен), то запускается один батник который отправляет почту, что все ОК, если хотя бы одно условие не выполнено, то запускается другой батник, который отправляет сообщение, что false

amel27
18-03-2009, 05:01
примерно так:
@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

hse2000
18-03-2009, 13:18
по сессии все работает, а с блоком пользователя косяк
пробовал убирать из кода 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=

в чем может быть проблема?

amel27
18-03-2009, 15:10
hse2000, извиняюсь, после очередной редакции хвосты не подправил

hse2000
18-03-2009, 16:02
сейчас ошибки нет. НО!!! в обоих случаях запускается второй батник

@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

hse2000
18-03-2009, 16:23
Вот сама отработка


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

.

amel27
18-03-2009, 17:09
может я ошибаюсь, но мне кажется что скрипт не подставляет тут значение в кавычки
»именно так, проверьте работу команды:
WMIC /NODE:"SRV" UserAccount Where 'Name Like "User1"' Get Disabled

З.Ы. Надеюсь, "SRV" и "User1" реальные имена сервера и его локального пользователя?

hse2000
18-03-2009, 17:23
Да, имена реальные. Вот обработка команды (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


Видно, что так эта команда отрабатывает.

amel27
19-03-2009, 06:17
понятно - на 2003-й WMIC генерит в конце пустую строку, которая сбрасывает значение переменной UserDisabled (исправил), я тестил на XP - там этой строки не было и скрипт работал как задумано

hse2000
19-03-2009, 11:40
Вот сварганил на проверку учетки 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




© OSzone.net 2001-2012