Автоматизированный Logoff всех пользователей с терминального сервера
Как сделать logoff забывчивых пользователей с терминального сервера в нужное время?
Долго думал каким таким простым образом можно сделать массовый logoff пользователей с терминального сервера после рабочего времени, при этом некоторых пользователей (к примеру себя) с терминала не выгонять?! Первое, что взбрело в голову, сделать групповую политику которая все за тебя сделает, покапался в настройках - такая штуковина существует, но она умеет выгонять только по таймеру, т.е. через промежуток времени (1,2 и т.д. часа), а не в указанное время. Это не всегда подходит т.к. персонал начинает работать не всегда в одно и тоже время, да и может кто то работать больше чем 8-9 часов в день. Долго бился с этой задачей, пока снова не спасла (всесильная) командная строка и несколько строк кода скрипта. Скрипт 100% работает на Windows Server 2008 R2 x64 (устанавливать дополнительно ничего не надо, все работает через штатные средства). Вот такую коду набросал:
1 2 3 4 5 6 7 8 9 10 |
@echo off rem запись информации о всех сессиях RDP в файл quser > session.txt rem Убираем тех пользователей которых не нужны выкидывать findstr /V "USER_NAME" session.txt > sessionTMP.txt rem Делаем logoff всех остальных rdp сессий for /f "skip=1 tokens=2," %%i in (sessionTMP.txt) DO logoff %%i rem удаляем временные файлы del session.txt del sessionTMP.txt |
Молодца!
Это скрипт или можно просто в батник запихнуть и на планировщик поставить?
да. пихаем в батник и запихиваем в планировщик.
спасибо попробуем =) а то и правда некоторые забывчивые не выходят правильно и обновления корректно не сделать! еще раз спасибо!
Привет, а как 2 юзаков не выгонять, есть к примеру админ и админ2, как это будет выглядеть?
Приветствую, можно попробовать на файл sessionTMP.txt еще раз накинуть эту строчку
findstr /V «USER_NAME» sessionTMP.txt > sessionTMP2.txt и потом уже выгонять
for /f «skip=1 tokens=2,» %%i in (sessionTMP2.txt) DO logoff %%i ну и
del session.txt
del sessionTMP.txt
del sessionTMP2.txt
громоздко получается, но работать должно
если нужно два и более то используем ключ /C:
findstr /V /C:USER_NAME1 /C:USER_NAME2 session.txt > sessionTMP.txt
можно сделать без использования временных файлов
for /F «skip=1 tokens=2» %%i in (‘quser ^| findstr /V «user1 user2″‘) do logoff %%i
Можете помочь, пытаюсь выполнить скрипт, но мне выдается следующая ошибка:
C:\Users\usr1\Desktop\logoff> for /f «skip=1 tokens=2,» %%i in (sessionTMP.txt) DO logoff %%i
строка:1 знак:4
+ for /f «skip=1 tokens=2,» %%i in (sessionTMP.txt) DO logoff %%i
+ ~
Отсутствует открывающий знак «(» после ключевого слова «for».
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword
Возможно проблема с кодировкой файла.
@sk132
Супер! Спасибо!