Поиск текущего пользователя, вошедшего в систему на удаленном компьютере

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

Проверка зарегистрированных пользователей с помощью PSLoggedOn и Qwinsta

В состав SysInternals PSTools от Microsoft входит консольная утилита под названием PSLoggedOn.exe с помощью которого можно получить имя пользователя, вошедшего в систему на удаленном компьютере, а также список подключенных к нему SMB-сессий.

Загрузите инструмент и запустите его:

psloggedon \\RemoteCompName

psloggedon Просмотр того, кто вошел в систему на удаленном компьютере

Как видите, инструмент вернул имя вошедшего в систему пользователя (Пользователи, вошедшие в систему локально) и список пользователей, которые получают доступ к SMB-ресурсам этого компьютера по сети (Пользователи, вошедшие в систему через общие ресурсы).

Если вы хотите получить только имя пользователя, вошедшего в систему локально, используйте команду -l вариант:

Psloggedon.exe \\pc1215wks1 –l

PSLoggedOn подключается к реестру и проверяет имя пользователя, вошедшего в систему локально. Для этого используется RemoteRegistry служба должна быть запущена. Запустить и настроить автоматический запуск службы можно с помощью PowerShell:

Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry

Вы также можете получить список сеансов на удаленном компьютере с помощью встроенной функции qwinsta инструмент. Этот инструмент должен быть знаком любому администратору, управляющему терминальной средой Remote Desktop Services (RDS). Чтобы получить список зарегистрированных пользовательских сессий с удаленного компьютера, выполните команду:

qwinsta /server:be-rdsh01

qwinsta - найти зарегистрированного пользователя удаленно

Инструмент возвращает список всех сессий (активных и отключенных по таймауту RDP) на RDS-сервере или на рабочем столе Windows 10 (11) редакции (даже если вы разрешили несколько RDP-подключений к нему).

Если вы получаете Ошибка 5 Доступ запрещен при попытке подключения к удаленному серверу с помощью qwinsta убедитесь, что на удаленном хосте разрешено удаленное управление пользователями через RPC. При необходимости разрешите это в реестре с помощью следующей команды или с помощью GPO:reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f

Как получить текущего пользователя на удаленном компьютере с помощью PowerShell?

Вы можете получить имя пользователя, вошедшего в систему на компьютере, используя команду Win32_ComputerSystem WMI-класс. Откройте консоль PowerShell и выполните команду:

Get-WmiObject -class Win32_ComputerSystem | Format-List Username

Команда возвращает имя пользователя, вошедшего в систему на компьютере.

Get-WMIObject Win32_ComputerSystem UserName

Команда Get-WmiObject имеет следующие функции -ComputerName опция, которую можно использовать для доступа к объектам WMI на удаленном компьютере. Следующая команда вернет имя пользователя, вошедшего в систему на удаленном компьютере:

(Get-WmiObject -class Win32_ComputerSystem –ComputerName pc1215wks1).Username

получить удаленного зарегистрированного пользователя с помощью powershell

Команда показывает только пользователя, вошедшего в консоль (не через RDP).

Вы также можете использовать PSRemoting для получения информации с удаленных компьютеров с помощью команды Invoke-Command.

Если вы можете получить только имя пользователя на удаленном компьютере (без домена), используйте эти команды:

$userinfo = Get-WmiObject -ComputerName pc1215wks1 -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\\'
$user[1]

В современных версиях PowerShell Core (pwsh.exe) необходимо использовать команду Get-CimInstance вместо команды Get-WmiObject:Get-CimInstance –ComputerName pc1215wks1 –ClassName Win32_ComputerSystem | Select-Object UserName

Или:

(Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem).CimInstanceProperties | where{$_.Name -like "UserName"}| select value

Get-CimInstance - просмотр вошедших в систему пользователей

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 pc1215wks1,pc1215wks2,mun-dc01

Сценарий Powershell для просмотра зарегистрированных пользователей на нескольких компьютерах AD

Если функция возвращает пустое имя пользователя для компьютера, это означает, что никто не вошел в систему.

Вы можете получить имена пользователей, вошедших в систему на компьютерах в домене Active Directory. Используйте команду Get-ADComputer, чтобы получить список компьютеров в домене. В приведенном ниже примере мы получим имена пользователей, зарегистрированных на активных компьютерах в определенном OU домена. Чтобы сценарий работал быстрее, прежде чем получить доступ к удаленному компьютеру, я добавил проверку его доступности с помощью ICMP ping и команды 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=Berlin,DC=woshub,DC=com').Name
Get-LoggedUser $computers |ft -AutoSize

Получение зарегистрированных пользователей с помощью сценария Powershell

Также обратите внимание, что вы можете хранить имя вошедшего в систему пользователя в свойствах компьютера в AD. Для этого можно использовать сценарий входа в систему, описанный в статье «Set-ADComputer: Как добавить информацию о пользователе в свойства компьютера AD».

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

$user="m.smith"
$user_cn=(Get-ADuser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *