- Вывести список всех учетных записей пользователей в системе Windows через командную строку
- 5 ответов 5
- Windows сервер получить список пользователей
- Все ответы
- Получение списка членов локальной группы пользователей на серверах Windows
- Получение списка пользователей в группе AD и выгрузка в CSV
- Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server
- Вывести список открытых файлов на файловом сервере Windows
- Как определить какой пользователь открыл файл
- Как закрыть открытый файл
- Как удаленно закрыть открытые файлы с помощью PowerShell
Вывести список всех учетных записей пользователей в системе Windows через командную строку
Я хотел бы, чтобы команда перечисляла все учетные записи пользователей в системе Windows (Vista, 7 и т.д.) Таким образом, чтобы я могла использовать их для последующей итерации с помощью следующей команды.
net user дает мне данные, которые я ищу, но добавляет кучу другого мусора, который может вызвать затруднения при разборе пользователей.
В идеале я хотел бы получить вывод, как:
5 ответов 5
Для тех, кто здесь, просто ищет способ перечислить всех пользователей на вашем компьютере в командной строке и не нуждается в цикле. Просто запустите эту команду:
И он выведет то, что вам нужно в этом формате
Если вы хотите перебирать пользователей строго в командной строке Windows, самым простым способом было бы сочетание wmic и цикла for .
Сердцем команды является wmic UserAccount get Name , который должен распечатать список учетных записей. Возможно, вы захотите выполнить некоторую фильтрацию, как это сделал Каран в своем ответе на VBScript, с помощью чего-то вроде wmic UserAccount where «LocalAccount=True» get Name . Любое поле фильтруется; чтобы просмотреть все из них, используйте wmic UserAccount get (без Name ).
Цикл for просто используется для анализа выходных данных команды. Он пропускает первую строку (которая печатает заголовок столбца), а последняя строка пропускается с помощью команды if , поскольку она пуста. Смотрите for /? для дополнительной информации.
Windows сервер получить список пользователей
Всем добрый день!
Стоит задача получить список пользователей с сервера (домен, AD).
Пробовал разными способами (NetUserEnum, NetQueryDisplayInformation, скрипт VBS) — результат один и тот же:
Если запускаю из под админов (любых, хоть локальных) получаю 86 записей, реально существующих.
Если из под простого пользователя — 20!
Думал сначала, что что-то неправильно реализовал в ПО, вызывая данные функции. Попробовал просто скрипт — результат тотже. Сервер SBS2003. Сравнивал параметры учетных записей тех, кого получаю и тех, кого не получаю. Разницы не вижу, никаких закономерностей установить не могу. Прихожу к выводу, что дело не в ПО и функциях получения, а в сервере.
Пример скрипта, с помощью которого получаю кол-во пользователей:
Заранее благодарю за любые подсказки/наводки.
- Изменен тип ILYA [ sie ] Sazonov Moderator 6 декабря 2010 г. 17:06
Все ответы
Alex Shulg написано: | |
| |
Как быстро составить список локальных администраторов на каждом сервере Windows? Задача непростая, если не знать, как правильно к ней подойти. Создать список членов группы пользователей на базе Active Directory можно с помощью целого ряда утилит командной строки, включая CSVDE и LDIFDE, но в случае с локальными учетными записями дело обстоит немного иначе. Между тем, знание состава локальных групп безопасности необходимо для эффективного применения настроек групповой политики (Group Policy), которые в противном случае могут быть реализованы некорректно по целому ряду причин. Решить эту проблему можно с помощью старой доброй команды net. Старушка net для меня священна — я до сих пор не могу отказаться от удобных однострочных команд, которые выручали меня все эти годы. Например, составить список пользователей, входящих в локальную группу администраторов на сервере Windows, можно следующей командой: В полученном списке будут перечислены все имена пользователей и групп, образующих локальную группу администраторов, в том числе пользователи, определенные в настройках групповой политики Active Directory. Другой вариант — воспользоваться сценарием Windows PowerShell. Как и прочие сценарии, преобразованные из команд DOS, он включает в себя несколько строк. Чтобы получить описанный выше результат с помощью PowerShell, можно выполнить следующие команды: Примечание: сценарий был создан с использованием примеров с сайта PowerShell Code Repository . Когда вам в следующий раз понадобится быстро получить сведения о членах локальных групп пользователей, достаточно будет выполнить этот простой сценарий, вывод которого можно будет экспортировать в текстовый файл для хранения и аудита. Получение списка пользователей в группе AD и выгрузка в CSVВ этой статье мы рассмотрим несколько примеров использования PowerShell для получения списка пользователей в различных группах Active Directory. Данная статья должна научить вас получать список учетных записей определенной группы AD и экспортировать полученный список пользователей с различными атрибутами в CSV файл, с которым удобно работать в Excel. Ранее для построения списка пользователей в группах Active Directory приходилось использовать скрипты VBScript, или утилиты командной строки DSQuery или CSVDE, недостаточно гибкие и удобные. Для взаимодействия с AD Microsoft разработала специальный модуль Active Directory Module для Windows PowerShell. Впервые данный модуль появился в Windows Server 2008 R2 и для его использования нужно сначала его загрузить в вашу сессию PowerShell командой: В Windows Server 2012 / R2 / Windows Server 2016 этот модуль автоматически устанавливается и загружается при установке на сервере роли ADDS (Active Directory Domain Services), т.е. при повышении сервера до контроллера домена. В настольных пользовательских операционных системах (Windows 10 / 8 / 7) модуль Active Directory для Windows PowerShell входит в состав RSAT, который нужно скачать, устанавливать и активировать модуль для работы с AD отдельно. Обратите внимание, что для использования в сессии PowerShell модуля ActiveDirectory не обязательно иметь права администратора домена. Получить информацию о пользователях и группах из AD может любой аутентифицированный пользователь домена. Для получения информации об учетных записях, которые входят в группу безопасности Active Directory используется командлет Get-ADGroupMember. Например, чтобы вывести на экран список членов группы Domain Admins, нужно выполнить команду: Get-ADGroupMember ‘Domain Admins’ В том случае, если вы не знаете точного имени группы, можно вывести список всех групп в AD с помощью команды: Get-ADGgroup -filter * | sort name | select Name Чтобы отобразить только имена пользователей в группе: Get-ADGroupMember -Identity ‘Domain Admin’| ft name Если в указанной группе содержатся другие группы AD, для вывода членов группы с учетом вложенных групп нужно использовать параметр Recursive . Get-ADGroupMember -Identity ‘Domain Admin’ -Recursive | ft name Переключатель –recursive предписывает команде get-adgroupmember получать список пользователей из каждой вложенной группы и выводить только объекты, не являющиеся контейнерами (пользователей или компьютеры). Т.е. данная команда отобразит даже тех пользователей, которые напрямую не входят в группу. Можно вывести более подробную информацию об учетных записях в данной группе таким образом: Get-ADGroupMember -Identity ‘Domain Admin’ | foreach Рассмотрим более сложную конструкцию PowerShell, которая позволяет вывести всех членов определённой доменной группы безопасности с информацией о компании, подразделении и должности с последующей сортировкой и разбивкой на блоки с зависимости от конкретного аттрибута (допустим нам нужно сгруппировать пользователей по полю Компания — company ): Get-ADGroupMember -Recursive ‘Domain Admin’ | ForEach Для выгрузки полученного списка в текстовый файл в конце предыдущей команды нужно добавить конвейер: | Out-File -Width 4000 «C:\TxT\GetUsersADGroupByCompany.txt» Для выгрузки списка пользователей группы в CSV файл нужно добавить такой конвейер: | Export-Csv -NoTypeInformation .\GetUsersADGroupByCompany.csv -Encoding Unicode Можно посчитать общее количество пользователей в группе: (Get-ADGroupMember -Identity ‘Domain Admin’).Count Еще один полезный пример. Попробуем найти все группы AD содержащие в имени шаблон *Manager*, и выведем пользователей, которые входят в эти группы. Чтобы выводить только уникальные объекты, воспользуемся аргументом -uniq. Get-ADGroup -filter ‘SamAccountName -like «*Manager*»‘ | Get-ADGroupMember -recursive|Select-Object -uniq Если при выполнении команды Get-ADGroupMember появится ошибка: Get-ADGroupMember : The specified directory service attribute or value does not exist Значит в состав группы входят пользователи из других лесов. Командлет Get-ADGroupMember не поддерживает работу с пользователями из разных лесов AD. Для добавления пользователей в группы AD нужно использовать командлет Add-ADGroupMember. Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows ServerАдминистраторы файловых серверов Windows часто сталкиваются с необходимостью принудительного закрытия файлов, открытых пользователями. Такая задача возникает при одновременной работы с одним файлом нескольких пользователей. Часто при некорректной работе ПО или неправильном завершении сессии пользователем, файлы в сетевой папке оказываются открытыми и заблокированными, и остальные пользователи не могут вносить в него изменения. В этой статье мы покажем, как получить список открытых файлов на файловом сервере, узнать какие пользователи их используют, и способы сброса этих файловых сессий. Вывести список открытых файлов на файловом сервере WindowsСписок открытых пользователями файлов на файловом сервере Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ). Запустите на файловом сервере консоль Computer Management (или подключитесь к нему удаленно консолью со своего компьютера) и перейдите в секцию System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов сервера, открытых удаленно . Список содержит локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read). Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles . Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу: Openfiles /Query /fo csv |more При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия, определяющая данное подключение. Управление подключениями пользователей осуществляется именно через эти идентификаторы сессий. Эту же команду можно выполнить удаленно, например, нужен список открытых файлов на файловом сервере mskfs01: Openfiles /Query /s mskfs01 /fo csv У команды Openfiles есть еще одна интересная возможность просмотра списка локально открытых файлов. Для ее использования нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера). Как определить какой пользователь открыл файлЧтобы определить пользователя, который открыл (заблокировал) файл cons.adm на сервере, выполните команду: Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm» Ключ /i используется, чтобы выполнялся регистронезависимый поиск Естественно, можно указать только часть имени файла. К примеру, нам нужно узнать кто открыл xlsx файл, в имени которого есть строка farm, воспользуемся таким конвейером: Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx» Можно, конечно найти файл и в графической консоли Computer Management, но это менее удобно (консоль не предусматривает возможность поиска). Как закрыть открытый файлЧтобы закрыть открытый файл, нужно найти его в списке файлов секции Open File и в контекстном меню выбрать пункт « Close Open File ». Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles . Как мы уже говорили, она возвращает ID сессии открытого файла. Именно по этому ID сессии, файл можно принудительно закрыть, сбросив подключение. Находим ID нужного файла: Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «.xlsx» Отключаем от него пользователя по полученному идентфикатору: Openfiles /Disconnect /s mskfs01 /ID 67109098 Как удаленно закрыть открытые файлы с помощью PowerShellВ Windows Server 2012 / Windows 8 в PowerShell появились командлеты для работы с шарами и файлами на SMB сервере. Данные командлеты можно использовать для удаленного сброса подключений к открытому файлу. Список открытых файлов можно получить с помощью командлетов Get- SMBOpenFile , а закрыть файл (сбросить подключение) с помощью Close-SmbOpenFile . Итак, подключаемся к удаленному серверу: $sessn = New-CIMSession –Computername mskfs01 Находим и закрываем открытый файл pubs.docx одной командой: Get-SMBOpenFile -CIMSession $sessn | where <$_.Path –like "*pubs.docx">| Close-SMBOpenFile -CIMSession $sessn Подтверждаем закрытие файла, нажав Y. Чтобы убрать подтверждение принудительного закрытия файла на сервере, используйте ключ -Force Эти же команды можно использовать, к примеру, чтобы закрыть все файлы, открытые некоторым пользователем (пользователь ушел домой и не освободил файлы). К примеру, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните Get-SMBOpenFile -CIMSession $sessn | where <$_.ClientUserName –like "*ipivanov*">|Close-SMBOpenFile -CIMSession $sessn |