Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Блокировка USB-накопителей и отключение DVD, floppy

Ответить
Настройки темы
CMD/BAT - Блокировка USB-накопителей и отключение DVD, floppy

Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: tarasov.evgeny
Дата: 08-07-2010
Описание: добавил ссылки
Добрый день
Решил вопрос при помощи не стандартных утилит (изначально не установленных в XP)
devcon.exe http://support.microsoft.com/kb/311272/ru
add reg - support tools
psexec.exe http://technet.microsoft.com/ru-ru/s.../bb897553.aspx

Вот команда на блокировку
Код: Выделить весь код
psexec @file.txt reg add HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /t REG_DWORD /v Start /d 4 /f
psexec @file.txt cacls %systemroot%\inf\usbstor.pnf /e /p system:n
psexec @file.txt cacls %systemroot%\inf\usbstor.inf /e /p system:n
psexec @file.txt -c devcon.exe disable ide\cdrom*
psexec @file.txt -c devcon.exe disable fdc*
где @file.txt это текстовый файл в котором столбцом указаны имена компьютеров.
Хочу улучшить файл.
Мне не нравиться, что команда обрабатывается последовательно. Т.е. мы сначала на всех компьютерах выполняем первую строчку, затем переходим ко второй. Выполняем вторую строчку на всех компьютерах переходим...
Хочется, чтобы все команды выполнялись на одном компьютере, затем все команды на втором компьютере и т.д.

Не могу создать нормальный log.file
Добавил после каждой строчки:
> usb.log,
> register.log
> dvd.log
> floppy.log
В результате получаем четыре файла, в которых вообщем-то можно понять, что произошло и где, но не удобно есть лишняя информация. Пример DVD.log:
Код: Выделить весь код
IDE\CDROMOPTIARC_DVD_RW_AD-5200A_________________1.09____\5&2AA92C33&0&0.0.0: Disable
1 device(s) enabled.
IDE\CDROMOPTIARC_DVD_RW_AD-5200A_________________1.05____\5&2AA92C33&0&0.0.0: Disable
1 device(s) enabled.
\\namepc1:
\\namepc2:
А хотелось бы:
Код: Выделить весь код
namepc1 disable
namepc2 disable
Возник вопрос по данной теме. Знаю есть возможность это сделать это через GPO. Но во-первых у меня нет доступа, во-вторых у людей у которых есть доступ сделали два правила:
1. Блокировка - работает
2. Разблокировка - не работает

Отправлено: 14:32, 08-07-2010

 

Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


Для разбора операций в нужном порядке можно использовать команду FOR:

remEx.bat
Код: Выделить весь код
Echo on& Chcp 
set Adcomps="F:\@file.txt"
for /f %%a in ('^<"%Adcomps%" Find /v ""') do (
psexec %%a reg add HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR ^
/t REG_DWORD /v Start /d 4 /f
psexec %%a cacls %systemroot%\inf\usbstor.pnf /e /p system:n
psexec %%a cacls %systemroot%\inf\usbstor.inf /e /p system:n
psexec %%a -c devcon.exe disable ide\cdrom*
psexec %%a -c devcon.exe disable fdc*)

pause>nul & goto :eof
@file.txt
Код: Выделить весь код
\\namepc1
\\namepc2
\\namepc3
\\namepc4
\\namepc5
По поводу log'а:

PSExec возвращает код ошибки исполняемого им приложения, т.е. для вывода
желаемой инфы в лог достаточно отловить ERRORLEVEL и в продолжение команды поставить на него условие, пример:
if errorlevel 9009 (Echo %%a: disabled >> dvd.log ) else Echo Error execute on %%a >> dvd.log.
Или же тем же способом можно "прозвонить" системы на проверку изменений и из полученной инфы составть log.
Соотвественно нужно проверить коды возврата по используемым утилитам...

Последний раз редактировалось deepred, 08-07-2010 в 15:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:24, 08-07-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Думаю надо psexec запускать 1 раз - вызывать им батник, только что раскопированный по списку на компы компании. И вместо "> usb.log" нужно использовать имя компа из того списка.

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:18, 08-07-2010 | #3


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


tarasov.evgeny и NiOl,
Цитата:
Думаю надо psexec запускать 1 раз - вызывать им батник, только что раскопированный по списку на компы компании. И вместо "> usb.log" нужно использовать имя компа из того списка.
Согласен с NiOl, так проще и удобнее, ну и сам *.bat лучше переделать под вызов с параметрами, чтобы иметь возможность исключить команды, ну огранизвать в нем функцию install или settins

и еще по поводу раскопированного batch'a:
когда-то давно пользовался таким приемом (очень давно...), но работало как часы:


Код: Выделить весь код
Echo off && Chcp 866
Set /a "$T=%time:~3,2%+1
Set "$T=%time:~0,3%%$T%  Определение времени запуска

(net view|findstr /b /c:"\\">>c:\comps.txt)&&(for ^
/f %i in (c:\comps.txt) do (at %i %$T% /next: ^
" задача на исполнение "))&(del c:\comps.txt /q)

pause>&&goto :eof
... Видимо перегрелся - забыл про еще одну "отвертку":

- создаем скрипт remtask.vbs под WSH, в который вносим под исполнение все эти команды;
- пишем второй скрипт со следующим содержанием:

