Показать полную графическую версию : [решено] проверка состояния учетной записи
Не подскажите как бы сворганить скриптик который будет запускаться и следить включена учетная запись пользователя или отключена и есть ли активная сессия данного пользователя на терминальном сервере?
Petya V4sechkin
16-03-2009, 18:27
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
.
может я ошибаюсь, но мне кажется что скрипт не подставляет тут значение в кавычки
»именно так, проверьте работу команды:
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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.