microsoft-windows:windows-server-2012-r2:remote-desktop-services:powershell-script-for-quietly-disabling-idle-rds-remote-desktop-sessions-in-windows-server-2012-r2
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
draft:dmitriy-isupov:idle_drop_ctx [13.07.2018 09:55] – [Тихое отключение бездействующих сессий RDS] Дмитрий Исупов | microsoft-windows:windows-server-2012-r2:remote-desktop-services:powershell-script-for-quietly-disabling-idle-rds-remote-desktop-sessions-in-windows-server-2012-r2 [06.02.2020 09:23] (текущий) – Дмитрий Исупов | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== Тихое отключение бездействующих сессий RDS ===== | + | ===== Скрипт тихого отключения бездействующих сессий RDS ===== |
- | Заметка по скрипту заменяющему стандартный функционал RDS ограничивающий время бездействия пользователей в ударенной сессии. | + | {{: |
- | \\ | + | В качестве альтернативы |
- | ==== Мотив ==== | + | |
- | + | ||
- | После достижения лимита простоя, | + | |
- | После чего у пользователя нет | + | |
- | В результате чего сессия | + | |
- | + | ||
- | У RDS на Windows Server 2012 данное сообщение всплывает на весь горизонт экрана, что приводит к стрессовым | + | |
- | + | ||
- | \\ | + | |
- | ==== Решение ==== | + | |
- | + | ||
- | Написать скрипт который будет | + | |
- | + | ||
- | \\ | + | |
- | ==== Реализация ==== | + | |
- | <code powershell> | + | <file powershell |
#Путь к списку серверов RDS в формате txt | #Путь к списку серверов RDS в формате txt | ||
$path_list_srv = " | $path_list_srv = " | ||
- | |||
# | # | ||
$Idle_minutes = 30 | $Idle_minutes = 30 | ||
- | ######### | ||
# | # | ||
$Servers = $Null | $Servers = $Null | ||
$Servers = Get-Content -Path $path_list_srv | $Servers = Get-Content -Path $path_list_srv | ||
- | |||
#Если список серверов пуст то выход | #Если список серверов пуст то выход | ||
if ($Servers -eq $Null) {exit} | if ($Servers -eq $Null) {exit} | ||
- | | + | foreach($Srv in $Servers){ |
- | # | + | |
- | $List_i = $Null | + | $List_i = $Null |
- | $List_i = quser / | + | $List_i = quser / |
- | # | + | |
- | foreach ($i in $List_i){ | + | foreach ($i in $List_i){ |
- | Get-Variable -Name " | + | Get-Variable -Name " |
+ | $u_array = $i -split " " | ? {$_} | ||
+ | $u_login = $u_array[0] | ||
+ | $u_session = $u_array[1] | ||
+ | $u_Idle_t = $u_array[$u_array.count-3] | ||
- | $u_login | + | # |
- | $u_session = ($i -split " " | + | if ($u_Idle_t -ne $Null){ |
- | $u_Idle_t = ($i -split | + | $u_Idle_t |
+ | if($u_Idle_t | ||
+ | | ||
+ | }elseif($u_Idle_t | ||
+ | $u_Idle_t = [timespan]" | ||
+ | }else{ | ||
+ | | ||
+ | | ||
+ | #Редко RDS выдает неверное idle time для активной сессии, | ||
+ | if ( [int]$u_Idle_t.Days -gt 1000){$u_Idle_t = New-TimeSpan} | ||
+ | } | ||
- | #Преобразование | + | #Если idle time превышает заданный |
- | if ($u_Idle_t -ne $Null){ | + | if ([int]$u_Idle_t.TotalMinutes |
- | $u_Idle_t = $u_Idle_t | + | write-host -ForegroundColor yellow |
- | if($u_Idle_t -like "*:*"){ | + | tsdiscon /SERVER:$Srv $u_session |
- | $u_Idle_t = [timespan]" | + | }ELSE{write-host -ForegroundColor green $Srv : $u_login / $u_Idle_t.TotalMinutes} |
- | | + | |
- | $u_Idle_t = [timespan]" | + | |
- | | + | |
- | $u_Idle_t = [timespan]" | + | |
- | } | + | |
- | + | ||
- | #Редко RDS выдает неверное idle time для активной сессии, | + | |
- | if ( [int]$u_Idle_t.Days -gt 1000){$u_Idle_t = New-TimeSpan} | + | |
+ | } | ||
} | } | ||
- | + | </file> | |
- | #Если idle time превышает заданный интервал то сессия отключается | + | |
- | if ([int]$u_Idle_t.TotalMinutes -ge $Idle_minutes){ | + | |
- | write-host -ForegroundColor yellow $Srv : $u_login / $u_Idle_t.TotalMinutes | + | |
- | tsdiscon / | + | |
- | }ELSE{write-host -ForegroundColor green $Srv : $u_login / $u_Idle_t.TotalMinutes} | + | |
- | + | ||
- | } | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | + | ||
- | \\ | + | |
- | ==== На последок ==== | + | |
Для работы скрипта необходимы права локального администратора на обрабатываемых серверах RDS. | Для работы скрипта необходимы права локального администратора на обрабатываемых серверах RDS. | ||
- | |||
\\ | \\ | ||
---- | ---- | ||
Проверено на следующих конфигурациях: | Проверено на следующих конфигурациях: | ||
- | ^ Версия ОС ^ Версия | + | ^ Версия ОС ^ Версия |
- | | Windwos server 2012R2 | + | | Windows Server 2012 R2 Standard (6.3.9600) |
- | | | + | |
---- | ---- | ||
- | {{: | + | {{: |
- | {{tag> | + | {{tag> |
~~DISCUSSION~~ | ~~DISCUSSION~~ |
microsoft-windows/windows-server-2012-r2/remote-desktop-services/powershell-script-for-quietly-disabling-idle-rds-remote-desktop-sessions-in-windows-server-2012-r2.txt · Последнее изменение: 06.02.2020 09:23 — Дмитрий Исупов