Написание батников/сценариев (cmd). Скрипты cmd


Скрипты для CMD

Моя попытка навести порядок и унификацию при подключении сетевых дисков в AD.

Возможна работа как через индивидуальные групповые политики, так и через политику AD по-умолчанию.

Идея состоит в следующем: храним описание вариантов подключений в текстовых файлах, с указанием группы для которой это работает, и анализируем при запуске грeппы конкретного пользователя с использованием dsget и dsquery.

Структура хранимых описаний такова: групповые и общедоменные назначачения хранятся в едином файле расположенном в корне NETLOGON(возможны варианты), а пользовательские назначения располагаются в папках с пользовательским именем входа  в систему.Также в отдельных файлах храним описание запускаемых скриптов для групп и пользователей.

Цель - получить прозрачный и универсальный алгоритм входа в систему единый как для обычного входа, так и для терминального, без черезмерного усложнения групповых политик.

Структура решения:\dsget.exe - файл из RK для получения списка групп пользователя\dsquery.dll- файл из RK для получения списка групп пользователя\dsquery.exe- файл из RK для получения списка групп пользователя\logon.cmd - собственно тело скрипта\logon.vbs - костыль для запуска без отображения окна консоли - именно он должен быть назначен в качестве логон скрипта\rs_list.txt - список групповых и общедоменных назначений подключаемых дисков с указанием группы\sc_list.txt - список групповых и общедоменных назначений выполняемых скриптов с указанием группы\_SCRIPT\ - папка с групповыми и общедоменными скриптами\_SCRIPT\1C.cmd - пример скрипта\USER1\rs_list.txt- список назначений подключаемых дисков для конкретного пользователя(без указания группы)\USER1\sc_list.txt- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)\USER2\rs_list.txtсписок назначений подключаемых дисков для конкретного пользователя(без указания группы)\USER2\sc_list.txt- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)Прикрепляю файл с телом скрипта и тестовой структурой.

Приветствуются пожелания по доработке ;)Добавил ключ рекурсивного анализа вхождения в группы.

И на всякий случай тело скрипта в текстовом виде:

