Иногда может понадобится проверить какие в данный момент залогинены в системе, то есть являются активными. Такую информацию можно использовать для аудита, например для проверки какие учетные записи за какими компьютерами сидят или для последующей перезагрузки сервера, что бы не останавливать работу коллег. В примерах ниже рассмотрено как выполнять удаленные команды для получения активных пользователей и возврата включенных пользователей Active Directory.
Получение имени залогиненного пользователя
Я не могу вспомнить готовую команду Powershell, которая бы вернула логин пользователя, но такая возможность есть через WMI:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object UserName
Есть еще вариант использовать CIM, который может работать немного быстрее:
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object UserName
Обе команды могут работать удаленно если добавить атрибут ComputerName:
Get-WmiObject -ComputerName 'localhost' -Class Win32_ComputerSystem | Select-Object UserName
Если вы планируете выполнять эти команды удаленно, то может понадобится выполнить предварительные настройки в виде открытия портов и необходимых правах.
Получить только имя пользователя можно так:
$userinfo = Get-WmiObject -ComputerName 'localhost' -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\'
$user[1]
Как вы знаете в Winodws есть так же параллельные сеансы сервисов. Если вам нужно вернуть имена этих аккаунтов нужно использовать класс «win32_LoggedOnUser»:
Get-CimInstance -ComputerName 'localhost' -Class win32_LoggedOnUser | ft
Получение списка компьютеров
Если у вас нет списка компьютеров к которым вы планируете подключиться и узнать активного пользователя — это можно сделать через AD. На примере ниже будут возвращены все компьютеры:
Get-ADComputer -Filter *
Операция по получению списка компьютеров может быть очень долгой, если у вас большой парк ПК в AD. Вы можете вернуть только компьютеры, которые не отключены в AD (Disable) следующим способом:
Get-ADComputer -Filter * | where Enabled -eq $True
Можно использовать и фильтрацию. Так я верну компьютеры имена которые начинаются на «CL»:
Get-ADComputer -Filter {Name -like 'CL*'} | where Enabled -eq $True
Получить список имен мы можем так:
$pc = Get-ADComputer -Filter {Name -like 'CL*'} | where Enabled -eq $True
$pc.Name
Если у вас список компьютеров не относится к AD или имеет другой формат — то просто преобразуйте его в массив:
# Текст с именами компьютеров
$pc = 'Computer1,Computer2,Computer3'
# Преобразование в массив
$pc_array = $pc -split ','
$pc_array
Удаленное получение залогиненных пользователей
Выше уже рассматривался вариант получения имени пользователя удаленно используя WMI и CIM. Если обе команды, то всех пользователей активных в данный момент мы можем получить так:
# Текст с именами компьютеров
$computers = (Get-AdComputer -Filter *).Name
# Удаленное получение пользователей
foreach ($computer in $computers){
Get-CimInstance -ComputerName $computer -ClassName Win32_ComputerSystem | Select-Object UserName
}
Такой подход может привести к ошибкам так как мы не проверяем включены ли компьютеры:
Мы можем просто не выводить ошибки с помощью «-ErrorAction SilentlyContinue» или заранее пинговать (что было бы правильнее с точки зрения времени выполнения). В примере ниже я так же разбиваю имя компьютера и логин в более удобный формат:
# Текст с именами компьютеров
$computers = (Get-AdComputer -Filter *).Name
# Удаленное получение имен учетных записей
foreach ($computer in $computers){
$result = Get-CimInstance -ComputerName $computer -ClassName Win32_ComputerSystem -ErrorAction SilentlyContinue
$computer_login = $result.UserName -split '\'
if ($computer_login){
Write-Host 'ComputerName: ' $computer_login[0]
Write-Host 'UserName: ' $computer_login[1]
}
}
Если вы не хотите выполнять команды удаленно через WMI, то вы можете использовать PSRemoting. От так же требует предварительных настроек, которые описаны в статье «Удаленное управление через Powershell». Команда, которая использует PSRemoting, будет выглядеть примерно так же:
# Текст с именами компьютеров
$computers = (Get-AdComputer -Filter *).Name
# Удаленное получение имен учетных записей
foreach ($computer in $computers){
$result = Invoke-Command -ComputerName $computer `
-ScriptBlock {
Get-WMIObject -ClassName Win32_ComputerSystem `
-ErrorAction SilentlyContinue
} `
-ErrorAction SilentlyContinue
$computer_login = $result.UserName -split '\'
if ($computer_login){
Write-Host 'ComputerName: ' $computer_login[0]
Write-Host 'UserName: ' $computer_login[1]
}
}
Получение включенных пользователей AD
Если вам нужно вернуть учетные записи, которые включены в AD выполните следующую команду:
Get-AdUser -Filter * | where 'Enabled' -eq $True
Для возврата только отключенных учетных записей используйте $False.
Такой подход работает и с объектами компьютеров в AD:
Get-AdComputer -Filter * | where 'Enabled' -eq $False
Для последующей выгрузки данных в Excel почитайте статью «Как в Powershell выгрузить из AD пользователей и группы CSV».
Whoami или WMI
Вы можете вспомнить команду, которая так же возвращает имя пользователя:
whoami
Как можно увидеть она вернет ту же информацию, что и класс WMI. Ситуация меняется, когда эти команды используются удаленно:
# Пользователь вошедший в Windows и открывший Powershell
whoami
# Пользователь, который будет удаленно подключатся через Powershell
$new_psuser = Get-Credential 'admin'
# Способ с whoami
Invoke-Command -ComputerName 'localhost' `
-Credential $new_psuser `
-ScriptBlock {whoami}
# Способ с WMI
Invoke-Command -ComputerName 'localhost' `
-Credential $new_psuser `
-ScriptBlock {(Get-WmiObject -Class Win32_ComputerSystem).UserName}
Как видно, в случае с whoami у нас вернулось имя учетной записи выполнившей команду Powershell, а с WMI пользователь Windows.
…
Теги:
#powershell
#wmi
#ad
Время на прочтение
18 мин
Количество просмотров 24K
Как-то давно на хабре публиковалась статья Опытные мелочи Windows-админа. В ней рассказывалось как быстро и достаточно эффективно находить компьютеры на которых залогинился тот или иной пользователь.
Мне эта идея понравилась, т.к. всё делается достаточно просто, быстро и без модификации схемы Active Directory. Я постепенно улучшал изложенные в статье подходы и в итоге появились три скрипта, которыми я и хочу поделится с вами.
-
env – с помощью этого скрипта получаем данные по компьютеру и добавляем эти данные во временные переменные среды.
-
env.send – с помощью этого скрипта данные из переменных среды передаём в описание компьютера в Active Directory.
-
env.search – с помощью этого скрипта ищем нужный нам компьютер в Active Directory и подключаемся к нему.
На самом деле скрипты более универсальные и с помощью них можно делать не только изложенные выше действия, а например:
-
Можно делать инвентаризацию компьютеров по сети в csv файл или в папку с ini файлами.
-
При отсутствии Active Directory можно по данным из переменных среды автоматически создавать ярлычок, который в своём названии будут содержать нужные данные по компьютеру, а при клике подключатся к нему или делать другое полезное системному администратору действие.
-
Поиск нужных компьютеров можно выполнять не только в Active Directory, но и в простом хранилище в виде папки с ini файлами.
-
А так же можно использовать временные переменные среды в других скриптах, например для установки программного обеспечения нужной разрядности и т.д.
Ниже привожу описание всех скриптов, что бы можно было более детально ознакомится с их возможностями. Надеюсь что они будут вам полезны, так же как мне. Сами скрипты и их исходные коды доступны в моём профиле на GitHub.
env
Описание
JScript
для добавления в переменные среды временных переменных. Которые затем можно использовать в вызове других скриптов и приложений. Данные для переменных получаются через WMI
с локального или удалённого компьютера в сети. Дополнительно переменные можно импортировать из файла и экспортировать в файл, поддерживается несколько форматов.
Достаточно часто системному администратору требуется получить общую информацию о компьютере и пользователе, чтобы затем её использовать в вызове другого скрипта или приложений. А также эту информацию иногда требуется сохранить в файл, например для инвентаризационного учёта или для использования в дальнейшем. Данный скрипт предоставляет такие возможности.
Использование
В командной строке Windows введите следующую команду. Все параметры можно передавать в произвольном порядке. Если необходимо скрыть отображение окна консоли, то вместо cscript
можно использовать wscript
.
cscript env.min.js [\<context>] [<input>@<charset>] [<output>] [<option>...] ...
-
<context>
— Сетевое имя или ip адрес компьютера, в контексте которого нужно получить данные для переменных. -
<input>
— Формат текстовых данных стандартного потока ввода для импорта переменных.-
ini — Получает из потока данные для переменных в
ini
формате. -
csv — Получает данные в
csv
формате (заглавное написание ожидает ещё и заголовок). -
tsv — Получает данные в
tsv
формате (заглавное написание ожидает ещё и заголовок).
-
-
<charset>
— Кодировка текстовых данных, направленных в стандартный поток ввода (можно использовать значениеauto
). -
<output>
— Формат текстовых данных стандартного потока вывода для экспорта переменных.-
ini — Отправляет в поток данные переменных в
ini
формате. -
csv — Отправляет данные в
csv
формате (заглавное написание добавляет ещё и заголовок). -
tsv — Отправляет данные в
tsv
формате (заглавное написание добавляет ещё и заголовок).
-
-
<option>
— Дополнительные опции (можно указать несколько).-
silent — Последующие команды выполнить без отображения.
-
nowait — Последующие команды выполнить без ожидания.
-
-
...
— Далее указывается командная строка для выполнения, в которой будут доступны эти переменные среды.
Переменные среды
Скрипт добавляет описанные ниже временные переменные в среду процесса. Если нет данных для формирования переменной, то переменная не создаётся.
Операционная система
-
SYS-ARCHITECTURE
— Архитектура операционной системыx64
иx86
. -
SYS-DESCRIPTION
— Описание системы (компьютера), заданное пользователем. -
SYS-DRIVE
— Буква системного диска (вместе с двоеточием). -
SYS-INSTALL
— Дата и время установки системы в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС
. -
SYS-INSTALL-DATE
— Только дата установки системы в форматеДД.ММ.ГГГГ
. -
SYS-KEY
— Ключи активации операционной системы. -
SYS-NAME
— Заданное производителем полное название операционной системы. -
SYS-RESET
— Дата и время перезагрузки системы в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС
. -
SYS-RESET-DATE
— Только дата перезагрузки системы в форматеДД.ММ.ГГГГ
. -
SYS-SERIAL
— Серийный номер операционной системы. -
SYS-TIME
— Текущая дата и время в системе в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС
. -
SYS-TIME-DATE
— Только текущая дата в системы в форматеДД.ММ.ГГГГ
. -
SYS-VERSION
— Версия операционной системы.
Пользователь
-
USR-ACCOUNT
— Аккаунт пользователя, который последним использовал компьютер. -
USR-DOMAIN
— Доменная часть аккаунта пользователя. -
USR-LOGIN
— Часть логина в аккаунте пользователя. -
USR-HOME
— Полный путь к домашнему каталогу пользователя. -
USR-PROFILE
— Полный путь к папке профиля пользователя. -
USR-NAME
— Отображаемое имя пользователя. -
USR-NAME-FIRST
— Первая часть отображаемого имени пользователя. -
USR-NAME-SECOND
— Втор часть отображаемого имени пользователя. -
USR-NAME-THIRD
— Третья часть отображаемого имени пользователя. -
USR-NAME-FOURTH
— Четвёртая часть отображаемого имени пользователя. -
USR-SID
— Идентификатор безопасности пользователя.
Компьютер
-
DEV-NAME
— Заданное производителем полное название модели. -
DEV-DESCRIPTION
— Формируемое скриптом описание компьютера из его характеристик. -
DEV-BENCHMARK
— Вычисляемый скриптом рейтинг производительности компьютера.
Материнская плата
-
PCB-NAME
— Заданное производителем полное название модели. -
PCB-SERIAL
— Серийный номер материнской платы. -
PCB-BIOS-MANUFACTURE
— Название производителя BIOS материнской платы. -
PCB-BIOS-RELEASE
— Дата и время прошивки BIOS материнской платы. -
PCB-BIOS-RELEASE-DATE
— Только дата прошивки BIOS материнской платы. -
PCB-BIOS-SERIAL
— Серийный номер, хранящийся в BIOS материнской платы. -
PCB-BIOS-VERSION
— Версия прошивки BIOS материнской платы.
Центральный процессор
-
CPU-ARCHITECTURE
— Архитектура центрального процессораx64
иx86
. -
CPU-CACHE-L1
— Размер L1 кэша с размерностьюКБ
,МБ
и так далее. -
CPU-CACHE-L2
— Размер L2 кэша с размерностьюКБ
,МБ
и так далее. -
CPU-CACHE-L3
— Размер L3 кэша с размерностьюКБ
,МБ
и так далее. -
CPU-CORE
— Количество ядер центрального процессора. -
CPU-NAME
— Заданное производителем полное название модели. -
CPU-SOCKET
— Название сокета центрального процессора. -
CPU-SPEED
— Тактовая частота с размерностьюМГц
,ГГц
и так далее. -
CPU-SPEED-VAL
— Значение тактовой частота вгерцах
. -
CPU-VERSION
— Версия релиза центрального процессора.
Оперативная память
-
RAM-SIZE
— Объём оперативной памяти с размерностьюМБ
,ГБ
и так далее. -
RAM-SIZE-VAL
— Значение объёма оперативной памяти вбайтах
. -
RAM-SPEED
— Тактовая частота с размерностьюМГц
,ГГц
и так далее. -
RAM-SPEED-VAL
— Значение тактовой частота вгерцах
.
Графический процессор
-
GPU-COLOR
— Глубина цвета графического процессора с размерностью вбитах
. -
GPU-COLOR-VAL
— Значение глубины цвета графического процессора вбитах
. -
GPU-FREQUENCY
— Частота обновления с размерностью вГц
. -
GPU-FREQUENCY-VAL
— Значение частота обновления вгерцах
. -
GPU-NAME
— Заданное производителем полное название модели. -
GPU-RESOLUTION
— Разрешение экрана, подключенного к графическому процессору. -
GPU-RESOLUTION-X
— Разрешение экрана по горизонтали. -
GPU-RESOLUTION-Y
— Разрешение экрана по вертикали. -
GPU-SIZE
— Объём памяти с размерностьюМБ
,ГБ
и так далее. -
GPU-SIZE-VAL
— Значение объёма памяти графического процессора вбайтах
. -
GPU-VERSION
— Версия драйвера графического процессора.
Сетевой адаптер
-
NET-IP-V4
— IPv4 адрес активного сетевого адаптера. -
NET-IP-V6
— IPv6 адрес активного сетевого адаптера. -
NET-SUBNET-V4
— IPv4 маска подсети активного сетевого адаптера. -
NET-SUBNET-V6
— IPv6 маска подсети активного сетевого адаптера. -
NET-GATEWAY-V4
— IPv4 шлюз активного сетевого адаптера. -
NET-GATEWAY-V6
— IPv6 шлюз активного сетевого адаптера. -
NET-DNS-V4
— IPv4 адрес DNS сервера сетевого адаптера. -
NET-DNS-V6
— IPv6 адрес DNS сервера сетевого адаптера. -
NET-DHCP-V4
— IPv4 адрес DHCP сервера локальной сети. -
NET-DOMAIN
— Домен в котором зарегистрирован компьютер. -
NET-HOST
— Зарегистрированное сетевое имя компьютера. -
NET-HOST-DN
— ЗначениеDistinguished Name
компьютера в домене. -
NET-MAC
— Физический адрес активного сетевого адаптера. -
NET-NAME
— Заданное производителем название сетевого адаптера. -
NET-RESET
— Дата и время обновления адресов в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС
. -
NET-RESET-DATE
— Только дата обновления адресов в форматеДД.ММ.ГГГГ
. -
NET-SPEED
— Скорость подключения с размерностьюМбит/с
,Гбит/с
и так далее. -
NET-SPEED-VAL
— Значение скорость подключения вбитах
всекунду
.
Жёсткий диск
-
HDD-NAME
— Заданное производителем название жёсткого диска. -
HDD-SERIAL
— Серийный номер жёсткого диска. -
HDD-SIZE
— Объём жёсткого диска с размерностьюМБ
,ГБ
и так далее. -
HDD-SIZE-VAL
— Значение объёма жёсткого диска вбайтах
. -
HDD-VERSION
— Версия прошивки жёсткого диска.
Твердотельный накопитель
-
SSD-NAME
— Заданное производителем название твердотельного накопителя. -
SSD-SERIAL
— Серийный номер твердотельного накопителя. -
SSD-SIZE
— Объём твердотельного накопителя с размерностьюМБ
,ГБ
и так далее. -
SSD-SIZE-VAL
— Значение объёма твердотельного накопителя вбайтах
. -
SSD-VERSION
— Версия прошивки твердотельного накопителя.
Сменный накопитель
-
USB-NAME
— Заданное производителем название сменного накопителя. -
USB-SERIAL
— Серийный номер сменного накопителя. -
USB-SIZE
— Объём сменного накопителя с размерностьюМБ
,ГБ
и так далее. -
USB-SIZE-VAL
— Значение объёма сменного накопителя вбайтах
. -
USB-VERSION
— Версия прошивки сменного накопителя.
Специализированный накопитель
-
SCM-NAME
— Заданное производителем название специализированного накопителя. -
SCM-SERIAL
— Серийный номер специализированного накопителя. -
SCM-SIZE
— Объём специализированного накопителя с размерностьюМБ
,ГБ
и так далее. -
SCM-SIZE-VAL
— Значение объёма специализированного накопителя вбайтах
. -
SCM-VERSION
— Версия прошивки специализированного накопителя.
Оптический привод
-
ROM-NAME
— Заданное производителем название оптического привода. -
ROM-DRIVE
— Буква оптического привода (вместе с двоеточием). -
ROM-TYPE
— Тип оптического приводаDVD-RW
,CD
и так далее.
Программное обеспечение
Браузер Google Chrome
-
APP-CHROME
— Полный путь исполняемого файла приложения. -
APP-CHROME-DIR
— Полный путь каталога приложения.
Проигрыватель VLC Media Player
-
APP-VLC
— Полный путь исполняемого файла приложения. -
APP-VLC-DIR
— Полный путь каталога приложения.
Приложение Spargo eFarma
-
APP-EFARMA-CLIENT
— Полный путь исполняемого файла клиента. -
APP-EFARMA-CASHER
— Полный путь исполняемого файла кассы. -
APP-EFARMA-UPDATER
— Полный путь исполняемого файла сервера обновлений. -
APP-EFARMA-LICENSE
— Полный путь файла лицензии. -
APP-EFARMA-DIR
— Полный путь каталога приложения.
Приложение SoftLine Ulus
-
APP-ULUS
— Полный путь исполняемого файла приложения. -
APP-ULUS-DIR
— Полный путь каталога приложения.
Приложение TeamViewer
-
APP-TEAMVIEWER-ID
— Идентификатор компьютера.
Другие переменные
-
BAK-DRIVE
— Буква диска для резервных копий (вместе с двоеточием).
Примеры использования
Получение данных
Вывести в консоль все созданные переменные среды в контексте текущего компьютера.
cscript env.min.js ini
Вывести в консоль все созданные переменные среды в контексте компьютера RUS000WS001
.
cscript env.min.js ini \RUS000WS001
Экспорт данных
Экспортировать все созданные переменные среды в ini
файл с кодировкой CP 866
в контексте текущего компьютера.
cscript /nologo env.min.js ini > %COMPUTERNAME%.ini
Экспортировать все созданные переменные среды в ini
файл с кодировкой UTF-16 LE
в контексте текущего компьютера.
cscript /nologo /u env.min.js ini > %COMPUTERNAME%.ini
Экспортировать все созданные переменные среды в csv
файл без заголовка и с кодировкой UTF-16 LE
в контексте компьютера RUS000WS001
.
cscript /nologo /u env.min.js \RUS000WS001 csv > RUS000WS001.csv
Экспортировать все созданные переменные среды в csv
файл с заголовком и с кодировкой UTF-16 LE
в контексте компьютера RUS000WS001
.
cscript /nologo /u env.min.js \RUS000WS001 CSV > RUS000WS001.csv
Импорт данных
Импортировать переменные среды из ini
файла с кодировкой CP 866
и вывести их в консоль.
cscript /nologo env.min.js ini@cp866 \ ini < %COMPUTERNAME%.ini
Импортировать переменные среды из ini
файла с кодировкой UTF-16 LE
и затем ещё и получить переменные среды в контексте компьютера RUS000WS001
и вывести их в консоль.
cscript /nologo /u env.min.js ini@auto \RUS000WS001 ini < RUS000WS001.ini
Импортировать переменные среды из csv
файла с заголовком и с кодировкой UTF-16 LE
и затем ещё и получить переменные среды в контексте компьютера RUS000WS001
и вывести их в консоль.
cscript /nologo /u env.min.js CSV@auto \RUS000WS001 ini < RUS000WS001.csv
Использование данных
Выполнить тихую установку msi
пакета с именем, соответствующим разрядности операционной системы текущего компьютера.
cscript env.min.js %SYS-ARCHITECTURE%.msi /quiet /qn /norestart
Открыть в VLC Media Player воспроизведение mp4
видео файла с именем, соответствующим логину пользователя и не дожидаться окончания воспроизведения.
wscript env.min.js nowait "%APP-VLC%" %USR-LOGIN%.mp4
Открыть в Проводнике домашний каталог пользователя, который последним использовал удалённый компьютер RUS000WS001
.
wscript env.min.js \RUS000WS001 explorer.exe "%USR-HOME%"
Инвентаризация компьютеров
Загрузить из txt
файла список компьютеров и сохранить о них информацию в папке inventory
в виде ini
файлов.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do (
cscript /nologo /u env.min.js \%%i ini > inventory%%i.ini
)
Загрузить из txt
файла список компьютеров и сохранить о них информацию в один csv
файл с заголовком.
cscript /nologo /u env.min.js \ CSV > inventory.csv
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do (
cscript /nologo /u env.min.js \%%i csv >> inventory.csv
)
Сконвертировать и объединить ini
файлы из папке inventory
в один tsv
файл с заголовком.
cscript /nologo /u env.min.js \ TSV > inventory.tsv
for %%i in (inventory*.ini) do (
cscript /nologo /u env.min.js \ ini@auto tsv < %%i >> inventory.tsv
)
env.send
Описание
JScript
для отправки переменных среды в объект Active Directory
по протоколу LDAP
или в файл ярлыка в папке. Основная задача скрипта сохранить собранные данные с помощью другого скрипта env в любой атрибут (или атрибуты) объекта Active Directory
или на основании этих данных создать по шаблону ярлык в папке. Чтобы затем использовать этот ярлык или данные из Active Directory
в целях системного администрирования.
Использование
В командной строке Windows введите следующую команду. Если необходимо скрыть отображение окна консоли, то вместо cscript
можно использовать wscript
.
cscript env.send.min.js <mode> <container> [<output>...] \ [<input>...]
-
<mode>
— Режим отправки переменных (заглавное написание выполняет только эмуляцию).-
link — Отправляет переменных среды в обычный ярлык.
-
ldap — Отправляет переменных среды в объект
Active Directory
.
-
-
<container>
— Путь к папке илиguid
(допускается указание пустого значения). -
<output>
— Изменяемые свойства объекта в форматеkey=value
c подстановкой переменных%ENV%
. Первое свойство считается обязательным, т.к. по его значению осуществляется поиск объектов. Для режима link обязательно наличие свойствname
иtargetpath
, а в свойствеarguments
одинарные кавычки заменяются на двойные. -
<input>
— Значения по умолчанию для переменных среды в форматеkey=value
.
Примеры использования
Предполагается использовать данный скрипт совместно с другим скриптом env, поэтому сразу в примерах будут использоваться два скрипта.
Когда компьютер в домене, то в групповых политиках при входе пользователя в компьютер, можно прописать следующий скрипт, что бы информация о компьютере и пользователе прописалась в атрибуты описания и местоположения компьютера в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
. Что бы затем быстро находить нужный компьютер пользователя или анализировать собранную информацию. Что бы узнать guid контейнера в Active Directory
можно воспользоваться программой Active Directory Explorer. Так же не забудьте пользователям выдать права на изменения нужных атрибутов компьютеров в соответствующем контейнере.
wscript env.min.js wscript env.send.min.js ldap {ABCD1234-111B-14DC-ABAC-4578F1145541} cn="%NET-HOST%" description="%USR-NAME-THIRD% | %USR-NAME-FIRST% %USR-NAME-SECOND% | %DEV-NAME% | %PCB-BIOS-SERIAL% | %PCB-BIOS-RELEASE-DATE% | %NET-MAC% | %DEV-BENCHMARK% | %DEV-DESCRIPTION%" location="%USR-NAME-THIRD%" \ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" USR-NAME-THIRD="Location" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Когда компьютер не в домене то в планировщике задач, можно прописать следующий скрипт, чтобы информация о компьютере и пользователе сохранялась в виде ярлычка в сетевой папке. И затем использовать эти ярлычки чтобы одним кликом разбудить WOL
пакетом нужный компьютер и подключится к нему через Помощник для оказания технической поддержки. Для отправки WOL
пакета можно использовать утилиту Wake On Lan.
wscript env.min.js wscript env.send.min.js link \serverlinks name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%System32cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:Scripts" windowStyle=7 iconLocation="%WINDIR%System32msra.exe,0" description="%USR-NAME-THIRD%" \ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Когда компьютер не в домене, но есть административная учётная запись от всех компьютеров, можно выполнить следующий скрипт, чтобы загрузить из txt
файла список компьютеров, получить о них информация по сети через WMI
и создать аналогичные ярлычки в локальной папке.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /nologo /u env.min.js \%%i silent cscript env.send.min.js link C:Links name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%System32cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:Scripts" windowStyle=7 iconLocation="%WINDIR%System32msra.exe,0" description="%USR-NAME-THIRD%" \ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Или можно сделать то же самое, что в предыдущем примере, но разбить всё на два этапа. Сначала получить данные с компьютеров по сети через WMI
и сохранить их в локальной папке. А затем на основании этих данных создать аналогичные ярлычки в другой локальной папке.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /nologo /u env.min.js \%%i > C:Inventory%%i.ini
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /u env.min.js ini@auto silent \ cscript env.send.min.js link C:Links name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%System32cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:Scripts" windowStyle=7 iconLocation="%WINDIR%System32msra.exe,0" description="%USR-NAME-THIRD%" \ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX" < C:Inventory%%i.ini
env.search
Описание
JScript
для поиска данных для переменных среды в объектах Active Directory
по протоколу LDAP
или в папке с ini
файлами. Основная задача скрипта найти, добавить в переменные среды данные по компьютеру и используя эти переменные, выполнить необходимую команду в целях системного администрирования. Данные по компьютерам можно собрать с помощью другого скрипта env и выгрузить их в ini
файлы в папке или добавить в атрибуты объектов Active Directory
с помощью другого скрипта env.send.
Использование
В командной строке Windows введите следующую команду. Если необходимо скрыть отображение окна консоли, то вместо cscript
можно использовать wscript
.
cscript env.search.min.js <mode> <container> [<option>...] [<input>...] \ [<action>...]
-
<mode>
— Режим поиска данных для переменных среды.-
folder — Получение данных из папки с
ini
файлами. -
ldap — Получение данных из
Active Directory
.
-
-
<container>
— Путь к папке илиguid
(допускается указание пустого значения). -
<option>
— Дополнительные опции (может быть несколько, порядок не важен).-
search — Поисковой запрос (можно опустить, будет запрошен в процессе).
-
index — Номер компьютера в выборке (можно опустить, будет запрошен в процессе).
-
action — Ключ действия (можно опустить, будет запрошен в процессе).
-
item — Шаблон представления компьютеров в выборке (доступны переменные
%ENV%
). -
unit — Шаблон представления других списков (доступны переменные
%ENV%
). -
service — Имя службы, которую нужно запустить перед выполнением команды действия.
-
check — Флаг проверки доступности целевых компьютеров.
-
user — Флаг запроса информации по пользователю (только для режима
ldap
). -
noalign — Флаг запрета выравнивания выборок и списков.
-
color — Флаг использования цветового оформления.
-
-
<input>
— Шаблоны для получения данных из атрибутов объекта (только для режимаldap
). -
<action>
— Действия в формате ключ и команда (доступны переменные%ENV%
).
Поиск объектов
Если получение данных идёт в режиме folder, то поиск нужных объектов в ini
файлах производится по следующим ключам: NET-MAC
, SYS-KEY
, NET-HOST
, DEV-NAME
, NET-IP-V4
, SYS-VERSION
, USR-ACCOUNT
, DEV-DESCRIPTION
, PCB-BIOS-SERIAL
, PCB-BIOS-SERIAL
и USR-NAME
, причём по последнему ключу поисковой запросе ещё проверяется в транслитерации.
Если получение данных идёт в режиме ldap, то поиск нужных объектов производится по следующим атрибутам: name
, operatingSystemVersion
и description
, причём по последнему атрибуту поисковой запросе ещё проверяется в транслитерации.
Переменные среды
Скрипт добавляет временные переменные в среду процесса. В режиме folder переменные добавляются по ключам в ini
файле. В режиме ldap добавляются описанные ниже переменные. Если нет данных для формирования переменной, то переменная не создаётся. Если задана дополнительная опция user, то по ключам USR-NAME-FIRST
и USR-NAME-SECOND
дополнительно запрашиваются данные о пользователе. Применяя шаблоны для получения данных из атрибутов объекта, можно получить любые данные и добавить их в любые переменные. Причём данные из одного атрибута по шаблону можно разделить на несколько переменных.
Операционная система
-
SYS-NAME
— Заданное производителем полное название операционной системы. -
SYS-VERSION
— Версия операционной системы.
Пользователь
-
USR-NAME
— Отображаемое имя пользователя. -
USR-ACCOUNT
— Аккаунт пользователя. -
USR-SID
— Идентификатор безопасности пользователя. -
USR-COUNTRY
— Название страны пользователя. -
USR-COUNTRY-ID
— Идентификатор страны пользователя. -
USR-CITY
— Название города пользователя. -
USR-COMPANY
— Название организации пользователя. -
USR-DEPARTMENT
— Название подразделения пользователя. -
USR-POSITION
— Название должности пользователя. -
USR-EMAIL
— Адрес электронной почты пользователя. -
USR-MOBILE
— Номер мобильного телефона пользователя. -
USR-PHONE
— Номер телефона пользователя. -
USR-HOME
— Полный путь к домашнему каталогу пользователя. -
USR-INFO
— Заметка о пользователе.
Сетевой адаптер
-
NET-HOST
— Зарегистрированное сетевое имя компьютера. -
NET-HOST-DN
— ЗначениеDistinguished Name
компьютера в домене.
Другие переменные
-
TMP-CHECK
— Время отклика компьютера на запрос проверки доступности. -
TMP-INDEX
— Порядковый номер компьютера в выборке (или элемента в списке). -
TMP-KEY
— Ключ элемента в списке. -
TMP-VALUE
— Значение элемента в списке.
Примеры использования
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
. Для отображаемой информации использовать оформление цветом, найденные компьютеры проверять на доступность и запрашивать информацию о пользователе. Что бы узнать guid контейнера в Active Directory
можно воспользоваться программой Active Directory Explorer.
cscript env.search.min.js ldap {0C9E6295-C543-40D1-BD6D-3F2BDF54F7A9} color check user item=" %TMP-INDEX% | %TMP-CHECK% | %NET-HOST% | %USR-NAME% | %USR-MOBILE% | %USR-INFO% | %DEV-NAME%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" description="%USR-NAME-THIRD% | %USR-NAME-FIRST% %USR-NAME-SECOND% | %DEV-NAME% | %PCB-BIOS-SERIAL% | %PCB-BIOS-RELEASE-DATE% | %NET-MAC% | %DEV-BENCHMARK% | %DEV-DESCRIPTION%" \ Помощник="msra.exe /offerRA %NET-HOST%" Подключится="mstsc.exe /v:%NET-HOST%" Доступность="ping.exe %NET-HOST%" Разбудить="wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0" Сведения="msinfo32.exe /computer %NET-HOST%" Управление="compmgmt.msc /computer=%NET-HOST%"
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в папке с ini
файлами. Для отображаемой информации использовать оформление цветом.
cscript env.search.min.js folder "C:Inventory" color item=" %TMP-INDEX% | %NET-HOST% | %USR-NAME% | %DEV-DESCRIPTION%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" \ Помощник="msra.exe /offerRA %NET-HOST%" Подключится="mstsc.exe /v:%NET-HOST%" Доступность="ping.exe %NET-HOST%" Разбудить="wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0" Сведения="msinfo32.exe /computer %NET-HOST%" Управление="compmgmt.msc /computer=%NET-HOST%"
Сохранить в файл список всех компьютеров расположенных в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
.
cscript /nologo search.min.js ldap {ABCD1234-111B-14DC-ABAC-4578F1145541} search="" noalign > list.txt
Подключиться через TightVNC к первому найденному компьютеру по поисковому запросу Иванов
. Поиск осуществлять в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
. Перед подключением на удалённом компьютере запустить службу с именем tvnserver
, а после отключения остановить её.
wscript env.search.min.js ldap {0C9E6295-C543-40D1-BD6D-3F2BDF54F7A9} service=tvnserver search="Иванов" index=1 action=TightVNC \ TightVNC="tvnviewer.exe -host=%NET-HOST%"
Довольно часто администратору нужно быстро узнать имя пользователя, который выполнил вход на удаленном компьютере Windows. В это статье мы рассмотрим несколько утилит и PowerShell скриптов, которые помогут вам узнать имена пользователей, залогиненых на удаленных компьютерах в сети.
Содержание:
- Утилиты PSLoggedOn и Qwinsta
- Получаем имя пользователя на удаленном компьютере через PowerShell
- PowerShell скрипт для проверки пользователей на удаленных компьютерах
Утилиты PSLoggedOn и Qwinsta
В комплекте утилит SysInternals PSTools от Microsoft есть консольная утилита PSLoggedOn.exe, которую можно использовать для получения имени пользователя, который вошел на удаленный компьютер, а также список подключенных к нему SMB сеансов.
Скачайте утилиту и запустите ее в формате:
psloggedon \RemoteCompName
Как вы видите, утилита вернула имя залогиненного пользователя (Users logged on locally), а также список пользователей, которые по сети используют ресурсы с этого компьютера (Users logged on via resource shares).
Если нужно получить только имя пользователя, вошедшего локально, используйте опцию –l:
Psloggedon.exe \wks215s1 –l
Утилита Psloggedon подключается к реестру и проверяет в нем имя пользователя, вошедшего локально. Для этого должна быть включена служба RemoteRegistry. Вы можете запустить ее и настроить автозапуск службы с помощью PowerShell:
Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry
Также можно получить список сессий на удаленном компьютере с помощью встроенной утилиты
qwinsta
. Эта утилита должна быть знакома любому администратору, управляющему терминальными серверами с Remote Desktop Services. Чтобы получить список сессий с удаленного компьютера, выполнит команду:
qwinsta /server:dc01
Утилита возвращает список всех сессий (активных и отключенных по таймауту) на RDS сервере или десктопной редакции Windows 10 (даже если вы разрешили к ней множественные RDP подключения).
Если при подключении к удаленному серверу через qwinsta вы получаете ошибку Error 5 Access Denied, проверьте что на удаленном компьютере разрешено удаленное управление пользователями через RPC. Включите, если нужно через реестр следующей командой или через GPO:
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f
Получаем имя пользователя на удаленном компьютере через PowerShell
Вы можете получить имя пользователя, который залогинен на компьютере через WMI класс Win32_ComputerSystem. Откройте консоль PowerShell и выполните команду:
Get-WmiObject -class Win32_ComputerSystem | Format-List Username
Команда вернула имя пользователя, который выполнил вход на компьютер.
У командлета Get-WmiObject есть параметр –ComputerName, который можно использовать для получения доступа к WMI объектам на удаленном компьютере. Следующая команда вернет имя пользователя с удаленного компьютера:
(Get-WmiObject -class Win32_ComputerSystem –ComputerName wks215s1).Username
Данная команда показывает только пользователя, вошедшего на консоль (не через RDP).
Также для получения информации с удаленных компьютеров можно использовать PSRemoting с помощью командлета Invoke-Command.
Если нужно получить только имя пользователя на компьютере (без домена), воспользуетесь следующими командами:
$userinfo = Get-WmiObject -ComputerName 'wks215s1' -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\'
$user[1]
В современных версиях PowerShell Core (pwsh.exe) вместо Get-WmiObject нужно использовать CIM командлет Get-CimInstance:
Get-CimInstance –ComputerName wks215s1 –ClassName Win32_ComputerSystem | Select-Object UserName
Или
(Get-CimInstance -ComputerName wks215s1 -ClassName Win32_ComputerSystem).CimInstanceProperties | where{$_.Name -like "UserName"}| select value
GetCiminstance использует WinRM для подключения к удаленным компьютерам, поэтому на них нужно включить и настроить WinRM через GPO или командой:
WinRM quickconfig
PowerShell скрипт для проверки пользователей на удаленных компьютерах
Если вам нужно собрать информацию о пользователях сразу с нескольких компьютерах, можете использовать следующую PowerShell функцию получить имена пользователей.
function Get-LoggedUser { [CmdletBinding()] param ( [string[]]$ComputerName ) foreach ($comp in $ComputerName) { $output = @{'Computer' = $comp } $output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName [PSCustomObject]$output } }
На вход функции Get-LoggedUser нужно передать имена компьютеров, на которых нужно проверить имена пользователей:
Get-LoggedUser wks215s1,wks215s2,dc01
Если для какого-то компьютера функция вернула пустое имя пользователя, значит на компьютер никто не залогинен.
Можно получить имена пользователей, которые работают на компьютерах в домене Active Directory. Для получения списка компьютеров нужно использовать командлет Get-ADComputer. В следующем примере мы получим имена пользователей, которые работают за активными компьютерами в определенном OU домена. Чтобы скрипт работал быстрее перед тем, как обратится к обратится к удаленному компьютеру, я добавил проверку его доступности по сети через ICMP пинг с помощью командлета Test-NetConnection:
function Get-LoggedUser { [CmdletBinding()] param ( [string[]]$ComputerName ) foreach ($comp in $ComputerName) { if ((Test-NetConnection $comp -WarningAction SilentlyContinue).PingSucceeded -eq $true) { $output = @{'Computer' = $comp } $output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName } else { $output = @{'Computer' = $comp } $output.UserName = "offline" } [PSCustomObject]$output } } $computers = (Get-AdComputer -Filter {enabled -eq "true"} -SearchBase 'OU=Kazan,DC=winitpro,DC=loc').Name Get-LoggedUser $computers |ft -AutoSize
Также обратите внимание, что вы можете хранить в свойствах компьютеров в AD имя пользователя, который выполнил вход. Для этого можно использовать логон скрипт, описанный в статье “Set-ADComputer: добавляем информацию о пользователе в свойства компьютеров AD”
После этого вам не нужно сканировать все компьютеры, чтобы найти где залогинен определенный пользователь. Можно найти компьютер пользователя простым запросом к Active Directory:
$user='dvpetrov'
$user_cn=(get-aduser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft
В большой сети некоторые системы Windows могут совместно использоваться несколькими пользователями, каждый со своей учетной записью.
В некоторых случаях может быть полезно проследить имяучетная запись, которая в последний раз использовала ПК с Windows.
Чтобы найти пользователя, который последним использовал систему Windows, вам не нужны сторонние утилиты: операционная система Microsoft фактически записывает эту информацию в раздел реестра (см. Regedit и системный реестр: руководство по наиболее полезным аспектам) .
Чтобы восстановить его из локальной системы, просто введите следующее из командной строки (окно cmd) или из Windows PowerShell, открытого с правами администратора:
reg-запрос HKLMSOFTWAREMicrosoftWindowsCurrentVersionAuthenticationLogonUI /v LastLoggedOnUser
reg-запрос HKLMSOFTWAREMicrosoftWindowsCurrentVersionAuthenticationLogonUI /v LastLoggedOnDisplayName
Первая команда возвращает идентификатор учетной записи (соответствует имени папки, расположенной в C:Users), вторая — имя, связанное с самой учетной записью.
Вы также можете использовать командлет PowerShell, вставив в окно следующую команду (все в одной строке):
$regpath=»HKLM:SOFTWAREMicrosoftWindowsCurrentVersionAuthenticationLogonUI»;
$regvalue = Get-ItemProperty-Path $regpath;
$regvalue.LastLoggedOnUser;$regvalue.LastLoggedOnDisplayName
Активировав службу удаленного управления Windows (WinRM), можно также получить доступ к данным о последнем пользователе, вошедшем в удаленную систему Windows, из простого окна PowerShell.
Для этого необходимо следовать инструкциям, опубликованным в статье Управление ПК в локальной сети с помощью PowerShell: после входа в удаленную систему Windows с правильными учетными данными вы можете выполнить следующую команду для сбора информации о последнем пользователе. кто залогинился логин (вставить все в одну строку):
$computer=Read-Host ‘Компьютер’;
Invoke-Command -ComputerName $computer -ScriptBlock {$regpath=»HKLM:SOFTWAREMicrosoftWindowsCurrentVersionAuthenticationLogonUI»; $regvalue = Get-ItemProperty-Path $regpath;
$regvalue.LastLoggedOnUser; $regvalue.LastLoggedOnDisplayName}
В переписке с запросом Компьютер необходимо будет указать имя ПК, подключенного к сети, к которой вы хотите подключиться. Это имя можно прочитать из окна сети Windows или получить в отдельной системе, введя имя хоста в командной строке или в окне PowerShell, или, опять же, нажав Windows + R, а затем написав sysdm.cpl.
Как узнать кто подключался удаленно к моему компьютеру?
Существуют различные способы, позволяющие определить кто за время вашего отсутствия входил или совершил попытку входа в ваш компьютер. Это кейлоггеры и другие шпионские программы. Они позволяют получить максимум сведений о действиях «незваного гостя» на вашем ПК. Но если вам не нужны возможности клавиатурного шпиона, воспользуйтесь функционалом самой Windows.
Операционная система позволяет решить массу проблем без установки дополнительных программ и возможность узнать кто пытался проникнуть в компьютер это только одна из множества ее полезных функций. Ранее мы уже делали материал о возможности создания папок-невидимок на рабочем столе.
Как выяснить — кто входил в компьютер без вашего ведома
Содержание:
- Отслеживание несанкционированных входов в Windows в журнале событий операционной системы
- Получение сведений о посетителях в момент загрузки системы
Мониторинг позволяет формировать отчет обо всех удачных и провальных попытках войти в систему. В логе могут сохраняться данные за неделю или месяц. Все зависит от выставленных настроек.
Благодаря второму инструменту вы будете получать сведения о том, в какое время посторонний предпринял попытку или проник в устройство во время каждой авторизации в операционной системе.
Существует два способа для активации этой функции.
Определились со способом защиты компьютера? Тогда приступим к разбору первого способа.
Активируем журнал событий
Сохранение информации о том, кто входил в компьютер возможно только после включения этой функции. Нажимаем WIN+R для активации редактора групповой политики.
В открывшемся окне пишем команду gpedit.msc, кликаем ОК.
Обратите внимание. Не во всех версиях Windows имеется такой инструмент. Если редактора групповой политики в вашей операционке нет, рекомендуем обновить ее до Professional или воспользоваться вторым инструментом.
В редакторе кликаем «Политика Локальный компьютер». Далее заходим в «Конфигурация компьютера», выбираем «Конфигурация Windows». Находим кнопку «Параметры безопасности», идем в «Локальные политики», открываем «Политика аудита», выбираем пункт «Аудит входа в систему».
Переходим в «Свойства», ставим галочки напротив параметров «Успех», «Отказ».
Включение этой функции позволит Windows записывать все попытки входа с указанием времени и имени пользователя. Чтобы посмотреть отчеты в журнале нажмите «WIN+R» и введите команду «eventvwr». Кликаем «Журналы Windows», выбираем «Безопасность».
Сориентироваться в огромном списке событий поможет фильтр по действиям.
Способ узнать кто посещал компьютер при загрузке Windows
Приступаем к запуску редактора реестра. В 7 и 8 версиях Windows делаем это выбрав «Выполнить» в меню «Пуск». В появившемся окне вводим «regedit».
В 10 версии Windows можно вызвать окно аналогичным способом или через поиск.
В каталоге реестра «System» нужно создать новый параметр.
Переименовываем его в «DisplayLastLogonInfo».
В поле «Значение» ставим 1 и сохраняем изменения.
В результате откроется окно для авторизации.
После введения пароля отобразится окно с подробной информацией о дате и времени последнего успешного входа в систему и данные обо всех попытках, потерпевших неудачу. Процесс загрузки системы после прочтения информации можно активировать, нажав «ОК».
Нужно отметить, что даже компьютеры, относящиеся к домену Active Directory, для входа на который используются доменные учетные записи, в случае локального включения политики смогут отобразить только информацию с локальными учетными записями. Чтобы получать сведения о доменных пользователях необходимо включение доменных групповых политик.
С помощью наших советов вы сможете правильно выставить настройки и всегда будете знать кто и когда заходил в ваш компьютер. Это очень пригодится если компьютером пользуется кто-то еще или если вы вынуждены оставлять его без присмотра.