понедельник, 13 мая 2013 г.

[Powershell] Получение списка терминальных пользователей фермы

Мало кто не знает о существовании оснастки Remote Desktop Services Manager, которая позволяет эффективно управлять сессиями пользователей, получать информацию о них, отправлять сообщения и пр. Но большим недостатком этой оснастки являются периодические подвисания, а следовательно - нестабильная работа. В части оперативной техподдержки эта ситуация неприемлема. Поэтому иногда необходимо иметь дополнительные инструменты, "на всякий пожарный", как говорится. 
Здесь на помощь к нам приходит Powershell и модуль для работы со службами удаленных рабочих столов PSTerminalServices, а именно процедура Get-TSSession. С помощью нехитрого скрипта мы получаем список пользователей на нашей терминальной ферме:

$users = "C:\Users\Public\ts-users.txt"
$marker = "C:\Users\Public\ts-users.mk"
Out-File $marker
If (Test-Path $users) {Clear-Content $users}
Import-Module PSTerminalServices
Import-Module ActiveDirectory
$servers =  Get-ADGroupMember Terminal-Servers
$servers | Sort -Property Name | ForEach {          
   $ping = Test-Connection -ComputerName $_.Name -Count 1 -Quiet
   If ($ping -eq $True) {

   $ts = Get-TSSession -ComputerName $_.Name  | 
   Where {($_.IPAddress -Match ".") -or ($_.State -eq "Disconnected")}
   $ts  | Out-File $users -Width 400 -Append -Force -Confirm:$False} } 

If (Test-Path $marker) {Remove-Item $marker -Force -Confirm:$False}

Ставим скрипт в планировщик задач раз в минуту и всегда имеем в файле C:\Users\Public\ts-users.txt актуальную информацию о пользователях нашей терминальной фермы (серверы группы Terminal-Servers). Во время выполения скрипта создается файл-маркер C:\Users\Public\ts-users.mk, который удаляется по завершению.

Комментариев нет:

Отправить комментарий