Поиск активных сессий и залогиненных пользователей с Powershell
Иногда может понадобится проверить какие в данный момент залогинены в системе, то есть являются активными. Такую информацию можно использовать для аудита, например для проверки какие учетные записи за какими компьютерами сидят или для последующей перезагрузки сервера, что бы не останавливать работу коллег. В примерах ниже рассмотрено как выполнять удаленные команды для получения активных пользователей и возврата включенных пользователей Active Directory.
Навигация по посту
Получение имени залогиненного пользователя
Я не могу вспомнить готовую команду Powershell, которая бы вернула логин пользователя, но такая возможность есть через WMI:
Есть еще вариант использовать CIM, который может работать немного быстрее:
Обе команды могут работать удаленно если добавить атрибут ComputerName:
Если вы планируете выполнять эти команды удаленно, то может понадобится выполнить предварительные настройки в виде открытия портов и необходимых правах.
Получить только имя пользователя можно так:
Как вы знаете в Winodws есть так же параллельные сеансы сервисов. Если вам нужно вернуть имена этих аккаунтов нужно использовать класс «win32_LoggedOnUser»:
Получение списка компьютеров
Если у вас нет списка компьютеров к которым вы планируете подключиться и узнать активного пользователя — это можно сделать через AD. На примере ниже будут возвращены все компьютеры:
Операция по получению списка компьютеров может быть очень долгой, если у вас большой парк ПК в AD. Вы можете вернуть только компьютеры, которые не отключены в AD (Disable) следующим способом:
Можно использовать и фильтрацию. Так я верну компьютеры имена которые начинаются на «CL»:
Получить список имен мы можем так:
Если у вас список компьютеров не относится к AD или имеет другой формат — то просто преобразуйте его в массив:
Удаленное получение залогиненных пользователей
Выше уже рассматривался вариант получения имени пользователя удаленно используя WMI и CIM. Если обе команды, то всех пользователей активных в данный момент мы можем получить так:
Такой подход может привести к ошибкам так как мы не проверяем включены ли компьютеры:
Мы можем просто не выводить ошибки с помощью «-ErrorAction SilentlyContinue» или заранее пинговать (что было бы правильнее с точки зрения времени выполнения). В примере ниже я так же разбиваю имя компьютера и логин в более удобный формат:
Если вы не хотите выполнять команды удаленно через WMI, то вы можете использовать PSRemoting. От так же требует предварительных настроек, которые описаны в статье «Удаленное управление через Powershell». Команда, которая использует PSRemoting, будет выглядеть примерно так же:
Получение включенных пользователей AD
Если вам нужно вернуть учетные записи, которые включены в AD выполните следующую команду:
Для возврата только отключенных учетных записей используйте $False.
Такой подход работает и с объектами компьютеров в AD:
Для последующей выгрузки данных в Excel почитайте статью «Как в Powershell выгрузить из AD пользователей и группы CSV».
Whoami или WMI
Вы можете вспомнить команду, которая так же возвращает имя пользователя:
Как можно увидеть она вернет ту же информацию, что и класс WMI. Ситуация меняется, когда эти команды используются удаленно:
Как видно, в случае с whoami у нас вернулось имя учетной записи выполнившей команду Powershell, а с WMI пользователь Windows.
Мониторинг активности и статуса подключенных удаленных клиентов. Monitor connected remote clients for activity and status
Область применения. Windows Server (Semi-Annual Channel), Windows Server 2016 Applies To: Windows Server (Semi-Annual Channel), Windows Server 2016
Примечание. Windows Server 2012 объединяет службу DirectAccess и службы удаленного доступа (RAS) в одну роль удаленного доступа. Note: Windows Server 2012 combines DirectAccess and Remote Access Service (RAS) into a single Remote Access role.
Консоль управления на сервере удаленного доступа можно использовать для наблюдения за активностью и состоянием удаленных клиентов. You can use the management console on the Remote Access server to monitor remote client activity and status.
Для выполнения задач, описанных в этом разделе, необходимо войти в систему как член группы «Администраторы домена» или член группы «Администраторы» на каждом компьютере. You must be signed in as a member of the Domain Admins group or a member of the Administrators group on each computer to complete the tasks described in this topic. Если вы не можете выполнить задачу, войдя в учетную запись, которая является членом группы «Администраторы», попробуйте выполнить задачу, войдя в учетную запись, которая является членом группы «Администраторы домена». If you cannot complete a task while you are signed in with an account that is a member of the Administrators group, try performing the task while you are signed in with an account that is a member of the Domain Admins group.
Мониторинг активности и состояния удаленных клиентов To monitor remote client activity and status
В диспетчере серверов щелкните Средства и выберите пункт Управление удаленным доступом. In Server Manager, click Tools, and then click Remote Access Management.
Щелкните отчеты , чтобы перейти к отчетам удаленного доступа в консоли управления удаленным доступом. Click REPORTING to navigate to Remote Access Reporting in the Remote Access Management Console.
Щелкните состояние удаленного клиента , чтобы перейти к пользовательскому интерфейсу активности и состояния удаленных клиентов в консоли управления удаленным доступом. Click Remote Client Status to navigate to the remote client activity and status user interface in the Remote Access Management Console.
Вы увидите список пользователей, подключенных к серверу удаленного доступа, и подробную статистику по ним. You will see the list of users who are connected to the Remote Access server and detailed statistics about them. Щелкните первую строку в списке, соответствующую клиенту. Click the first row in the list that corresponds to a client. При выборе строки на панели предварительного просмотра отображается активность удаленных пользователей. When you select a row, the remote user activity is shown in the preview pane.
Эквивалентные команды в Windows PowerShell Windows PowerShellWindows PowerShell equivalent commands
Следующие командлеты Windows PowerShell выполняют ту же функцию, что и предыдущая процедура. The following Windows PowerShell cmdlet or cmdlets perform the same function as the preceding procedure. Вводите каждый командлет в одной строке, несмотря на то, что здесь они могут отображаться разбитыми на несколько строк из-за ограничений форматирования. Enter each cmdlet on a single line, even though they may appear word-wrapped across several lines here because of formatting constraints.
Статистику пользователя можно фильтровать на основе выбора критериев, используя поля в следующей таблице. The user statistics can be filtered, based on criteria selections, by using the fields in the following table.
Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server
На общедоступном сетевом ресурсе могут возникать ошибки доступа к файлам. Причиной этому является некорректно завершенная сессия пользователя, ошибки в работе ПО или просто кто-то открыл файл и не закрывает его. В такой ситуации файл оказывается заблокированным и не доступен для работы другим пользователям.
Решить проблему доступа к файлу можно путем закрытия сеансов использующих этот файл. В этой статье я расскажу как определить кто открыл файл в сетевой папке и как закрыть это подключение.
Рассмотрим два способа:
Через оснастку «Управление компьютером» консоли управления Windows;
При помощи утилиты командной строки — Openfiles.
1 способ. Получаем список открытых файлов с помощью оснастки «Управление компьютером».
Для получения списка открытых файлов на файловом сервере воспользуемся оснасткой консоли «Управление компьютером». Для запуска оснастки нажимаем сочетание клавиш «Win + R» и набираем название оснастки «compmgmt.msc».
В иерархии оснастки переходим /Управление компьютером/Служебные программы/Общие папки/Открытые файлы.
В правой части оснастки появится список открытых файлов. Здесь можно увидеть имя пользователя открывшего файл, количество блокировок и режим доступа к файлу.
Закрываем файл. Чтобы закрыть сетевой файл открытый другим пользователем находим его в списке и в контекстном меню выбираем пункт «Закрыть открытый файл».
2 способ. Просмотр открытых файлов через командную строку утилитой Openfiles.
Утилита Openfiles дает нам более широкие возможности по поиску и закрытию заблокированных файлов.
C помощью openfiles можно просмотреть список открытых файлов на сервере удаленно. Для этого открываем командную и запускаем утилиту с параметрами.
где /Query — показывает все открытые файлы, /s — определяет имя удаленного компьютера.
В случае, когда необходимо указать логин и пароль пользователя для подключения к удаленному компьютеру, задаются параметры: /u — логин пользователя, /p — пароль пользователя.
По-умолчанию список файлов показан в формате таблицы, но есть параметры позволяющие изменить формат вывода:
/fo csv — выводит список в формате csv с разделителем запятая; /fo list — показывает открытые файлы в формате списка; /fo table — формат таблицы.
Если необходимо увидеть информацию о количестве блокировок файлов (#Locks) и в каком режиме открыт файл (чтение или запись), то можно воспользоваться параметром /v.
Определяем кто открыл сетевой файл.
Чтобы найти пользователя, который открыл и заблокировал нужный нам файл запускаем Openfiles с командой find.
в команде find указан параметр /i, чтобы поиск был регистронезависимым.
После того когда мы узнали имя пользо
Закрываем заблокированный сетевой файл.
Закрыть открытый файл можно по id сессии таким способом:
Закрыть все сетевые подключения к файлам и папкам, которые открыл пользователь BadUser:
Закрыть все файлы и директории открытые в режиме чтение/запись:
Закрыть все подключения к директории с именем «c:\myshare»:
Чтобы сбросить все сессии на удаленном сервере FileServer, которые открыл пользователь domain\baduser, независимо от id сессии: