PDA

Показать полную графическую версию : "Прибить" сеанс


ultrakiller
17-03-2010, 15:58
Есть такая проблема: некоторый файл на сервере постоянно обновляется некоторым пользователям. Этот файл используют очень часто и у некоторых нехорошая привычка оставлять открытым этот файл. Естественно этот сеанс висит, и перезаписать файл невозможно. Каждый раз убивать руками сеанс немного надоело.. Как это можно сделать или батником или как вообще это реализовать

Michael
17-03-2010, 21:20
Посмотрите команду net files - http://support.microsoft.com/kb/290585 (правда прибивает все открытые файлы) и openfiles /disconnect
P.S. Есть еще один вариант, направленные на приучение к закрытию файла, но он довольно таки жесткий - TASKKILL /S комп_забывчивого_сотрудника /IM имя_приложения_открывающего_файл, жесткий потому, что если в
том приложении открыты еще файлы, отредактированны и не сохранены, то сохраненными им уже не быть

Angry Demon
18-03-2010, 10:30
Как это можно сделать или батником или как вообще это реализовать
unlocker (http://myunlocker.ru/) может управляться и снимать блокровку из командной строки.

ultrakiller
18-03-2010, 12:41
unlocker может управляться и снимать блокровку из командной строки. »
А как хорошо это работает в Windows server r2 (x64).
в Faq написано:

Работает ли Unlocker с Windows XP 64 или Vista 64? Нет. Однако автор активно работает над этим вопросом.

Посмотрите команду net files »
Команда хороша, но когда открыт файл у нескольких людей (а машина КД), прибить все - это равносильно самоубийству.
Там очень длинные id, у меня получается что почти еже ежесекундно открыто больше 100 сессий :(.

openfiles /disconnect »
Это мне понравилось, в принципе удобно:
openfiles /disconnect /OP "d:\Share\test.pdf" /a *

for /f "tokens=2,7 delims=," %%a in ('openfiles /query /v /fo csv /nh') do @if /I "%%~b" == "d:\share\test.pdf" net file %%~a /close

TASKKILL /S »
Это очень жестоко

Michael
19-03-2010, 00:13
Цитата Michael:
TASKKILL /S »
Это очень жестоко »
Не, на самом деле очень жесто было бы использовать
shutdown /r /m \\PC_Name /t 000
:)

Есть еще один вариант.
Убираете файл test.pdf с шары вообще, например в папку d:\NO_share\test.pdf, а вместо него кладете cmd-скрипт с именем"Открыть файл test.pdf", в котором прописываете

echo off
xcopy /y \\Server\D$\No_share\test.pdf %temp%
start %temp%\test.pdf

В итоге вы получаете файл, который почти всегда свободен

ultrakiller
22-03-2010, 12:17
Есть маленькое но, этот файл обновляю не я, а человек не имеющих админских прав для D$. В его шаре для публикаций...
Но вообще гут...

Michael
22-03-2010, 18:53
файл обновляю не я, а человек не имеющих админских прав для D$ »
Хорошо.
Пусть требуемый файл test.pdf лежит в корне сетевого диска Z:\, читать его будет пользователь (или группа пользователей) dostup.
Создаем в корне диска Z:\ папку No_Share, в ней - подпапку File, в папке File будет храниться и обновляться test.pdf.
Пропишем права следующим образом:
- папка No_Share
-- пользователь dostup - явный полный запрет, остальные пользователи (или группы пользователей) - на ваше усмотрение (не забудьте про пользователя, обновляющего файл)
- папка File
-- удаляете явный запрет и прописываете разрешение на чтение для пользователя dostup (вот тут у меня у самого возник вопрос - вроде как у запрета приоритет выше чем у разрешения, но при этом просто добавив полный доступ к папке File, не удаляя полный запрет, у меня почему-то все заработало).
В корень диска Z:\ добавляете cmd-файл

echo off
copy /y no_share\file\test.pdf %temp%
start %temp%\test.pdf

В итоге пользователи запустив этот батник получат требуемый файл, но при этом не могут войти в папку No_Share и занять файл test.pdf (хотя конечно особо прошаренные это смогут сделать, но зачем им это), а вы получаете практически всегда свободный для обновления файл




© OSzone.net 2001-2012