Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] проверка состояния учетной записи (http://forum.oszone.net/showthread.php?t=134917)

hse2000 16-03-2009 17:34 1065609

проверка состояния учетной записи
 
Не подскажите как бы сворганить скриптик который будет запускаться и следить включена учетная запись пользователя или отключена и есть ли активная сессия данного пользователя на терминальном сервере?

Petya V4sechkin 16-03-2009 18:27 1065651

hse2000, что должен делать этот скрипт помимо слежения?

hse2000 16-03-2009 22:41 1065934

если все условия выполнены (т.е. учетка заблокирована и сеанс пользователя не активен), то запускается один батник который отправляет почту, что все ОК, если хотя бы одно условие не выполнено, то запускается другой батник, который отправляет сообщение, что false

amel27 18-03-2009 05:01 1066867

примерно так:
Код:

@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 1067171

по сессии все работает, а с блоком пользователя косяк
пробовал убирать из кода 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 1067294

hse2000, извиняюсь, после очередной редакции хвосты не подправил

hse2000 18-03-2009 16:02 1067353

сейчас ошибки нет. НО!!! в обоих случаях запускается второй батник

Код:

@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 1067372

Вот сама отработка

Код:

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 1067394

Цитата:

Цитата hse2000
может я ошибаюсь, но мне кажется что скрипт не подставляет тут значение в кавычки
»

именно так, проверьте работу команды:
Код:

WMIC /NODE:"SRV" UserAccount Where 'Name Like "User1"' Get Disabled
З.Ы. Надеюсь, "SRV" и "User1" реальные имена сервера и его локального пользователя?

hse2000 18-03-2009 17:23 1067415

Да, имена реальные. Вот обработка команды (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 1067902

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

hse2000 19-03-2009 11:40 1068153

Вот сварганил на проверку учетки 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.

Время: 15:13.
© OSzone.net 2001-