79 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
	
		
			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 |