![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » [решено] просмотр активных пользователей в АД |
|
[решено] просмотр активных пользователей в АД
|
![]() Ветеран Сообщения: 1213 |
подскажите каким образом можно посмотреть какие в данный момент активны пользователи в домене? т.е. какие юзеры сейчас подключены к домену и работаю в нем
это вобще стандартными средствами вин2003 возможно глянуть? |
|
------- Отправлено: 13:35, 31-08-2012 |
Старожил Сообщения: 210
|
Профиль | Отправить 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 Из-за особенностей "двухтысячной" версии достоверность того, что в настоящий момент сеанс открыт не гарантирована: нужны дополнительные проверки, но они отнимают довольно много времени. |
||
Отправлено: 09:55, 05-09-2012 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 1213
|
Профиль | Отправить PM | Цитировать оу спс, щас попробую этот скрипт, это же вбс?
и да, при методе с прогой и батником время начала сеанса юзера отписывает не то которые было в момент входа на сервере а то которое выставлено у юзера на ПК... а там у нас на некоторых системах батарейки накрылись, так время сбивается да и то что батник кирилицу не знает тоже не очень класно АП. а каким образом запустить скрипт? при его старте говорит что он ориентирован для консольного режима, предлагает перезапустить в консоле - перезапускаю, за 0,3 секунды промигивает консольное окно и на этом все |
------- Отправлено: 10:27, 05-09-2012 | #22 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Можете сразу запускать из консоли (через CSCRIPT.EXE).
Цитата Dosmod:
|
|
Отправлено: 11:27, 05-09-2012 | #23 |
![]() Ветеран Сообщения: 1213
|
Профиль | Отправить PM | Цитировать Цитата DmitriiV:
на сервере пробую запустить эту программу - тоже всего на 0,3 сек окно сценарий также пробовал на ПК клиента запускать и на сервере |
|
------- Отправлено: 12:44, 05-09-2012 | #24 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Dosmod, для локализации ошибки добавляйте в код отладочные операторы.
Для начала, например, замените оператор на фрагмент Ну, и далее в том же духе. |
Отправлено: 13:24, 05-09-2012 | #25 |
![]() Ветеран Сообщения: 1213
|
Профиль | Отправить PM | Цитировать заменил, ситуации не изменилась... всеравно быстро мигает окно
|
------- Отправлено: 13:48, 05-09-2012 | #26 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата Dosmod:
|
|
Отправлено: 06:47, 06-09-2012 | #27 |
![]() Ветеран Сообщения: 1213
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
![]() Ветеран Сообщения: 1213
|
Профиль | Отправить PM | Цитировать добавил функцию - заработало, спс!
правда почемуто админов в сети не показывает... минус рисует на том ПК где щас под своим логином админ работает, и чегото иногда выдает "ошибка при определении сеанса" ну и да, сканит еще дольше чем через батник с прогой :D и нету времени начала сеанса... и почемуто тех юзеров у которых кирилица в названии учетки пропускает |
------- Последний раз редактировалось Dosmod, 06-09-2012 в 16:51. Отправлено: 16:44, 06-09-2012 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|