Код: Выделить весь код
Set oCtrl = CreateObject("WshController")
Set oScript = oCtrl.CreateScript("disk:\dir1\dir2\remtask.vbs ", "AlladaPC-42") ' AlladaPC-42 - имя PC
WScript.ConnectObject oScript, "Remote_"
oScript.Execute()
IsQuit = False
While Not IsQuit
    Wscript.Sleep 300
Wend
Function Remote_End()
    Wscript.Echo "Операция успешно завершена! The operation completed successfully!"
    IsQuit = True
End Function
Function Remote_Error()
    Wscript.Echo oScript.Error.Description
    IsQuit = True
End Function
Function Remote_Start()
    Wscript.Echo "Выполнение сценария на удалённом PC запущено! Execute the script on a remote PC running!"
End Function
Все выполняется по DCOM протоколу, но есть условия - в реестр удаленного PC нужно внести ключи:
- HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote REG SZ = 1
- HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote REG SZ = 1
- HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings\IgnoreUserSettings REG SZ = 0

- и определить wscript.exe как "внепроцессный" COM-сервер (wscript.exe -regserver)

инфа:
http://msdn.microsoft.com/en-us/libr...0d(VS.85).aspx

Последний раз редактировалось deepred, 08-07-2010 в 18:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:47, 08-07-2010 | #4


Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Спасибо за ответы.
Буду пробовать
Дело в том, что я ушел в отпуск Не хочется сейчас думать
Но вопросы будут. Многое не понятно.

Отправлено: 14:39, 15-07-2010 | #5


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Почитал тему и хотел бы продолжить в части вопросов к уважаемым гуру. Хотелось бы из всего того, что здесь приведено получить приемлемый для себя код. Задача по теме, но с тем условием, что хочется блокировку всего выше перечисленного делать из логон-скрипта, выбирая компьютеры не из файла, а из определённого контейнера AD. Раньше делали это через групповые политики домена с использованием административных шаблонов. Теперь мигрировали свой домен в домен головной организации и утратили права на создание групповых политик с привязкой к своим контейнерам. Но защищаться как-то надо от пользователей. Хочется так же надёжно, как это было раньше с GP в AD. Может есть уже что-то наработанное?

Отправлено: 15:01, 12-12-2010 | #6


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


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

Посему, может проще будет попросить "небожителей" делегировать Вам права на те OU, за которые Вы отвечаете?

* Понимаю, что не спортивно, но без прав Вам будет нелегко админить и дальше

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 20:48, 13-12-2010 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


NiOl, да я б вообще на месте Дмитрия не парился - прав нету, пусть сами всё и делают - ему же меньше работы и ответственности

Отправлено: 09:34, 14-12-2010 | #8


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не изобретайте велосипед.

Adm шаблон для групповой политики

Код: Выделить весь код
CLASS MACHINE
CATEGORY !!category
CATEGORY !!categoryname
POLICY !!policynameusb
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN !!explaintextusb
PART !!labeltextusb DROPDOWNLIST REQUIRED

VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynamecd
KEYNAME "SYSTEM\CurrentControlSet\Services\Cdrom"
EXPLAIN !!explaintextcd
PART !!labeltextcd DROPDOWNLIST REQUIRED

VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 1 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynameflpy
KEYNAME "SYSTEM\CurrentControlSet\Services\Flpydisk"
EXPLAIN !!explaintextflpy
PART !!labeltextflpy DROPDOWNLIST REQUIRED

VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynamels120
KEYNAME "SYSTEM\CurrentControlSet\Services\Sfloppy"
EXPLAIN !!explaintextls120
PART !!labeltextls120 DROPDOWNLIST REQUIRED

VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY

[strings]
category="Custom Policy Settings"
categoryname="Restrict Drives"
policynameusb="Disable USB"
policynamecd="Disable CD-ROM"
policynameflpy="Disable Floppy"
policynamels120="Disable High Capacity Floppy"
explaintextusb="Disables the computers USB ports by disabling the usbstor.sys driver"
explaintextcd="Disables the computers CD-ROM Drive by disabling the cdrom.sys driver"
explaintextflpy="Disables the computers Floppy Drive by disabling the flpydisk.sys driver"
explaintextls120="Disables the computers High Capacity Floppy Drive by disabling the sfloppy.sys driver"
labeltextusb="Disable USB Ports"
labeltextcd="Disable CD-ROM Drive"
labeltextflpy="Disable Floppy Drive"
labeltextls120="Disable High Capacity Floppy Drive"
Enabled="Enabled"
Disabled="Disabled"

Отправлено: 16:25, 15-12-2010 | #9


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата lexit:
Не изобретайте велосипед.
Adm шаблон для групповой политики »
Я писал, что создавать GP в своем контейнере AD мне не разрешает "большой брат".
Спасибо всем за проявленный интерес, но вопрос для меня пока остается открытым. Будут решения, прошу поделиться.

Отправлено: 13:14, 16-12-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Блокировка USB-накопителей и отключение DVD, floppy

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Отключение USB и Floppy через GPO DarkMaximus Microsoft Windows NT/2000/2003 22 24-05-2013 14:04
[решено] Блокировка USB-flash накопителей WChek Программное обеспечение Windows 9 16-07-2012 13:30
Разное - журналирование работы USB накопителей WChek Microsoft Windows 2000/XP 0 15-01-2010 09:33
Интерфейс - Как отрубить автозапуск USB накопителей? Gowdin Microsoft Windows 2000/XP 1 27-07-2008 16:51
Пропала автоматическая установка накопителей USB CoooLLer Microsoft Windows 2000/XP 2 07-06-2007 15:40




 
Переход