Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


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 ограничивающий время бездействия пользователей в ударенной сессии.+{{:microsoft-windows:windows-server-2012-r2:remote-desktop-services:pasted:20180905-105100.png }} После достижения лимита простоя сессии пользователя Служб удалённых рабочих столов **Remote Desktop Services** (**RDS**) в **Windows Server** система выводит на экран предупреждение о истечении лимита. После чего у пользователя нет выбора, остается только нажать кнопку "ОК", что приводит к сбросу счетчика простоя. В результате сессия пользователя продолжает работать и занимать ресурсы сервера RDS. В RDS на **Windows Server 2012 R2** данное сообщение всплывает на весь горизонт экрана, что приводит к стрессовым ситуациям у неподготовленных пользователей.
  
-\\ +В качестве альтернативы штатному механизму оповещения в простаивающей сессии можно использовать PowerShell-скрипткоторый будет выполнять __отключение__ простаивающих сессий __без вывода всплывающего предупреждения__.
-==== Мотив ==== +
- +
-После достижения лимита простоя, сессии пользователя MS RDS выводит на экран предупреждение о истечении лимита. +
-После чего у пользователя нет выбора, остается только нажать кнопку "ОК", что приводит к сбросу счетчика простоя.  +
-В результате чего сессия пользователя продолжает работать и занимать ресурсы ОС сервера RDS. +
- +
-У RDS на Windows Server 2012 данное сообщение всплывает на весь горизонт экрана, что приводит к стрессовым ситуациям у неподготовленных пользователей. +
- +
-\\ +
-==== Решение ==== +
- +
-Написать скрипт который будет заменять функцию __отключения простаивающих__ сессий RDS без предупреждения. +
- +
-\\ +
-==== Реализация ====+
  
-<code powershell>+<file powershell Quietly-Disabling-Idle-RDS-sessions.ps1>
 #Путь к списку серверов RDS в формате txt #Путь к списку серверов RDS в формате txt
 $path_list_srv = "c:\mylistservers.txt" $path_list_srv = "c:\mylistservers.txt"
- 
 #Установка лимита простоя в минутах #Установка лимита простоя в минутах
 $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){+foreach($Srv in $Servers){
  
-#Получаем данные с сервера RDS о сессиях  +    #Получаем данные с сервера RDS о сессиях  
-$List_i = $Null +    $List_i = $Null 
-$List_i =  quser /server:$Srv+    $List_i =  quser /server:$Srv
  
-#Обработка данных сессий +    #Обработка данных сессий 
-      foreach ($i in $List_i){ +    foreach ($i in $List_i){ 
-Get-Variable -Name "u_*" | Clear-Variable+ Get-Variable -Name "u_*" | Clear-Variable 
 + $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 = ($-split " " | ?{$_})[0] + #Преобразование idle time в временной формат 
-$u_session = ($-split " " | ?{$_})[1+ if ($u_Idle_t -ne $Null){ 
-$u_Idle_t = ($i -split " | ?{$_})[4]+   $u_Idle_t $u_Idle_t -replace "\+",":" -replace "\.","0:0" -replace "Disc","0:0" 
 +   if($u_Idle_t -like "*:*"){ 
 +     $u_Idle_t = [timespan]"$($u_Idle_t)" 
 +     }elseif($u_Idle_t -eq ".-or $u_Idle_t -eq "none")
 +     $u_Idle_t = [timespan]"0:0" 
 +     }else{ 
 +     $u_Idle_t = [timespan]"0:$($u_Idle_t)" 
 +   } 
 +   #Редко RDS выдает неверное idle time для активной сессии, оно превышает 1000 дней 
 +   if ( [int]$u_Idle_t.Days -gt 1000){$u_Idle_t = New-TimeSpan} 
 + }
  
-#Преобразование idle time в временной формат + #Если idle time превышает заданный интервал то сессия отключается 
-if ($u_Idle_t -ne $Null){ +  if ([int]$u_Idle_t.TotalMinutes -ge $Idle_minutes){ 
- $u_Idle_t = $u_Idle_t -replace "\+",":" -replace "\.","0:0" -replace "Disc","0:0" +   write-host -ForegroundColor yellow $Srv : $u_login / $u_Idle_t.TotalMinutes 
-  if($u_Idle_t -like "*:*"){ +   tsdiscon /SERVER:$Srv $u_session 
-   $u_Idle_t = [timespan]"$($u_Idle_t)" +   }ELSE{write-host -ForegroundColor green $Srv : $u_login / $u_Idle_t.TotalMinutes}
-  }elseif($u_Idle_t -eq "." -or $u_Idle_t -eq "none"){ +
-   $u_Idle_t = [timespan]"0:0" +
-  }else{ +
-   $u_Idle_t = [timespan]"0:$($u_Idle_t)" +
-+
- +
-#Редко RDS выдает неверное idle time для активной сессии, оно превышает 1000 минут +
-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 /SERVER:$Srv $u_session +
-  }ELSE{write-host -ForegroundColor green $Srv : $u_login / $u_Idle_t.TotalMinutes} +
- +
-      } +
-            } +
-</code> +
- +
- +
- +
-\\ +
-==== На последок ====+
  
 Для работы скрипта необходимы права локального администратора на обрабатываемых серверах RDS. Для работы скрипта необходимы права локального администратора на обрабатываемых серверах RDS.
- 
  
 \\ \\
 ---- ----
 Проверено на следующих конфигурациях: Проверено на следующих конфигурациях:
-^ Версия ОС              ^ Версия ПО         +^ Версия ОС              ^ Версия служб RDS ^ Версия Powershell 
-Windwos server 2012R2  | RDS 5.1           | +Windows Server 2012 R2 Standard (6.3.9600)   RDS 5.1   PowerShell 4.0  |
-|                        | PowerShell 4.0  |+
  
 ---- ----
-{{:user:disupov.png?50&nolink |}} Автор первичной редакции:\\ [[user:disupov|Дмитрий Исупов]] \\ Время публикации: 28.05.2018 18:44+{{:user:disupov.png?50&nolink |}} Автор первичной редакции:\\ [[user:disupov|Дмитрий Исупов]] \\ Время публикации: 05.09.2018 10:00
  
-{{tag>PowerShell "Windows Server 2012 R2" Script  "RDS"Remote Desktop"  }}+{{tag>PowerShell Script "Windows Server" "Windows Server 2012 R2" RDS "Remote Desktop Services"}}
  
 ~~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.1531464958.txt.gz · Последнее изменение: 13.07.2018 09:55 — Дмитрий Исупов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki