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

#Получаем список подключенных RDP пользователей на сервере
param (
   [string] $server = $env:COMPUTERNAME)

$server = "term22"
            
#Получаем список сессий
$session = Invoke-Command -ComputerName $server -ScriptBlock {cmd /c "qwinsta /server:$env:COMPUTERNAME"}

# Выбираем строки только с пользователтскими УЗ
# Статус DISK - это отключенные, но не разлогиненные пользователи
# Статус Active - Это активная в данный момент УЗ
#Пример:
# User1                   16           Disk
# User2                   19           Disk

$users=$session | where { ($_ -like "*Disc*" -or $_ -like "*Диск*" -or $_ -like "*ЁбЄ*" -or $_ -like "*Active*"  ) -and $_ -notlike "*services*"} 

$colResult = @()

#Проходимся по строкам
foreach ($sTemp1 in $users.Trim())
{
    #заменяем пробелы где больше двух на один и разбиваем строку по пробелам: пример
    # User1
    # 16
    #Disk
    $spl = ($sTemp1  -replace "\s{2,}"," ").Split(" ")
    
    $array=@()
    #Снова проходимся по строкам и заполняем массив
    foreach ($sTemp2 in $spl)
    {
        if (-not ($sTemp2 -like "*#*"))
        {
            $array += $sTemp2
        }
        
    }

    $rowtmp = "" | Select-Object login,id,Status
    $rowtmp.login =  $array[0]
    $rowtmp.id =  $array[1]
    $rowtmp.Status =  $array[2]
    
    $colResult += $rowtmp


}


$colResult | ft

#Invoke-Command -ComputerName "TERM11" -ScriptBlock {cmd /c "QUERY USER"}


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

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