Скрипты для консоли windows

Скрипты для CMD

Скрипты выполняемые интерпретатором CMD.EXE — стандартной консольной оболочкой для Win2000/WinXP/Vista/Seven/Win8/Win2000 Server/Win2003/Win2008.
Иначе говоря — пакетники. Иногда еще их(не вполне оправданно) называют батниками, но классический батник использует возможности обеспечиваемые оболочкой предыдущих систем COMMAND.COM, возможности которого существенно меньше.

  • Блог пользователя yurkesha
  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

Выключение компьютеров в домене по списку

  • Блог пользователя yurkesha
  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

Единый логон-скрипт для AD

Моя попытка навести порядок и унификацию при подключении сетевых дисков в 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- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)
Прикрепляю файл с телом скрипта и тестовой структурой.

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

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

  • Блог пользователя yurkesha
  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

Интерпретатор CMD — вывод переменных со спецсимволами на экран и в файл

Известная, но слабоосвещенная тема — обработка в коммандном интерпретаторе CMD данных со спецсимволами.
В большинстве ситуаций она вполне решаема.
Плюс к этому периодически возникают задачи вывода в файл без перевода строки.
Несколько лет назад (на ру-борде) я выкладывал семпловый код, который достаточно подробно иллюстрирует примеры возможной работы:

@ECHO OFF&CLS
(ECHO Обработка переменных со спецсимволами «(«, «)»,»&»,»|»,»>»,» команда»)
SET «AAA=сообщение()&|<>команда»

(ECHO Вывод на экран с обрамляющими двойными кавычками)
(ECHO ^(ECHO «%%AAA%%»^))
(ECHO «%AAA%»)

Читайте также:  Process1 initialization failed windows 10 исправить с помощью флешки

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO с заменой существующего file.txt)
(ECHO SET /p»=%%AAA%%»^ file.txt^&ECHO.^>^>file.txt)
SET /p»=%AAA%» file.txt&ECHO.>>file.txt

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO дописыванием в существующий file.txt)
(ECHO SET /p»=%%AAA%%»^ ^>file.txt^&ECHO. 1^>^>file.txt)
SET /p»=%AAA%» >file.txt&ECHO. 1>>file.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с заменой существующего file1.txt)
(ECHO SET /p»=%%AAA%%»^ file1.txt)
SET /p»=%AAA%» file1.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с дописыванием в существующий file1.txt)
(ECHO SET /p»=%%AAA%%»^ ^>file1.txt)
SET /p»=%AAA%» >file1.txt

(ECHO Вывод значения переменной на экран с переводом строки то есть с CR/LF)
(ECHO SET /p»=%%AAA%%»^ =^>%%»)
(ECHO SET «AAA=%%AAA:(=^(%%»)
(ECHO SET «AAA=%%AAA:)=^)%%»)
SET «AAA=%AAA:&=^&%»
SET «AAA=%AAA:|=^|%»
SET «AAA=%AAA: =^>%»
SET «AAA=%AAA:(=^(%»
SET «AAA=%AAA:)=^)%»
(ECHO ^(ECHO %%AAA%%^))
(ECHO %AAA%)
PAUSE

Кодировка приведенного скрипта CP866.
Для ознакомления рекомендуется выполнить 😉
Само-собой в случае вопросов постараюсь ответить.

Выбираем среду разработки на PowerShell и пишем скрипты для Windows

Содержание статьи

В администрировании всегда есть место творчеству. Хочешь сделать какую-нибудь автоматизацию рутинной задачи? Пожалуйста! Нужно что-то регулярно проверять на активность? Не вопрос! Хочешь обработать какой-нибудь гигантский отчет и вывести только актуальные данные? Тоже можно. Все эти и многие другие задачи лучше всего решать при помощи скриптов, и язык PowerShell в случае с Windows — оптимальный выбор.

Что такое PowerShell и чем он хорош

Пользователи UNIX и Linux, а с какого-то момента и macOS привыкли к тому, что под рукой всегда есть Bash — немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron — и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.

Возвращаясь в Windows (а без этого иногда никак), понимаешь, что скрипты .bat хоть и хороши, но спасают не всегда: очень уж ограниченны их возможности. И если ты до сих пор считал, что PowerShell — это неведомая штуковина, ради которой нужно что-то там поднимать и настраивать, то не спеши с выводами — он, если разобраться, совсем неплох.

Windows PowerShell — это расширяемое средство автоматизации с открытыми исходниками, которое состоит из оболочки (командной строки) и скриптового языка. Впервые он был показан в 2003 году (тогда он назывался Monad). PowerShell 2.0 вышел в составе Windows 7 и Windows Server 2008 R2 и с тех пор присутствует в Windows в качестве стандартного компонента. Его даже включили в Windows XP SP3. PowerShell построен на основе .NET Framework и интегрирован с ним. PowerShell может обращаться к COM, WMI и ADSI, а также, конечно же, исполняет консольные команды.

В общем, «пошик» имеет крепкие связи с продуктами Microsoft, будь то Active Directory или почтовый сервер Exchange. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдавать команды.

Читайте также:  Линукс антикс 19 установка

Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей — она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.

Выбираем среду разработки и инструменты

Теперь давай разберемся, где удобнее всего писать код. Можно, конечно, и в «Блокноте», Notepad++ или Sublime. Но это в данном случае не самый грамотный выбор редактора. Лучше всего начинать знакомство с PowerShell, вооружившись идущим в комплекте PowerShell ISE.

PowerShell ISE

Xakep #214. Приручаем WAF’ы

