If i help You, send me BTC please 1CJGz4UGyL7hTjPeN8j7fu9LRmmWiWSRHi

Поиск сессий пользователей. Powershell.

Постов 30 из 174

Задача не столько нужная в работе, сколько использована мной для записи некоторых трюков powershell.
Допустим есть несколько серверов rdp, есть логин пользователя (usefree) и необходимость найти на каких серверах у него есть в данный момент сессия (активная или нет — не важно). Если логин другой — он передается в сценарий параметром.

Код сценария.

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
 
param ($Login = "usefree")
Import-Module ActiveDirectory
$Amount = 0
$Servers = Get-ADComputer -Filter {OperatingSystem -like "*server*"} 
ForEach ($Server in $Servers) {
	$ServerName = $Server.Name
	$connection = Test-Connection $ServerName -Count 1 -ErrorAction SilentlyContinue
	if ($connection -ne $null){
		if (Get-WmiObject win32_computersystem -ComputerName $ServerName -ErrorAction SilentlyContinue) {
			$queryResults = qwinsta /server:$ServerName
			ForEach ($queryResult in $queryResults) { 
				if ($queryResult -match $Login){
					$Matched += "$ServerName "
					$Amount++
				}
			}
		}
	}	
}
if ($Amount -gt 0){
	Write-host "Servers where $Login Session found: $Matched" 
} else {
	Write-host "No $Login sessions found"
}

Перед поиском логина осуществляется проверка связи с сервером:

1
2
$connection = Test-Connection $ServerName -Count 1 -ErrorAction SilentlyContinue
if ($connection -ne $null){

и проверка запущенного на нем сервера RPC:

1
if (Get-WmiObject win32_computersystem -ComputerName $ServerName -ErrorAction SilentlyContinue) {

, ,

Menu