PowerShell Поиск сессии пользователей на серверах

Имея несколько ферм с терминальными серверами иногда нужно найти сессию пользователя на сервере. Конечно, можно перебирать руками каждый сервер но это не наш метод wink.

Для этого есть PowerShell, для которого мы напишем скрипт и он уже будет искать юзеров. Итак приступим.

  1. RUN POWERSHELL
    Запускаем PowerShell (Win+R — выполнить «PowerShell»)
  2. RUN ADMIN POWERSHELL
    Щёлкам правой кнопкой мыши по значку окна PowerShell и в появившемся контекстном меню выбираем «Запуск от имени Администратора». Откроется новое окно с синим фоном.
  3. В новом окне пишем «Set-ExecutionPolicy Unrestricted»
    PS C:\Windows\system32> Set-ExecutionPolicy Unrestricted
    
    Изменение политики выполнения
    Политика выполнения обеспечивает защиту компьютера от ненадежных скриптов. Изменение политики выполнения может
    подвергнуть компьютер риску нарушения системы безопасности, как описано в разделе справки, вызываемом командой
    about_Execution_Policies. Изменить политику выполнения?
    [Y] Да - Y  [N] Нет - N  [S] Приостановить - S  [?] Справка (значением по умолчанию является "Y"): Y
    PS C:\Windows\system32>
    
  4. Теперь наши скрипты будут работать у нас на ПК.
  5. Создаём файл «Поиск пользователей на сервере.ps1»
  6. Размещаем туда следующий код
    $Login = Read-Host -Prompt "Введите логин пользователя"
    Import-Module ActiveDirectory
    $Amount = 0
    $Matched = ""
    $Servers = Get-ADComputer -Filter { Name -like "p-ts01*"} 
    ForEach ($Server in $Servers) {
    	$ServerName = $Server.Name
        Write-host = $Server.Name
    	$connection = Test-Connection $ServerName -Count 1 -ErrorAction SilentlyContinue
    	if ($connection -ne $null){
    			$queryResults = qwinsta /server:$ServerName
    			ForEach ($queryResult in $queryResults) {
                #Write-host $queryResult -cmatch $Login
    				if ($queryResult -cmatch $Login){
                    #Write-host $ServerName
    					$Matched += "$ServerName "
    					$Amount++
    				}
    			}
    	}	
    }
    if ($Amount -gt 0){
    	Write-host "Servers where $Login Session found: $Matched" 
    } else {
    	Write-host "No $Login sessions found"
    }
    
    read-host "Press enter key to continue"
    
  7. RUN POWERSHELL SCRIPT
    Проверяем ПКМ по нашему скрипту «Выполнить с помощью PowerShell»
  8. Поиск терминальной сессии на сервере
    Указываем логин нужного пользователя и поиск пошел. (В скрипте используется -cmatch это означает, что логин пользователя чувствителен к регистру.)

92