Это даже не редактор, а практически полноценная среда разработки. Здесь есть функция IntelliSense, которая позволяет просматривать перечень командлетов и их параметров, переменных, утилит и прочего. Поддерживаются сниппеты, есть возможность расширения набора функций за счет различных аддонов. Очень полезно и окно Commands. В нем можно составлять команды в визуальном режиме: выбираешь модуль, находишь нужный командлет и задаешь ему необходимые параметры. Получившуюся команду можно скопировать в консоль или сразу запустить на выполнение. В общем, этакий конструктор для админа. Ну и конечно, есть подсветка синтаксиса, дебаггер и многое другое.

Тем не менее у PowerShell ISE есть и достойные конкуренты. Один из них — Dell PowerGUI.

PowerGUI — это визуальное дополнение к PowerShell. Оно упрощает сборку собственных сценариев до выбора необходимых командлетов. Берешь то, что нужно для решения задачи, и перетаскиваешь части кода, пока не получишь скрипт. Одна из главных фишек PowerGUI — это Power Packs, готовые скрипты, опубликованные сообществом пользователей и выложенные в свободный доступ. Тут есть и простенькие команды вроде добавления пользователей, и сложные — к примеру, управление свитчами и виртуальными машинами. Все их легко дополнять и модифицировать в соответствии с нуждами.

powergui

PowerShell Studio 2015 фирмы Sapien — более продвинутая среда, которая рассчитана на совместную разработку одного проекта большим количеством участников. Если ты когда-нибудь имел дело с Visual Studio, то, думаю, заметишь сходство. Среди полезных фишек PowerShell Studio — панель Ribbon, поддержка удаленной отладки, а также функции компилятора, которые позволяют включить скрипты в исполняемые файлы. Есть поддержка разных версий PowerShell.

PowerShell Studio 2015

Стоит упомянуть и Script Browser для Windows PowerShell ISE. Это не среда разработки, но весьма интересный инструмент, разработанный в Microsoft. Script Browser открывает доступ к базе готовых скриптов, которые можно использовать в качестве образцов для написания своего кода. А еще эта штука умеет анализировать код, который ты пишешь, и подсказывает, как его улучшить.

Script Browser для Windows PowerShel

Несколько полезных трюков

Разобравшись с редактором, можно приступать к написанию кода. PowerShell — несложный язык, и, я думаю, ты быстро разберешься, что к чему. Команды здесь называются командлетами, и каждый из них состоит из двух частей. Сначала идет действие, например Get, Set, Add, Invoke, Remove. Затем указывается то, на что действие направлено: Service, VM, AzureAccount, DHCPServerSetting. Каждая часть отделяется от другой дефисом. Получается, к примеру, get-process. Это, кстати, полезная команда, которая выводит список процессов. Скажем, если написать

Читайте также:  Windows 10 rpd несколько пользователей

увидим что-то такое:

Теперь можно завершить зависший процесс:

Хочешь посмотреть права на директорию? Сделать это помогает такой командлет:

Можно просмотреть рекурсивно, правда уже чуть с более сложной логикой:

Если не можешь понять, что делает какой-то командлет, напиши следующее (заменив Get-Process на название неизвестного командлета):

Можно также выполнить

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

Теперь давай попробуем узнать что-нибудь о нашем домене через консоль PowerShell. К примеру, давай посмотрим пользовательские аккаунты, у которых установлен неистекающий пароль:

Кстати, к каждому полю в окошке опции учетной записи или компьютера можно обратиться и считать данные. Таким образом можно делать целые срезы. Вот, к примеру, запрос на основе данных о телефонных номерах:

PowerShell в сравнении с bat

Иногда задачу можно решить как старым дедовским методом, так и при помощи PowerShell. Я рекомендую не лениться и использовать PS, хотя бы просто потому, что так ты его быстрее изучишь и сможешь применять в более сложных ситуациях. К тому же ты постепенно оценишь его синтаксис — более элегантный и консистентный. Вот несколько примеров, как вещи делались раньше и как их можно сделать при помощи PowerShell.

Следующая командная строка перезагрузит компьютер с задержкой в десять секунд:

На PowerShell это будет выглядеть вот так:

Вот так через bat можно перезагрузить службу dnscache (или любую другую):

В PowerShell это будет так:

Мап диска в bat:

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

Удаленное управление с PowerShell

В основном описанные в статье команды выполняются на том же компьютере, на котором они запущены. Проще говоря, команды для управления AD выполнять нужно на сервере, где контроллер домена и установлен, что, согласись, на корню рубит удобство и автоматизацию. Для выполнения команд удаленно, что нам и требуется, надо пользоваться специальными командлетами. К примеру, для подключения к удаленному компьютеру и перезапуску там спулера печати вводи

Что почитать еще

Книжек и прочих обучающих материалов по PowerShell огромное количество. Есть как справочники, так и учебные туториалы. Начать можно с сайта Microsoft, где есть неплохие видеоуроки.

В деле немало поможет и книга «Master-PowerShell» Тобиаса Велтнера. В ней автор охватывает многие понятия вроде массивов, хеш-таблиц, конвейеров, объектов, функций, обработки ошибок, регулярных выражений и так далее. Заодно подробно рассматривается XML и разные аспекты администрирования. Увы, на русский эта книга не переведена.

Из русскоязычных мануалов по PowerShell мне попадался «Windows PowerShell 2.0. Справочник администратора» Уильяма Станека — он весьма неплох.

На «Хабрахабре» есть перевод полезной статьи Джеффери Хикса об администрировании Active Directory при помощи PowerShell.

Итого

Как видишь, все не так сложно, как кажется на первый взгляд. Главное — четко понимать, что нужно на выходе, и на этом основании выбирать командлеты. А с удобным редактором это делать куда легче. Доступность разнообразных заготовок может заметно упростить решение повседневных задач администрирования. Знания «пошика» прокачаешь по ходу дела, а это в работе с Windows совсем не лишнее.

Оцените статью