79 lines
		
	
	
		
			No EOL
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			No EOL
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
| function Get-Query {
 | ||
|     Param (
 | ||
|         $srv="localhost",
 | ||
|         $user="*"
 | ||
|     )
 | ||
|     # Создаем коллекцию - будущий объект
 | ||
|     $Users = New-Object System.Collections.Generic.List[System.Object]
 | ||
|         # Используем команду query с параметром user и именем удаленного сервера (забираем вывод в переменную)
 | ||
|         $query = query user /server:$srv
 | ||
|         # Проверяем, что перемення не пустая
 | ||
|         if ($null -ne $query) {
 | ||
|             # Перечитываем все строки
 | ||
|             $usr = $query[1..100]
 | ||
|             # Удаляем лишние пробелы
 | ||
|             $usr = $usr -replace "(^\s)|(^\>)"
 | ||
|             $usr = $usr -replace "\s{2,100}"," "
 | ||
|             # Формируем массив из полученого вывода, где каждая новая строка будет выступать элементом цикла
 | ||
|             $split1 = $usr -split "\n"
 | ||
|             # Отправляем массив в цикл
 | ||
|             foreach ($s in $split1) {
 | ||
|             # Формируем массив из слов разделенных пробелами
 | ||
|             $split2 = $s -split "\s"
 | ||
|             # Проверяем количество элементов в массиве строки
 | ||
|             if ($split2.Count -eq 6) {
 | ||
|                 # Если длина 2-го элемента в массиве равна 4, значит сессия отключена
 | ||
|                 if ($split2[2].Length -eq 4) {
 | ||
|                     $status = "Disconnect"
 | ||
|                 }
 | ||
|                 # Если 6 или 7 - активна (зависит от локализации)
 | ||
|                 elseif (($split2[2].Length -eq 6) -or ($split2[2].Length -eq 7)) {
 | ||
|                     $status = "Active"
 | ||
|                 }
 | ||
|                 # Заполняем коллекцию значениями из массива строки
 | ||
|                 $Users.Add([PSCustomObject]@{
 | ||
|                     User = $split2[0]
 | ||
|                     Session = $null
 | ||
|                     ID = $split2[1]
 | ||
|                     Status = $status
 | ||
|                     IdleTime = $split2[3]
 | ||
|                     LogonTime = $split2[4]+" "+$split2[5]
 | ||
|                 })
 | ||
|             }
 | ||
|             if ($split2.Count -eq 7) {
 | ||
|                 if ($split2[3].Length -eq 4) {
 | ||
|                     $status = "Disconnect"
 | ||
|                 } 
 | ||
|                 elseif (($split2[3].Length -eq 6) -or ($split2[3].Length -eq 7)) {
 | ||
|                     $status = "Active"
 | ||
|                 }
 | ||
|                 $Users.Add([PSCustomObject]@{
 | ||
|                     User = $split2[0]
 | ||
|                     Session = $split2[1]
 | ||
|                     ID = $split2[2]
 | ||
|                     Status = $status
 | ||
|                     IdleTime = $split2[4]
 | ||
|                     LogonTime = $split2[5]+" "+$split2[6]
 | ||
|                 })
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
|     $Users
 | ||
| }
 | ||
| 
 | ||
| # Get-Query 192.168.3.100
 | ||
| # User      : lifailon
 | ||
| # Session   : rdp-tcp#34
 | ||
| # ID        : 1
 | ||
| # Status    : Active
 | ||
| # IdleTime  : 2:24
 | ||
| # LogonTime : 16.12.2023 11:11
 | ||
| # 
 | ||
| # 
 | ||
| # Get-Query 192.168.3.100
 | ||
| # User      : lifailon
 | ||
| # Session   :
 | ||
| # ID        : 1
 | ||
| # Status    : Disconnect
 | ||
| # IdleTime  : .
 | ||
| # LogonTime : 16.12.2023 11:11 |