Есть ли способ перечислить все серверы, на которых зарегистрирован данный пользователь, во всем активном каталоге?
Что-то вроде...:
QueryRdpConnections -user BobAdmin
Результат ...:
Server
----------------
Web001
Web002
Web003
SQL004
SQL007
Вы можете использовать qwinsta в PowerShell:
QUERY SESSION [sessionname | username | sessionid]
[/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM]
sessionname Identifies the session named sessionname.
username Identifies the session with user username.
sessionid Identifies the session with ID sessionid.
/SERVER:servername The server to be queried (default is current).
/MODE Display current line settings.
/FLOW Display current flow control settings.
/CONNECT Display current connect settings.
/COUNTER Display current Remote Desktop Services counters information.
/VM Display information about sessions within virtual machines.
Быстрый поиск поможет вам этот статья о технет.
Я использую следующую часть скрипта, чтобы опрашивать все активные серверы и выяснять, какие пользователи вошли в систему удаленно:
function QueryRdpConnections {
$ErrorActionPreference= 'silentlycontinue'
# Import the Active Directory module for the Get-ADComputer CmdLet
Import-Module ActiveDirectory
#Query Active Directory for computers running a Server operating system
$Servers = Get-ADComputer -Filter {OperatingSystem -like "*server*" -and Enabled -eq 'true'}
ForEach ($Server in $Servers) {
$ServerName = $Server.Name
# Run the qwinsta.exe and parse the output
$queryResults = (qwinsta /SERVER:$ServerName | foreach { (($_.trim() -replace "\s+",","))} | ConvertFrom-Csv)
# Pull the session information from each instance
ForEach ($queryResult in $queryResults) {
$RDPUser = $queryResult.USERNAME
$sessionType = $queryResult.SESSIONNAME
# We only want to display where a "person" is logged in. Otherwise unused sessions show up as USERNAME as a number
If (($RDPUser -match "[a-z]") -and ($RDPUser -ne $NULL)) {
Write-Host $ServerName logged in by $RDPUser on $sessionType
}
}
}
}
Я запускаю его из powershell_ise и просто редактирую в строке 22 $ RDPuser -match «%%%» на $ RDPuser -match «user1 / 2/3 /», чтобы запустить его для конкретного пользователя. Если вы запустите его как есть, он отобразит всех пользователей, вошедших в систему с помощью rdp.