1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#Получаем список подключенных 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"} |