Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] logout запуск с usb flash (http://forum.oszone.net/showthread.php?t=230509)

flesh666 16-03-2012 10:03 1880480

logout запуск с usb flash
 
Здравствуйте!
Помогите пожалуйста сделать чтобы когда вставил флэшку срабатывал logout.
Есть разные варианты, с autorun.info не получится. KAV блокирует любые автозапуски.
Может какой-нибудь хитрый способ?

DmitriiV 16-03-2012 11:02 1880506

WMI: подписка на событие подключения накопителя.
Вот только зачем это надо?

flesh666 16-03-2012 16:58 1880770

Есть usb flash с админским паролем, т.е. вставил на странице логинения, зашел под админом.
Но дело в что перед этим нужно выйди из под пользовательской учетки. Вот и хотелось этот процесс автоматизировать...

DmitriiV 16-03-2012 17:09 1880779

Процесс завершения сеанса (logout) автоматизировать? Зачем (какова, так сказать, "стратегическая" цель этой процедуры)?

flesh666 16-03-2012 18:00 1880822

Да, есть у нас топографы и геологи, они уезжают далеко и на долго, постоянно. Админских прав на машины им не дают, т.к. это все плохо кончалось. Дают флэшки начальникам партий с админскими паролями. Сразу оговорюсь, не я это придумал!
Так, вот они не все понимают что нужно выйдти и зайти, вообщем такой народ.

Поставили задачу автоматизировать. Программа для входа есть (rohos), а вот автоматический логаут как сделать не знаю.
Помогите пожалуйста!

Morpheus 16-03-2012 21:58 1880940

  1. Запускаем USBDeview.
  2. Options ---> Advanced Options ---> в первой строчке пишем
    Код:

    "путь\USBCon.cmd" %device_type%
  3. В USBCon.cmd пишем
    Код:

    @Echo Off

    set S=%1
    if "%S:~0,5%" == "Mass" shutdown /l

  4. Закидываем USBDeview в автозагрузку и ставим флажки Options ---> Put Icon On Tray и Options ---> Start USBDeview As Hidden
  5. Наслаждаемся :)
Можно сделать, чтобы срабатывало не на все флешки, а на определённую. Тогда скрипту надо передавать %serial_number%, а в самом скрипте заменить "Mass" на определённый серийный номер.

flesh666 17-03-2012 20:13 1881363

Спасибо большое!
А несколько %serial_number% можно как то сделать?
Т.е. чтобы срабатывал только на 3 флэшки.

Iska 17-03-2012 22:24 1881450

Цитата:

Цитата flesh666
А несколько %serial_number% можно как то сделать? »

Так, как описал Morpheus выше. Например:
читать дальше »


Содержимое «C:\Program Files\USBDeview\USBCon.cmd»:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sParam=%~1
set sSerialNumber=%~2

set sLegalSerialNumbers="ff01ECBB0300FFCF0036" "ff01ECBB0300FFCF00B8" "ff01ECBB0300FFCF00B9"

if defined sParam (
        if defined sSerialNumber (
                if /i "%sParam%" equ "Mass Storage" (
                        for %%i in (%sLegalSerialNumbers%) do if /i "%sSerialNumber%" equ "%%~i" shutdown.exe /l
                )
        )
)

endlocal
exit /b 0

В переменной «sLegalSerialNumbers» перечисляете потребные серийные номера, как они отображаются в «USBDeview».



2Morpheus: мне понравилось.

Morpheus 17-03-2012 22:45 1881468

flesh666, проще всего
Код:

@Echo Off

set S=%1
if "%S%" == "NA000067CPR" shutdown /l
if "%S%" == "19891609801" shutdown /l
if "%S%" == "5969654655" shutdown /l

Наверное, можно сделать красивее, но я не знаю как там "или" воткнуть :)

Iska, опередил :) Отлично! %device_type% можно, наверное, выкинуть.

flesh666 18-03-2012 11:03 1881645

Огромное спасибо!

flesh666 19-03-2012 18:43 1882608

Обнаружилась проблема на Windows 7 x64 срабатывает, но ничего не происходит, в чем может быть дело?

Iska 19-03-2012 20:19 1882676

Цитата:

Цитата flesh666
на Windows 7 x64 срабатывает »

Как определили, что срабатывает?

Цитата:

Цитата flesh666
но ничего не происходит »

Добавьте в конец пакетного файла (перед «exit») «pause» и посмотрите, что не так.

Добавьте вывод переменных:
Код:

echo [%sParam%]
echo [%sSerialNumber%]

дабы убедиться, что они передаются в пакетный файл.

Morpheus 19-03-2012 21:48 1882737

flesh666, у меня именно 7x64 - всё ок. Чей код используете?

flesh666 20-03-2012 05:19 1882971

Iska, использую Ваш код. Определил, т.к. ставил паузу и видел окно скрипта.

Вывод:
[Устройство хранения данных]
[0018f3d974b4eab1a17601dd]

вроде как все верно, но не завершается сеанс, хотя если в cmd написать shutdown /l то все ок.

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sParam=%~1
set sSerialNumber=%~2

set sLegalSerialNumbers="0018f3d974b4eab1a17601dd" "ff01ECBB0300FFCF00B8" "ff01ECBB0300FFCF00B9"

if defined sParam (
        if defined sSerialNumber (
                if /i "%sParam%" equ "Mass Storage" (
                        for %%i in (%sLegalSerialNumbers%) do if /i "%sSerialNumber%" equ "%%~i" shutdown.exe /l
                )
        )
)
echo [%sParam%]
echo [%sSerialNumber%]
endlocal
pause
exit /b 0


