1

Тема: WSH: скрипт, убивающий сессии пользователей терминального сервера

Начальство поставило задачу: "создать скрипт убивающий сессии пользователей терминального сервера при простоях больше суток. подумать над методом его применения - он должен затрагивать сессии пользователей, но админские и программистские сессии должны жить так как в них могут быть запущены длительные задачи".

Собственно, идея следующая. Написать скрипт, который в шедулере будет запускаться каждый день, проверять все сессии и те, которые висят больше суток - либо прибивать, либо правильно завершать, не суть.
На cmd нашел много всяких решений по управлению терминальными сессиями, но выуживать разбором время простоя как-то совсем нет желания... В WMI копал в сторону классов Win32_Terminal (и подобных), но время простоя не нашел.
Идея использовать VBS хороша тем, что надо проверять учетку на привилегированность (админская ли учетка), и с этим проблем нет. А вот к самой сути - определение какая сессия в каком простое и ее убийство - даже и не знаю как подступиться.

2

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Вот тут цикл статей про скрипты для терминального сервера http://www.virtualizationadmin.com/arti … part1.html

3

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

а причем тут скрипты - админу задача настроить гп

Я конечно далек от мысли... (с)

4

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

dsb, спасибо. Правда там половины статей уже нет, и все на cmd...

smaharbA, а есть где такое настроить в ГП?

5 (изменено: BeS Yara, 2012-01-11 16:59:15)

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

holydiver, на сервере в свойствах пользователя есть закладка "Сеансы", где настраивается поведение при простое сеанса.
__________________
Управление службами терминалов из командной строки.
Администрирование терминального сервера, раздел "Настройка свойств пользователей через интерфейсы Active Directory Service" содержит пример настройки пользователя через AD средствами VBScript(не проверял).

6

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

smaharbA пишет:

а причем тут скрипты - админу задача настроить гп

Это, по-моему не GP, а просто настройки самого TS и эти настройки глобальные, насколько я помню, а человеку нужно админовские задачи оставлять...

7

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

это есть и глобально и по подразделениям (если АД, и если не АД можно хоть поголовно настроить)

Я конечно далек от мысли... (с)

8

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Как я понял, что решение лишь в том, чтобы изначально все настроить как надо, а в процессе в автоматическом режиме (из vbs того же) управлять никак...
Спасибо за советы, буду копать ГП.

9

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

можно и управлять, есть простая команда (утилита) logoff

Я конечно далек от мысли... (с)

10

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Мужики, а существует ли в WMI аналог утилит query или qwinsta?

Нас невозможно сбить с пути, нам пофигу куда идти.

11

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Но кеширование даст обманки

var x = GetObject ( "winmgmts://./root/cimv2" )

var e = new Enumerator ( x.ExecQuery( "SELECT * FROM Win32_LogonSession where logonType=10" ) );

for ( ; !e.atEnd(); e.moveNext() )
{
    var ee = new Enumerator ( x.ExecQuery( "ASSOCIATORS OF {Win32_LogonSession.LogonId='" + e.item().LogonId + "'} WHERE ResultClass=Win32_UserAccount" ) );
    for ( ; !ee.atEnd(); ee.moveNext() )
    {
        var p = new Enumerator ( ee.item().Properties_ );
        for ( var s = ""; !p.atEnd(); p.moveNext() )
        {
            s += p.item().Name + " = " + p.item().Value + "\n";
        }
        WScript.Echo ( s );
    }
}
Я конечно далек от мысли... (с)

12

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Спасибо, то что надо.

smaharbA пишет:

Но кеширование даст обманки

Как избегать?

Нас невозможно сбить с пути, нам пофигу куда идти.

13

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

Как то так, но может есть и поумнее метод, да и пространство вми для рдп связанное с сесиями может есть, не интересовался (реализуется на апи вполне с оберткой)

var x = GetObject ( "winmgmts://./root/cimv2" )

var e = new Enumerator ( x.ExecQuery( "SELECT * FROM Win32_LogonSession where LogonType=10" ) );

for ( ; !e.atEnd(); e.moveNext() )
{
    if ( !new Enumerator ( x.ExecQuery( "ASSOCIATORS OF {Win32_LogonSession.LogonId='" + e.item().LogonId + "'} WHERE AssocClass=Win32_SessionProcess Role=Antecedent" ) ).atEnd() )
        continue;
    var ee = new Enumerator ( x.ExecQuery( "ASSOCIATORS OF {Win32_LogonSession.LogonId='" + e.item().LogonId + "'} WHERE ResultClass=Win32_UserAccount" ) );
    for ( ; !ee.atEnd(); ee.moveNext() )
    {
        WScript.Echo ( ee.item().Name );
        var p = new Enumerator ( ee.item().Properties_ );
        for ( var s = ""; !p.atEnd(); p.moveNext() )
        {
            s += p.item().Name + " = " + p.item().Value + "\n";
        }
        WScript.Echo ( s );
    }
}
Я конечно далек от мысли... (с)

14 (изменено: im2002, 2013-06-03 17:18:24)

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

так есть какое решение для сброса терминальной сессии посредством WSH, без использования утилиты qwinsta???
мне  решение также очень интересно, даже в более простом варианте: надо сбросить терминальную сессию, имя пользователя в сессии - известно, если под этим пользователем "висит" несколько сессий  - пусть все умирают!
в сторону какого wmi-класса копать хотя бы, если через wmi?

15

Re: WSH: скрипт, убивающий сессии пользователей терминального сервера

wmic path win32_process where sessionid=10 call terminate

Я конечно далек от мысли... (с)