Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » [решено] просмотр активных пользователей в АД

Ответить
Настройки темы
[решено] просмотр активных пользователей в АД

Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159


Конфигурация

Профиль | Отправить PM | Цитировать


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

-------
пшшш пшшш


Отправлено: 13:35, 31-08-2012

 

Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата Dosmod:
... а тут утилита нужна...
Можно и без утилиты - сценарием.
Цитата Dosmod:
... долго сканит компьютеры...
Да, это самый медленный способ, но зато наиболее достоверный.
Когда-то писал себе такой сценарий:
Код: Выделить весь код
Dim objWsNet, strDomain, strThisComputer, strTranslator, blnIsConsole
Dim objWShell, objExec, objOutStream
Dim strUser, strTemp, strTemp2, xAnswer
Dim objDict, strKey
Dim objFS, objFile, strList, strLog

strLog = "LoggedUsers_List.log"
Set objFS = CreateObject("Scripting.FileSystemObject")
strTranslator = objFS.GetBaseName(WScript.FullName)
If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then
    blnIsConsole = True
Else
    blnIsConsole = False
End If
Set objWShell = CreateObject("WScript.Shell")
If Not blnIsConsole Then
    xAnswer = MsgBox("Сценарий ориентирован на консольный режим." & vbNewLine & "Перезапустить его с помощью консоли?", vbYesNo + vbQuestion, "Выбор режима работы")
    If xAnswer = vbNo Then
        WScript.Echo "Выполнение сценария прекращено."
    Else
        objWShell.Run "cscript.exe " & WScript.ScriptFullName, 1
    End If
Else
    Set objWsNet = CreateObject("WScript.Network")
    strDomain = objWsNet.UserDomain
    strThisComputer = objWsNet.ComputerName
    Set objWsNet = Nothing
    Set objDict = CreateObject("Scripting.Dictionary")
    objDict.CompareMode = 1
    Call Comuters_List(objDict)
    strUser = vbNullString
    For Each strKey In objDict.Keys
        If StrComp(strThisComputer, strKey, vbTextCompare) <> 0 Then
            Set objExec = objWShell.Exec("ping -n 1 -w 130 " & strKey)
            Set objOutStream = objExec.StdOut
            strTemp = vbNullString
            While Not objOutStream.AtEndOfStream
                strTemp = strTemp & Trim(objOutStream.ReadLine())
            Wend
                If InStr(1, strTemp, "TTL", vbTextCompare) > 0 Then
                    strUser = Logged_Session(strKey, objDict.Item(strKey))
                    If Len(strKey) < 8 Then
                        strTemp = vbTab & vbTab
                        strTemp2 = vbTab & vbTab
                    Else
                        strTemp = vbTab
                        strTemp2 = vbTab & vbTab
                    End If
                    If Len(strUser) > 0 Then
                        If StrComp(strUser, "Error.", vbTextCompare) <> 0 Then
                            strList = strList & strKey & strTemp & " = " & strUser & vbNewLine
                            WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = " & strUser
                        Else
                            strList = strList & strKey & strTemp & " = Ошибка при определении сеанса" & vbNewLine
                            WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = Ошибка при определении сеанса"
                        End If
                    Else
                        WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = Сеанс не обнаружен"
                    End If
                Else
                    WScript.StdOut.WriteLine "[ - ] " & strKey
                End If
        End If
    Next
    Set objOutStream = Nothing
    Set objExec = Nothing
        If objDict.Count > 0 Then
            strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
            Set objFile = objFS.CreateTextFile(strLog, True)
            objFile.Write strList
            objFile.Close
            Set objFile = Nothing
            objWShell.Run "notepad.exe " & strLog, 1
            objDict.RemoveAll
        Else
            WScript.Echo "Ничего не найдено."
        End If
        Set objDict = Nothing
End If
Set objWShell = Nothing
Set objFS = Nothing
WScript.Quit 0


'=====

Function Comuters_List(objDictionary)
Dim objRootDSE, strDomain, strTemp, blnTemp
Dim objConnection, objCommand, objRSet
Const ADS_SCOPE_SUBTREE = 2
Const ADS_UF_ACCOUNTDISABLE = 2

Set objRoot = GetObject("LDAP://RootDSE")
strDomain = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
strCommandText = "SELECT cn,userAccountControl,operatingSystem FROM 'LDAP://" & strDomain & "' WHERE objectCategory='Computer'"
objCommand.CommandText = strCommandText
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRSet = objCommand.Execute
objRSet.MoveFirst
Do
    If Not (objRSet.Fields("userAccountControl").Value And ADS_UF_ACCOUNTDISABLE) Then
        strTemp = objRSet.Fields("operatingSystem").Value
        If Not IsNull(strTemp) Then
            If InStr(1, strTemp, "server", vbTextCompare) = 0 Then
                If InStr(1, strTemp, "2000", vbTextCompare) > 0 Then
                    blnTemp = False
                Else
                    blnTemp = True
                End If
                strTemp = objRSet.Fields("cn").Value
                If Not objDictionary.Exists(strTemp) Then
                    objDictionary.Add strTemp, blnTemp
                End If
            End If
        End If
    End If
    objRSet.MoveNext
Loop While Not objRSet.EOF
Set objRSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
Call Sorting_Dictionary(objDictionary)
End Function

'=====

Function Logged_Session(strComputer, blnFlag)
Dim objWMI, objCollection, objItem, strName, strTemp
Dim strParamName
Const HKLM = &H80000002
Const strSubKeyName = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

strParamName = "DefaultUserName"
strName = vbNullString
On Error Resume Next
If blnFlag Then
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    If Err.Number = 0 Then
        Set objCollection = objWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem")
        If Err.Number = 0 Then
            For Each objItem In objCollection
                strName = objItem.UserName
                If Err.Number <> 0 Then
                    Err.Clear
                    strName = "Error."
                End If
            Next
        Else
            Err.Clear
            strName = "Error."
        End If
        Set objItem = Nothing
        Set objCollection = Nothing
    Else
        Err.Clear
        strName = "Error."
    End If
Else
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    If Err.Number = 0 Then
        objWMI.GetStringValue HKLM, strSubKeyName, strParamName, strName
        If Err.Number = 0 Then
            If Len(strName) = 0 Then
                strName = "идентифицировать сеанс не удалось"
            Else
                strName = strName & " (актуальность данных не гарантирована)"
                strParamName = "DefaultDomainName"
                objWMI.GetStringValue HKLM, strSubKeyName, strParamName, strTemp
                If Err.Number = 0 Then
                    If Len(strTemp) > 0 Then
                        strName = strTemp & "\" & strName
                    End If
                Else
                    Err.Clear
                End If
            End If
        Else
            Err.Clear
            strName = "Error."
        End If
    Else
        Err.Clear
        strName = "Error."
    End If
End If
Set objWMI = Nothing
On Error GoTo 0
Logged_Session = strName
End Function
Проверен для версий 2000 - 7 (не опрашивает компьютеры с ОС серверного типа).
Из-за особенностей "двухтысячной" версии достоверность того, что в настоящий момент сеанс открыт не гарантирована: нужны дополнительные проверки, но они отнимают довольно много времени.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:55, 05-09-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159

Профиль | Отправить PM | Цитировать


оу спс, щас попробую этот скрипт, это же вбс?

и да, при методе с прогой и батником время начала сеанса юзера отписывает не то которые было в момент входа на сервере а то которое выставлено у юзера на ПК... а там у нас на некоторых системах батарейки накрылись, так время сбивается
да и то что батник кирилицу не знает тоже не очень класно

АП. а каким образом запустить скрипт? при его старте говорит что он ориентирован для консольного режима, предлагает перезапустить в консоле - перезапускаю, за 0,3 секунды промигивает консольное окно и на этом все

-------
пшшш пшшш


Отправлено: 10:27, 05-09-2012 | #22


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Можете сразу запускать из консоли (через CSCRIPT.EXE).
Цитата Dosmod:
...перезапускаю, за 0,3 секунды промигивает консольное окно и на этом все
Симптомы похожи на ситуацию, когда запуск выполняется на сервере, а сценарий лежит на сетевом томе. Если так, то просто переместите сценарий на локальный том.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:27, 05-09-2012 | #23


Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159

Профиль | Отправить PM | Цитировать


Цитата DmitriiV:
через CSCRIPT.EXE »
на локальном пк пробую запустить - окно на 0,3 сек
на сервере пробую запустить эту программу - тоже всего на 0,3 сек окно

сценарий также пробовал на ПК клиента запускать и на сервере

-------
пшшш пшшш


