1

Я ищу, чтобы идентифицировать ровно одну часть информации, как ни странно трудно получить:

Как узнать, какие имена компьютеров подключены к определенному серверу удаленно (под windows)? Я попытал счастья с помощью quser , qwinsta и powershell, но безуспешно.

Возвращение переменной окружения% clientname% для меня не вариант, так как в среде java, из которой она вызывается, она сообщает старое значение.

Спасибо

1 ответ1

1

Я знаю об этих бесплатных инструментах, которые могут помочь:

TSListUsers

утилита командной строки для отображения списка подключенных и отключенных пользователей, имени хоста, IP-адреса и номера сеанса RDP на локальном или удаленном сервере терминалов Windows / сервере RDP.

Чтобы составить список пользователей, вам необходимо иметь следующие способности:

  • NetBios доступ к серверу
  • Разрешения, позволяющие запрашивать информацию о сеансе RDP (если вы можете войти в TS, вы должны иметь это по умолчанию)
  • Службы терминалов / RDP должны работать на целевом хосте

Полезным, но более простым инструментом является psloggedon :

PsLoggedOn


Для сеансов Terminal Server полезным инструментом будет бесплатный LazyTS (управление службами терминалов) для PowerShell GUI.


Чистое решение PowerShell предполагает, что вошедшие в систему пользователи используют оболочку рабочего стола Explorer (а не пользовательскую оболочку). Намного проще подсчитать экземпляры процесса explorer.exe и найти их владельцев, как в этом сценарии :

$explorerprocesses = @(Get-WmiObject -Query "Select * FROM Win32_Process WHERE Name='explorer.exe'" -ErrorAction SilentlyContinue)
if ($explorerprocesses.Count -eq 0)
{
    "No explorer process found / Nobody interactively logged on"
} else {
    foreach ($i in $explorerprocesses)
    {
        $Username = $i.GetOwner().User
        $Domain = $i.GetOwner().Domain
        $Domain + "\" + $Username + " logged on since: " + ($i.ConvertToDateTime($i.CreationDate))
    }
}

Более простой подход с использованием класса Win32_LogonSession также работает, но имеет тенденцию давать больше результатов, чем ожидалось:

function get-logedonuser {            
param (            
 [string]$computername = $env:COMPUTERNAME            
)            
Get-WmiObject -Class Win32_LogonSession -ComputerName $computername |            
foreach {            
 $data = $_            

 $id = $data.__RELPATH -replace """", "'"            
 $q = "ASSOCIATORS OF {$id} WHERE ResultClass = Win32_Account"            
 Get-WmiObject -ComputerName $computername -Query $q |            
 select @{N="User";E={$($_.Caption)}},             
 @{N="LogonTime";E={$data.ConvertToDateTime($data.StartTime)}}            
}            
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .