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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Блокировка USB-накопителей и отключение DVD, floppy (http://forum.oszone.net/showthread.php?t=180134)

tarasov.evgeny 08-07-2010 14:32 1449671

Блокировка USB-накопителей и отключение DVD, floppy
 
Добрый день
Решил вопрос при помощи не стандартных утилит (изначально не установленных в 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. Разблокировка - не работает :)

deepred 08-07-2010 15:24 1449710

Для разбора операций в нужном порядке можно использовать команду 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.
Соотвественно нужно проверить коды возврата по используемым утилитам...

NiOl 08-07-2010 16:18 1449744

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

deepred 08-07-2010 17:47 1449806

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

tarasov.evgeny 15-07-2010 14:39 1453853

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

Dmitry S. 12-12-2010 15:01 1564026

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

NiOl 13-12-2010 20:48 1565074

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

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

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

Busla 14-12-2010 09:34 1565381

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

lexit 15-12-2010 16:25 1566533

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

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"


Dmitry S. 16-12-2010 13:14 1567178

Цитата:

Цитата lexit
Не изобретайте велосипед.
Adm шаблон для групповой политики »

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


Время: 04:08.

Время: 04:08.
© OSzone.net 2001-