@ECHO OFF :: Буквы дисков зарезервированные под пользовательские сетевые подключения SET "EXLUDE_LETTER=D: E: F: J: H: I: J:" "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof |findstr /I /C:"CN=Domain Users,"&&( :: Удаление текущих сетевых подключений FOR /F "usebackq tokens=2 delims= " %%a IN (`net use^|find ":"^|find "\\"^|FINDSTR /V /I "%EXLUDE_LETTER%"`) DO ( 1>NUL 2>&1 NET USE /DELETE %%a) :: Добавление групповых сетевых подключений IF EXIST "%~dp0rs_list.txt" ( FOR /F "usebackq tokens=1,2,3 eol=; delims=|" %%a IN (`TYPE "%~dp0rs_list.txt"^|FIND "\\"`) DO ( "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~c,"&&( 1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO))) :: Выполнение групповых скриптов IF EXIST "%~dp0sc_list.txt" ( FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0sc_list.txt"^|FINDSTR /I ".cmd .bat"`) DO ( "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~b,"&&( IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a"))) :: Добавление пользовательских сетевых подключений IF EXIST "%~dp0%USERNAME%\rs_list.txt" ( FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%\rs_list.txt"^|FIND "\\"`) DO ( 1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO)) :: Выполнение пользовательских скриптов IF EXIST "%~dp0%USERNAME%\sc_list.txt" ( FOR /F "usebackq tokens=1 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%\sc_list.txt"^|FIND /I ".cmd"`) DO ( IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a")) ) EXIT 0

www.winpe.ru

Написание Bat скриптов своими руками

Всем нам, приходилось сталкиваться с рутинными задачами изо дня в день на работе, и не только.

Например:

  1. Необходимо раз в месяц удалять все файлы из папки обмен.
  2. «Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.
  3. У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

Можно еще привести множество примеров обыкновенных задач, на которые лучше не тратить свое время, а автоматизировать процесс. Сегодня хочу рассказать, как пишутся элементарные bat скрипты.

Давайте разберем первый пример:

Необходимо раз в месяц удалять все файлы из папки обмен.

  1. Открываем WordPad, блокнот не подойдет, он не умеет сохранять в кодировке 866.
  2. Пишем:

del /q «c:\обмен\»

pause

Команда del- удаляет файлы, ключ q говорит, удалять файлы без подтверждения пользователя, дальше идет путь до папки обмен, команда pause — это для вашего удобства, что бы окно не закрылось автоматически после выполнения работы скрипта, можно её не писать.

  1. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, del_obmen.bat, жмем Ок, запускаем и наслаждаемся.

Второй пример:

«Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.

  1. Открываем WordPad.
  2. Пишем:

SHUTDOWN /s

Пояснения я думаю ни к чему.

3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, shutdown.bat, жмем Ок, запускаем и наслаждаемся.

4. Дальше открываем панель управления => планировщик заданий, создаем задание в 20 00, думаю понятно для чего.

Третий пример:

У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

  1. Открываем WordPad.
  2. Пишем:

start \\192.168.0.37\SamsungU

Start — запуск, \\192.168.0.37 — ip адрес, \SamsungU — имя принтера.

Если у вас ip адреса раздаются по DHCP, то лучше ввести не ip адрес, а имя компьютера. 

3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, print.bat, жмем Ок, запускаем и наслаждаемся.

Создание bat Файла своими руками

http://youtu.be/IXeS2IOVUZ4

27sysday.ru

Мои пакетные скрипты для Windows (*.cmd, *.bat) • Просто другой сайт...

Что-бы автоматизировать монотонную работу в windows удобно писать небольшие пакетные файл. Синтаксис этих скриптов достаточно прост, а его функционала достаточно для большинства типичных задач.

Основы этого языка программирования обьяснять не буду, приведу лишь пару примеров нестандартных решений:

• Как сделать паузу в командном файле?Данный код задержит выполнение скрипта на 4 секунды

ping 127.0.0.1 -n 4 > nul

• Как вывести текст в одну строку (без переносов на новую)?

<nul set /p strTemp=Весь этот текст<nul set /p strTemp=будет находиться<nul set /p strTemp=на одной строке.

• Как прочесть строку из реестра?

@Echo OffSetLocal EnableExtensions EnableDelayEdexpansion

For /F "Tokens=2* Delims=  " %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Shell"') Do Set Shell1=%%JEcho Shell=[%Shell1%]

endlocal

 

 

Мои скрипты:

 

• Скрипт для подключения к интернету через 3G модем или dialupПозволяет отказаться от громоздкой программы, идущей в комплекте. Разве что ради проверки баланса придется залезать в родную программу. 

@echo off

SET ITERAT=1:loopecho Установка связи (%ITERAT%/20)SET /A ITERAT=%ITERAT%+1rasdial life:) >nul

if %ERRORLEVEL%==0 (echo Успешно!goto end_of_error)if %ERRORLEVEL%==619 (echo Ошибка! Может нет денег на балансе?goto end_of_error)if %ERRORLEVEL%==734 (echo Ошибка! Удаленный комп отказал.goto end_of_error)if %ERRORLEVEL%==720 (echo Ошибка! Удаленный комп не отвечает.goto end_of_error)if %ERRORLEVEL%==797 (echo Ошибка! Модем не найден или занят.goto end_of_error)echo Ошибка с кодом %ERRORLEVEL%:end_of_error

if %ITERAT% GTR 20 (Echo Выходм...ping 127.0.0.1 -n 6 > nulgoto EOF)

if %ERRORLEVEL% GTR 0 (ping 127.0.0.1 -n 3 > nulgoto loop)

echo Запуск HandyCachestart HandyCache.lnkEcho Выходм...ping 127.0.0.1 -n 4 > nul

 

 

• Стирание содержимого всех файлов по маске в папке со скриптомПредставляете, по работе нужно было. Скриптом куда проще чем ручками.

@echo off

For %%I In ("0*.txt") Do (del "%%~I"ping 127.0.0.1 -n 1 > nul@echo.>"%%~I")

 

• Проверка авторагрузкиСкрипт проверяет четыре злачных метста, в которых любят прописываться вирус для автозапуска при старте системы. Скрипт не раз выручал при лечении чужих копьютеров.

@Echo Offecho Проверка автозагрузки:echo.SetLocal EnableExtensions EnableDelayEdexpansion

REM Shell - подменой файла или указанием ссылки на другой файл можно обеспечить запускFor /F "Tokens=2* Delims=  " %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Shell"') Do Set Shell1=%%J<nul set /p strTemp=Shell        = [%Shell1%]If "%Shell1%"=="explorer.exe" (echo  - Ok) else (echo  - Обратить внимание)

REM Userinit - подменой файла или указанием ссылки на другой файл можно обеспечить запускFor /F "Tokens=2* Delims=  " %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Userinit"') Do Set Userinit1=%%J<nul set /p strTemp=Userinit     = [%Userinit1%]If "%Userinit1%"=="C:\WINDOWS\system32\userinit.exe," (echo  - Ok) else (echo  - Обратить внимание)

REM load - список загрузки при старте системыFor /F "Tokens=2* Delims=  " %%I In ('Reg Query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /V "load"') Do Set load1=%%J<nul set /p strTemp=load         = [%load1%]If "%load1%"=="" (echo  - Ok) else (echo  - Обратить внимание)

REM AppInit_DLLs - позволяет запускать DLL при старти системыFor /F "Tokens=2* Delims=  " %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /V "AppInit_DLLs"') Do Set AppInit_DLLs1=%%J<nul set /p strTemp=AppInit_DLLs = [%AppInit_DLLs1%]If "%AppInit_DLLs1%"=="" (echo  - Ok) else (echo  - Обратить внимание)

endlocal

echo.echo Проверка размеров файлов:echo.

Call :ChkSize "%WINDIR%\explorer.exe" 1034240Call :ChkSize "%WINDIR%\system32\userinit.exe" 26624

echo.echo.echo.echo Завершеноpause > nulGoTo :EOF

rem ===============================================:ChkSize  If "%~z1"=="%2" (    echo %~nx1 - ok  ) else (    echo %~nx1 - подозрителен  )GoTo :EOF

 

------ Другие статьи по теме  ------

  1. Уменьшение всех фотографий в папке на 50%

 

------ Чужое ------

libType(форум / скачать) - Просто гениальный скрипт, расширяющий возможности echo. Поддерживает дописывание строк, вывод поверх строки, стирание строки, эффект печатной машинки и др. Обязательно посмотрите демо! (Не работает на Win7)

drugoy.net

Возможна ли пошаговая отладка скриптов BAT CMD

Вопрос: Автоматизация администрирования. Скрипты на KIX

На форуме есть совершенно замечательная ветка "Автоматизация администрирования"   Эта ветка преследует те же цели, что и вышеназванная, но посвящена скриптам на одном конкретном скриптовом языке - KIX Script и всему, что с ним связано.   Почему я решил выделить этот язык в отдельную ветку? Очень просто. Если скрипт пишется на VBScript или JScript, или используются WHS, WMI или ADSI, то готовый код легко перевести c одного скриптового языка на другой. Если же скрипт написан на KIX, то часто этот код может быть совершенно бесполезен тем, кто пишет на других языках. Кроме того, на форуме достаточно часто возникают вопросы по использованию именно этого языка, но, со временем они просто теряются в отдельных ветках.   Итак, что такое KIX Script? Это скриптовой язык, который специально разработан для быстрого и удобного написания логонных скриптов.    quote: KiXtart is a logon script processor and enhanced batch scripting language for computers running Windows Server 2003, Windows XP, Windows 2000, Windows NT or Windows 9x in a Windows Networking environment.   Это не говорит об том, что его нельзя использовать для других целей, кроме логон скриптов. Можно, однако именно в этом применении он максимально удобен по сравнению с другими языками. В чем именно состоит его удобство: 1. Скрипт не требует инсталляции на клиентских машинах. Достаточно разместить файлы на домен контроллере и, если есть Windows 9X клиенты, запустить на них один сервис. И это вариант будет работать для всех Windows, начиная с 95-го. 2. В самом языке в виде макросов или функций реализованы большинство вещей, которые требуются именно для логон скрипта. Взять имя пользователя или наименование компьютера, используемая ОС или проверка на членство юсера в группах - все это легко решается использованием с помощью одной команды.   Один из аргументов, которые мне приводили против использования этого языка - достаточно малоизвестен, большинство примеров написаны на VBS или JS. Да, это так. Однако большинство примеров, которые приведены на указанных языках, очень просто переводятся на KIX, более того, многие вещи на самом KIX решаются гораздо проще. Что касается использования WHS, WMI или ADSI или другие COM обьектов, то они вообще мало зависят от конкретного языка и их использование практически одинаково на любых языках.   Два основных сайта  

 На первом сайте на первой же странице можно скачать последний релиз KiXtart 4.23   released: 31-Dec-2004. Если собираетесь использовать KIX или уже используете скачайте оттуда же HTML Help File 4.22.  В ближайшие дни я собираюсь разместить в этой ветке заметки по написанию скриптов, собирающие логи с компьютера и несколько готовых скриптов, один из которых, сбор информации из реестра для анализа веток автозапуска и установленных программ, я пообещал где-то в соседней ветке.  PS. Эта ветка предназначена для скриптов на конкретном языке, KIX-e. Вопросы по другим языкам или общие вопросы по скриптам - просьба в ветку "Автоматизация администрирования"

Ответ: VLkin В новой версии 4.50rc1 (пока не релиз, но глюков не замечал) можно сохранить скрипт в промежуточном коде (с расширением .kx). Хотя страно, на современных компьютерах и медлено выполняются?

forundex.ru