Отправлено: 12:44, 05-09-2012 | #24


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Dosmod, для локализации ошибки добавляйте в код отладочные операторы.
Для начала, например, замените оператор
Код: Выделить весь код
Call Comuters_List(objDict)
на фрагмент
Код: Выделить весь код
MsgBox "До вызова Comuters_List()"
Call Comuters_List(objDict)
MsgBox "После вызова Comuters_List()" & vbNewLine & "Кол-во станций: " & objDict.Count
WScript.Quit 0
Ну, и далее в том же духе.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:24, 05-09-2012 | #25


Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159

Профиль | Отправить PM | Цитировать


заменил, ситуации не изменилась... всеравно быстро мигает окно

-------
пшшш пшшш


Отправлено: 13:48, 05-09-2012 | #26


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Цитата Dosmod:
на локальном пк пробую запустить - окно на 0,3 сек...
То есть запускаете консоль, в её окне отдаёте команду вида cscript myscript.vbs, где myscript - имя запускаемого сценария, и окно консоли закрывается?
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:47, 06-09-2012 | #27


Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159

Профиль | Отправить PM | Цитировать


ну CSCRIPT.EXE запускается всего на 0.3 секунды... но я другим методом через командную строку запускаю, с вашей командой
и получаю вот это:

Код: Выделить весь код
C:\Documents and Settings\Администратор.NTB.000>cscript "E:\Дошка оголошень\1.vb
s"
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

E:\Дошка оголошень\1.vbs(131, 1) Microsoft VBScript runtime error: Type mismatch
: 'Sorting_Dictionary'
запускаю тот скрипт который ранее поправили для отладки

-------
пшшш пшшш


Отправлено: 15:41, 06-09-2012 | #28


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Теперь понятно.
Либо удалите вызов функции Sorting_Dictionary() из кода функции Comuters_List(), либо добавьте к сценарию её код, приведённый ниже:
Код: Выделить весь код
Function Sorting_Dictionary(objDictSorting)
Dim blnStopSort, intNumChange, arrKeys, arrItems, strTemp

arrKeys = objDictSorting.Keys
arrItems = objDictSorting.Items
blnStopSort = False
i = 0
Do
    intNumChange = 0
    For j = 0 To UBound(arrKeys) - 1
        If arrKeys(j) > arrKeys(j + 1) Then
            strTemp = arrKeys(j)
            arrKeys(j) = arrKeys(j + 1)
            arrKeys(j + 1) = strTemp
            intNumChange = intNumChange + 1
        End If
    Next
    If intNumChange = 0 Then
        blnStopSort = True
    Else
        If i < UBound(arrKeys) Then
            i = i + 1
        Else
            blnStopSort = True
        End If
    End If
Loop While Not blnStopSort
For i = 0 To UBound(arrKeys)
	arrItems(i) = objDictSorting.Item(arrKeys(i))
Next
objDictSorting.RemoveAll
For i = 0 To UBound(arrKeys)
	objDictSorting.Add arrKeys(i), arrItems(i)
Next
Erase arrKeys
Erase arrItems
End Function
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:33, 06-09-2012 | #29


Аватара для Dosmod

Ветеран


Сообщения: 1213
Благодарности: 159

Профиль | Отправить PM | Цитировать


добавил функцию - заработало, спс!
правда почемуто админов в сети не показывает... минус рисует на том ПК где щас под своим логином админ работает, и чегото иногда выдает "ошибка при определении сеанса"
ну и да, сканит еще дольше чем через батник с прогой :D
и нету времени начала сеанса...
и почемуто тех юзеров у которых кирилица в названии учетки пропускает

-------
пшшш пшшш


Последний раз редактировалось Dosmod, 06-09-2012 в 16:51.


Отправлено: 16:44, 06-09-2012 | #30



Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » [решено] просмотр активных пользователей в АД

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Зависает просмотр сессий пользователей подключённых к серверу Ыть Windows Server 2008/2008 R2 0 02-03-2012 17:29
Прочее - как настроить остановку не активных HDD... yrtchik Хочу все знать 12 01-02-2010 02:04
Proxy/NAT - Деление канала в зависимости от количества активных пользователей cardexc Сетевые технологии 3 26-02-2009 23:09
Доступ - Просмотр аплета учетные записи пользователей на компьютере (XP) члене домена onefromheart Microsoft Windows NT/2000/2003 0 18-12-2008 00:20
В настоящее время просмотр списка пользователей невозможен Guest Microsoft Windows 95/98/Me (архив) 1 04-11-2003 18:22




 
Переход