Поиск пользователей сервера терминалов подключен на


Я пытаюсь выяснить, какой сервер терминалов пользователь подключен. В настоящее время я пытаюсь цикл через каждый сервер и проверить, если он подключен.

$servers = @("server01","server02","server03","server04","server05","server06","server07","server08")

foreach ($server in $servers ) {
    $WMI = Get-WmiObject -Class Win32_Process -ComputerName $server -ErrorAction Stop
    $ProcessUsers = $WMI.getowner().user | Select-Object  -Unique
    if ( $ProcessUsers.Contains("user")) {
        $userServer = $server
        break
    }
}
echo $userServer

Это может занять некоторое время в зависимости от сервера пользователь подключен. Есть ли лучший способ проверить это с помощью PowerShell?



108
1
задан 27 марта 2018 в 12:03 Источник Поделиться
Комментарии
1 ответ

Пара вещей, вот... я хотел бы использовать класс Win32_LoggedOnUser для запроса, который будет вам имя пользователя и "домен" для любого с подключением к компьютеру. У меня есть цитаты на домен, так как считает себя компьютер в домен для любых локальных учетных записей. Вы просто должны сделать немного синтаксического анализа строки, чтобы получить информацию, вы хотите в хорошем, читаемом формате.

Get-WmiObject -Class Win32_LoggedOnUser -ComputerName 'Server01' | 
Select PSComputerName,@{l='Domain';e={$_.Antecedent -replace '^.+?Domain="(.+?)".*$','$1'}},@{l='Name';e={$_.Antecedent -replace '^.+?Name="(.+?)".*$','$1'}} -Unique

Затем, вы можете пройти несколько имен компьютеров в командлет Get-WmiObject в Сразу, и он будет получать информацию от всех них. Плюс, если вы запустите его в фоновом режиме, вы можете установить ограничения скорости и будет обрабатывать столько подключений, сколько установлено предельное значение.

$servers = @("server01","server02","server03","server04","server05","server06","server07","server08")

$Job = Get-WmiObject Win32_LoggedOnUser -ComputerName $servers -AsJob -ThrottleLimit 10
Wait-Job $Job
$Results = Receive-Job $Job
$Results | Select PSComputerName,@{l='Domain';e={$_.Antecedent -replace '^.+?Domain="(.+?)".*$','$1'}},@{l='Name';e={$_.Antecedent -replace '^.+?Name="(.+?)".*$','$1'}} -Unique | Sort PSComputerName,Domain,Name

0
ответ дан 7 апреля 2018 в 01:04 Источник Поделиться