Выведите домен COMPUTERNAME и войдите в электронную таблицу USERNAME - PullRequest
2 голосов
/ 24 сентября 2010

Итак, начальник попросил электронную таблицу, которая бы показывала ему все компьютеры нашего предприятия и пользователей, которые в данный момент вошли в систему.

Я перестал спрашивать "почему?" и начал с NBTSTAT. Результаты <03> были противоречивыми. Затем я попробовал NET CONFIG WORKSTATION и, наконец, PSLOGGEDON.EXE (SYSINTERNALS). Это было хорошо, но мне нужно было бы найти способ передать результаты NET VIEW и правильно отформатировать вывод для CSV.

Но тогда я подумал, что должен быть лучший способ. 90% наших компьютеров - WinXP, поэтому я могу использовать WMIC или, возможно, DSQuery. Я бы предпочел изолировать выполнение команды от рабочих станций в нашем контейнере AD Computers и не трогать наши серверы.

У кого-нибудь есть рекомендации?

Ответы [ 4 ]

1 голос
/ 23 ноября 2011

PsExec.exe + PsLoggedOn.exe + командный файл.

Шаг 1. Загрузите PsExec.exe и поместите его в папку.

Шаг 2. Поместите PsExec.exer и PsLoggedOn.exe в папке вместе.

Шаг 3. Определите общий сетевой ресурс.

Шаг 4. Создайте текстовый файл с именем pc_list.txt, в который вставлены результаты NET VIEW (минус "\ "- должно быть одно имя компьютера на строку).В основном это должен быть текст со следующим текстом:

computer1
computer2
computer3
computer4
10.1.1.1
10.2.1.3
10.3.1.4

и т. Д.

Вы можете использовать IP-адреса или имена компьютеров.

Шаг 5. Создайте пакетный файл с именем PsExec.bat со следующим кодом:

"location_of_PsExec.exe"\PsExec.exe @"location_of_text_file"\pc_list.txt -u domain\Admin_username -p password -n 60 -c -f "location_of_runPsLoggedOn.bat"\runPsLoggedOn.bat

Шаг 6. Создайте еще один пакетный файл с именем runPsLoggedOn.bat со следующим кодом:

@echo off
   echo.%computername%>>"location_of_network_share"\userlist.txt
   PsLoggedOn.exe -x>>"location_of_network_share"\userlist.txt
   echo.>>"location_of_network_share"\userlist.txt

Шаг 7. Запустите PsExec.bat

Это действительно, вероятно, не будет ТОЧНЫЙ ответ, который вы ищете, но это должно, по крайней мере, указать вам правильное направление ... Я не проверял это, но я использую что-то похожее наполучить другие вещи, используя PsExec.exe.Вы можете просто написать код, чтобы вывести только домен \ имя пользователя в файл на общем сетевом ресурсе (из PsLoggedOn.exe -x >> "location_of_network_share" \ userlist.txt), потому что вывод такой: пользователи вошли в системулокально: домен \ пользователь

Никто не вошел в систему через общие ресурсы ресурса.

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

echo.%computername% %variable_username_from_PsLoggedOn%>>"location_of_network_share"\userlist.txt

Во всяком случае, это должно помочь вам начать работу над решением этой проблемы ...

1 голос
/ 17 ноября 2010

Вы можете выполнить поиск LDAP в Active Directory (LDIFDE)

ldifde -m -f OUTPUT.LDF -b USERNAME DOMAINNAME *  -s SERVERNAME -d "cn=users,DC=DOMAINNAME,DC=Microsoft,DC=Com" -r "(objectClass=user)"

, выполняя поиск пользователей, а затем компьютеров, изменив объектный класс.

Вы также можете указать только те атрибуты, которые вам нужны, вend.

eg: ldifde -f e:\Exportuser.ldf -s DomainController -d "ou=user,ou=sitename,dc=uk" -p subtree -r "(objectClass=User)" -l givenname,sn,samaccountname,mail,dn 

или используйте скрипт .net

0 голосов
/ 10 ноября 2010

Как насчет использования Netscan из Softperfect ?

0 голосов
/ 26 сентября 2010

Это, кажется, дает мне то, что я хочу:

FOR /F "skip=3 delims=\  " %%A IN ('net view') DO WMIC /Node:"%%A" ComputerSystem Get UserName /Format:csv 2>nul | MORE /E +2 >> computer_user_list.csv

Обратите внимание, что после delims=\

стоит табулятор, за которым следует пробел

Может быть, кто-то еще мог бы использовать это.

...