Iska 20-03-2012 06:04 1882980

flesh666, Вы добавили в «USBDeview» локализацию — файл «USBDeview_lng.ini». Соответственно, и в пакетном файле поменяйте «Mass Storage» на «Устройство хранения данных» и не забудьте, что он должен быть в кодировке OEM/866.

Либо вовсе избавьтесь от употребления «Device Type» — как советовал выше Morpheus.

flesh666 21-03-2012 06:09 1883710

Избавился от Device Type. Все равно не работает...
Попробовал серийный номера убрать, не работает! А если руками запускать, то срабатывает, чудес :)

Может комп чудит, попробую на другом.

flesh666 21-03-2012 10:11 1883787

На другом компьютере с XP x32 тоже самое.
Срабатывает, но ничего не происходит...

И по моему скрипт срабатывает на любую флэшку, какой бы серийник не был, так и должно быть? Или он запускается всегда, а логаут делает только флэшки с определенным серийником?

Morpheus 21-03-2012 14:30 1883925

Цитата:

Цитата flesh666
Избавился от Device Type. »

Так получилось?


Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSerialNumber=%~1

set sLegalSerialNumbers="ff01ECBB0300FFCF0036" "ff01ECBB0300FFCF00B8" "ff01ECBB0300FFCF00B9"

if defined sSerialNumber (
        for %%i in (%sLegalSerialNumbers%) do if /i "%sSerialNumber%" equ "%%~i" shutdown.exe /l
)

endlocal
exit /b 0


flesh666 22-03-2012 07:19 1884412

Да, все заработало!
Большое Вам спасибо!

voler 18-06-2012 14:32 1936317

Для отработки событий USBDeview должен работать постоянно. Запускаться при запуске windows?

Morpheus 18-06-2012 14:38 1936320

voler, да.
Цитата:

Цитата Morpheus
Закидываем USBDeview в автозагрузку и ставим флажки Options ---> Put Icon On Tray и Options ---> Start USBDeview As Hidden »


saneck 05-03-2013 22:22 2105018

Iska, Morpheus, я оооочень далёк от всего выше написаного, поэтому прошу, объясните пожалуйста, как мне можно добиться следующего: имеется флешка, на ней рабочие документы, те же самые документы хранятся на компьютере. По роду работы документы те что на флешке правятся на других машинах. Вопрос: что можно сделать что бы при подключении флешки к своему компьютеру, папка с документами автоматически синхронизировалась с папкой на компьютере, естественно более старые файлы заменяя на новые и добавляя вновь созданные (там в основном текстовики, Word, Exel, PDF, картинки) ? Спасибо.

Iska 06-03-2013 02:29 2105147

saneck, на других машинах Вы правите документы непосредственно на этом переносном устройстве?

saneck 06-03-2013 14:22 2105474

Цитата:

Цитата Iska
на других машинах Вы правите документы непосредственно на этом переносном устройстве »

совершенно верно

DesmondTruman 27-03-2013 17:41 2120096

Возможно ли такое, чтобы для каждого %serial_number% выполнялось только одно действие в сутки?

Iska 27-03-2013 18:41 2120172

DesmondTruman, теоретически возможно:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sParam=%~1
set sSerialNumber=%~2

for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
set sDate=%sDateTime:~0,8%

if defined sParam (
        if defined sSerialNumber (
                if /i "%sParam%" equ "Mass Storage" (
                        if not exist "%temp%\%sDate%_%sSerialNumber%.txt" (
                                >nul copy nul "%temp%\%sDate%_%sSerialNumber%.txt"
                                rem shutdown.exe /l
                        )
                )
        )
)

endlocal
exit /b 0

Но в чём смысл такого поведения?

Дополнительно ответьте:

* что подразумевается под «в сутки»;
* какое именно действие.

DesmondTruman 27-03-2013 23:54 2120374

Iska, Спасибо!
А смысл в том чтобы не копировать данные с большим объёмом повторно расчитанные на текущий рабочий день.
Под "в сутки" я подразумевал обычный ориентир по дате, без каких либо "с момента запуска" и "строго 24 часа" :)
Действие, в данном случае, как Вы наверное уже поняли из выше написанного - копирование.
А вообще програмка классная, даёт расширенные возможности. Еще раз спасибо!


"wmic.exe OS get LocalDateTime", а почему вы не доверяете %date% ? :)
Изначально думал сверить всё в одном файл и только шас допёр. Как альтернатива
читать дальше »
@echo off
set "sParam=%~1"
set "sSerialNumber=%~2"
if /i not "%sParam%"=="Mass Storage" goto :end
for /f "usebackq tokens=*" %%a in ("%temp%\test.txt") do if /i "%%a"=="%sSerialNumber% %date%" goto :end
echo %sSerialNumber% %date%>> "%temp%\test.txt"
msg * command is run
exit
:end
msg * command is not running
exit

Правильна ли логика и синтаксис? :)

Iska 28-03-2013 00:19 2120398

Цитата:

Цитата DesmondTruman
"wmic.exe OS get LocalDateTime", а почему вы не доверяете %date% ? »

Есть желание не зависеть от формата даты/времени.

Цитата:

Цитата DesmondTruman
Как альтернатива »

Всё равно нужно будет периодически подчищать ;).

Цитата:

Цитата DesmondTruman
Правильна ли логика и синтаксис? »

Нормально. Можно просто «goto :eof» или «exit» — сообщения ведь не нужны по сути:
Код:

… goto :eof
echo %sSerialNumber% %date%>> "%temp%\test.txt"
msg * command is run



Время: 06:41.

Время: 06:41.
© OSzone.net 2001-