Командный сценарий windows nt что это
A командного файла - это файл сценария в DOS , OS / 2 и Microsoft Windows . Он состоит из серии команд , которые должны выполняться интерпретатором командной строки , сохраненных в текстовом файле . Пакетный файл может содержать любую команду, которую интерпретатор принимает в интерактивном режиме, и использовать конструкции, которые разрешают условное ветвление и цикл внутри пакетного файла, такие как IF , FOR и GOTO метки. . Термин «пакетный» происходит от пакетная обработка , что означает «неинтерактивное выполнение», хотя пакетный файл может не обрабатывать пакет из нескольких данных.
Расширение имени файла .bat используется в DOS и Windows. Windows NT и OS / 2 также добавили .cmd . Пакетные файлы для других сред могут иметь другие расширения, например, .btm в оболочках, связанных с 4DOS , 4OS2 и 4NT .
Детальная обработка пакетных файлов значительно изменилась между версиями. Некоторые сведения в этой статье применимы ко всем пакетным файлам, в то время как другие сведения относятся только к определенным версиям.
Содержание
Варианты
В DOS командный файл можно запустить из интерфейс командной строки , введя его имя, затем любые требуемые параметры и нажав клавишу ↵ Enter . При загрузке DOS файл AUTOEXEC.BAT , если он присутствует, выполняется автоматически, поэтому в этот файл можно поместить любые команды, которые необходимо выполнить для настройки среды DOS. Пользователи компьютеров должны иметь файл AUTOEXEC.BAT для установки системной даты и времени, инициализации среды DOS, загрузки любых резидентных программ или драйверов устройств или инициализации сетевых подключений и назначений.
Ранняя версия Windows
OS / 2
Windows NT
Microsoft выпустила версию cmd.exe для Windows 9x и ME под названием WIN95CMD, чтобы пользователи старых версий Windows могли использовать определенные командные файлы в стиле cmd.exe.
Расширения имен файлов
Параметры пакетного файла
COMMAND.COM и cmd.exe поддерживают количество специальных переменных (от %0 , %1 до % 9 ) для ссылки на путь и имя пакетного задания и первые девять параметров вызова из пакетного задания, см. также SHIFT . Несуществующие параметры заменяются строкой нулевой длины. Их можно использовать аналогично переменным среды , но они не хранятся в среде. Microsoft и IBM называют эти переменные параметрами замены или заменяемыми параметрами, тогда как Digital Research, Novell и Caldera ввели для них термин "переменные замены". JP Software называет их параметрами пакетного файла.
Примеры
Этот пример пакетного файла отображает Hello World! , запрашивает и ожидает, пока пользователь нажмет клавишу, а затем завершает работу. . (Примечание: не имеет значения, вводятся ли команды в нижнем или верхнем регистре, если не работают с переменными)
Чтобы запустить файл, он должен быть сохранен с расширением .bat (или .cmd для операционных систем типа Windows NT) в текстовом формате, обычно создаваемом с помощью текстового редактора, такого как Microsoft Notepad или текстовый процессор , работающий в текстовом режиме.
При выполнении отображается следующее:
Объяснение
Интерпретатор выполняет каждую строку по очереди, начиная с первой. Символ @ в начале любой строки предотвращает отображение этой команды в подсказке при ее выполнении. Команда ECHO OFF отключает подсказку навсегда или до тех пор, пока она не будет включена снова. Комбинированный @ECHO OFF часто, как и здесь, является первой строкой командного файла, предотвращающей отображение любых команд, включая саму себя. Затем выполняется следующая строка, и команда ECHO Hello World! выводит Hello World! . Выполняется следующая строка, и команда PAUSE отображает Нажмите любую клавишу, чтобы продолжить. . . и приостанавливает выполнение скрипта. После нажатия клавиши сценарий завершается, так как команд больше нет. В Windows, если сценарий выполняется из уже запущенного окна командной строки , окно остается открытым в командной строке, как в MS-DOS; в противном случае окно закрывается по завершении.
Ограничения и исключения
Нулевые значения в переменных
Расширения переменных подставляются в команду текстуально, и, таким образом, переменные, которые не содержат ничего, просто исчезают из синтаксиса, а переменные, содержащие пробелы превращаются в несколько токенов. Это может привести к синтаксическим ошибкам или ошибкам.
Например, если% foo% пуст, этот оператор:
анализируется как ошибочная конструкция:
Аналогично, если % foo% содержит abc def , то возникает другая синтаксическая ошибка:
Обычный способ предотвращения эта проблема заключается в заключении расширений переменных в кавычки, чтобы пустая переменная расширялась до допустимого выражения IF "" == "bar" вместо недопустимого IF == bar . Текст, который сравнивается с переменной, также должен быть заключен в кавычки, потому что кавычки не являются специальным ограничивающим синтаксисом; эти персонажи представляют себя.
Задержка! VARIABLE! Расширение, доступное в Windows 2000 и более поздних версиях, может использоваться, чтобы избежать этих синтаксических ошибок. В этом случае пустые или многословные переменные не ошибаются синтаксически, потому что значение расширяется после анализа команды IF:
Еще одно отличие в Windows 2000 или выше заключается в том, что пустая переменная (неопределенная) не заменяется. Как описано в предыдущих примерах, предыдущее поведение пакетного интерпретатора привело бы к пустой строке. Пример:
Пакетные интерпретаторы до Windows 2000 отображали результат MyVar не определен .
Кавычки и пробелы в переданных строках
В отличие от процессов Unix / POSIX, которые получают свои аргументы командной строки, уже разделенные оболочкой на массив строк, процесс Windows получает всю командную строку как одну строку через функцию API GetCommandLine . В результате каждое приложение Windows может реализовать свой собственный синтаксический анализатор для разделения всей командной строки на аргументы. Многие приложения и инструменты командной строки разработали для этого собственный синтаксис, поэтому не существует единого соглашения о заключении в кавычки или экранировании метасимволов в командной строке Windows.
- Для некоторых команд пробелы рассматриваются как разделители, разделяющие аргументы, если эти пробелы не заключены в кавычки. Существуют различные соглашения о том, как кавычки могут быть переданы приложению:
- Широко используемое соглашение реализуется с помощью синтаксического анализатора командной строки, встроенного в библиотеку времени выполнения Microsoft Visual C ++ в CommandLineToArgvW . Он использует соглашение, согласно которому 2 n обратной косой черты, за которыми следует кавычка ("), создают n обратную косую черту, за которой следует начало / конец кавычки, тогда как (2 n ) Обратная косая черта +1, за которой следует кавычка, снова создает n обратных косых черт, за которыми следует литерал кавычек. Такое же соглашение является частью спецификации .NET Framework .
- Недокументированный аспект заключается в том, что "" в середине строки в кавычках создает одинарную кавычку (изменение CRT в 2008 году [msvcr90] изменило эту недокументированную обработку кавычек.) Это полезно для вставки кавычек в аргумент без повторного включения интерпретации метасимволов cmd. например,
- |,
- & и
- >. (cmd не распознает обычный
- \ "как экранирование цитаты. Он повторно включает эти специальные значения при просмотре цитаты, думая, что цитата закончилась .)
Если строка содержит кавычки и должна быть вставлена в другую строку текста, которая также должна быть заключена в кавычки, особое внимание уделяется механизму цитирования. требуется:
В Windows 2000 и более поздних версиях решение состоит в замене каждого вхождения символа кавычки в значении серией из трех символов кавычек:
Экранированные символы в строках
Однако экранирование не работает должным образом при вставке экранированного символа в переменную среды. Переменная заканчивается тем, что содержит команду live pipe, когда просто отображается эхом. Необходимо экранировать как саму каретку, так и экранированный символ для отображения символа в виде текста в переменной:
Спящий режим или задержка сценария
До тех пор, пока команда TIMEOUT не была представлена в Windows Vista, не было простого способа реализовать временную паузу, поскольку команда PAUSE приостанавливает выполнение сценария на неопределенный срок, пока не будет нажата какая-либо клавиша.
Вывод текста с вырезанными CR / LF
Обычно весь напечатанный текст автоматически содержит управляющие символы для возврата каретки (CR) и перевода строки (LF) добавляется в конец каждой строки.
Не имеет значения, используют ли две команды echo одну и ту же командную строку; коды CR / LF вставляются для разбивки вывода на отдельные строки:
Это можно использовать для вывода данных в текстовый файл без добавления CR / LF в конец:
Однако нет способа вставить этот удаленный вывод приглашения CR / LF непосредственно в переменную среды.
Установка рабочего каталога Uniform Naming Convention (UNC) с помощью ярлыка
Невозможно иметь командную строку, которая использует UNC-путь в качестве текущего рабочего каталога ; например \\ server \ share \ directory \
Командная строка требует использования букв дисков для назначения рабочего каталога, что затрудняет выполнение сложных пакетных файлов, хранящихся на общей UNC-папке сервера. Хотя командный файл может быть запущен из пути к файлу UNC, рабочий каталог по умолчанию - C: \ Windows \ System32 \ .
. В Windows 2000 и более поздних версиях обходным путем является использование PUSHD и команда POPD с расширениями команд.
Если они не включены по умолчанию, расширения команд можно временно включить с помощью переключателя / E: ON для интерпретатора команд.
Итак, чтобы запустить пакетный файл на общем ресурсе UNC, назначить временную букву диска общему ресурсу UNC и использовать общий ресурс UNC в качестве рабочего каталога пакетного файла, можно создать ярлык Windows, который выглядит как это:
- Цель: % COMSPEC% / E: ON / C "PUSHD" "" \\ SERVER \ SHARE \ DIR1 \ DIR2 \ "" "& BATCHFILE.BAT & POPD"
Рабочий каталог атрибут этого ярлыка игнорируется.
Это также решает проблему, связанную с контролем учетных записей пользователей (UAC) в Windows Vista и новее. Когда администратор вошел в систему и включен UAC, и они попытаются запустить командный файл от имени администратора с буквы сетевого диска, используя контекстное меню файла, щелкнув правой кнопкой мыши, операция неожиданно завершится ошибкой. Это связано с тем, что контексту привилегированной учетной записи UAC с повышенными привилегиями не назначены буквы сетевых дисков, и невозможно назначить буквы дисков для контекста с повышенными правами через оболочку Explorer или сценарии входа в систему. Однако, создав ярлык для командного файла с использованием указанной выше конструкции PUSHD / POPD и используя ярлык для запуска командного файла от имени администратора, будет создана временная буква диска и удален в контексте учетной записи с повышенными правами, и командный файл будет работать правильно.
Следующий синтаксис правильно расширяется до пути к текущему пакетному сценарию.
Пути по умолчанию UNC отключены по умолчанию, поскольку они использовались для аварийного завершения старых программ.
Значение реестра Dword DisableUNCCheck в HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor позволяет использовать каталог по умолчанию в формате UNC. CD команда не будет изменять, но поместит UNC-путь в каталог по умолчанию в ярлыке для Cmd или с помощью команды Start. start "" / d \\ 127.0.0.1 \ C $ "cmd / k" ( C$ общий ресурс для администраторов).
Набор символов
В пакетных файлах используется набор символов OEM, определенный компьютером, например Кодовая страница 437 . Их части, не относящиеся к ASCII, несовместимы с наборами символов Unicode или Windows , которые иначе используются в Windows, поэтому необходимо соблюдать осторожность. Неанглийские имена файлов работают только при вводе через редактор, совместимый с набором символов DOS. Имена файлов с символами вне этого набора не работают в пакетных файлах.
Чтобы получить вывод в Юникоде в файловые каналы из внутренней команды, такой как dir , можно использовать команду cmd / U . Например, cmd / U / C dir>files.txt создает файл, содержащий список каталогов с правильными символами Windows в кодировке UTF-16 LE.
Пакетные вирусы и вредоносное ПО
Как и любой другой язык программирования, пакетные файлы могут использоваться злонамеренно. Простые трояны и бомбы-вилки легко создаются, а пакетные файлы могут выполнять форму заражения DNS , изменяя файл hosts . Возможны пакетные вирусы, которые также могут распространяться через USB-флеш-накопители с использованием возможностей Windows Autorun.
Следующая команда в пакетном файле удалит все данные в текущем каталоге (папке) - без предварительного запроса подтверждения:
Эти три команды представляют собой простую fork bomb , которая будет непрерывно копировать себя, чтобы истощить доступную систему ресурсы, замедление или сбой системы:
Другие языки сценариев Windows
Командный процессор cmd.exe, который интерпретирует файлы .cmd, поддерживается во всех 32 - и 64-битные версии Windows как минимум до Windows 10. COMMAND.EXE, интерпретирующий файлы .BAT, поддерживался во всех 16- и 32-битных версиях как минимум до Windows 10.
Там другие, более поздние и более мощные языки сценариев, доступные для Windows. Однако для их использования требуется установка интерпретатора языка сценариев:
В этой статье я хотела бы пояснить, когда следует использовать механизмы сценариев, рассказать о некоторых базовых концепциях их составления, а также дать ряд практических советов (см. врезку "Советы по составлению сценариев" ). Кроме того, я представлю код на VBScript, с помощью которого решается некая общая задача, и прокомментирую его. Выбор пал на VBScript, поскольку Windows поддерживает этот язык. Windows поддерживает и JScript, но в предыдущих номерах журнала, как правило, использовался VBScript, так что есть смысл сохранять преемственность.
Почему именно сценарии?
Программирование сценария занимает больше времени, чем однократное выполнение задачи вручную, - даже если за дело берется опытный специалист по программированию на VBScript, который знает проблему досконально. Если же вы не профессионал, то написание и отладка сценария займет куда больше времени, чем использование графического интерфейса. Так зачем же тогда привлекать сценарий?
Основное назначение административных сценариев - автоматизация часто повторяющихся задач. Если администратор сталкивается с задачей, которую нужно выполнить более одного раза или же регулярно, как раз имеет смысл доверить ее решение сценарию. Очевидно, что в этом случае все подобные задачи будут решаться быстро и единообразно. Кроме того, написание сценариев позволит создать инструментарий администратора, не предусмотренный в графическом интерфейсе.
Если с помощью GUI решить задачу непросто, то, может быть, стоит обратиться к утилитам командной строки, которые поставляются вместе с операционной системой или в составе Resource Kit? Желательно использовать данные утилиты всегда, когда в этом есть смысл. Но в Windows 2000 набор программ с графическим интерфейсом не соответствует в точности набору утилит командной строки, и некоторые утилиты могут не удовлетворять в полном объеме решаемой задаче. Пакетные файлы не всегда хорошо справляются с ситуацией, когда входной поток данных должен быть изменен. Кроме того, утилиты командной строки и сценарии не являются взаимоисключающими методами. Можно написать сценарии, основанные на применении утилит командной строки и при этом свободные от недостатков последних.
Scripting Host
Прежде чем перейти к созданию сценария, поясню некоторые термины. Зная, что скрывается за словами scripting host, легче понять, как это может повлиять на проект сценария, допустимо ли будет использовать в сценарии выражения и т. п.
Windows поддерживает две машины сценариев: Microsoft Internet Explorer (IE) и Windows Script Host (WSH). Выбор той или иной машины влияет на используемые в сценарии возможности. Если применяется WSH, как чаще всего и бывает, то в сценарии могут использоваться объекты WSH, но не IE, и наоборот. Машина сценария не обязана понимать содержание всех мыслимых сценариев; воспринимается только сценарий, написанный на языке машины, и тот, который ею поддерживается. Для WSH и IE "понятными" являются языки VBScript и JScript.
Элементы сценария
Каждая строка сценария - это оператор, который сообщает компьютеру, что следует сделать. Исполняемые операторы обычно имеют форму типа "действие-объект": описываются само действие и тот объект, над которым действие совершается. Сценарий может содержать условия, при наличии которых указанные операторы должны быть выполнены. Хост сценария интерпретирует строки кода слева направо и сверху вниз, так что можно, например, получив некоторые данные в строке 10, использовать их в 30-й строке. Исключение составляют процедуры. Процедуры (функции и подпрограммы) - это набор операторов, которые выполняются только при явном обращении к ним. В данном случае процедура сразу же начинает выполняться независимо от того, из какого места кода было обращение.
Исполняемые части сценария называются операторами. Неисполняемая часть сценария называется комментарием и должна предваряться апострофом (') или ключевым словом Rem. Например:
Комментарий может занимать всю строчку целиком или быть частью строки, содержащей исполняемый код. Сценарий следует документировать, чтобы не участвующий в его написании человек (или даже незнакомый с лексикой его языка) смог легко понять, для чего сценарий предназначен. Иногда в целях отладки программы в начале исполняемой строки ставят признак комментария.
VBScript рассматривает перечисленные четыре типа данных как подмножество другого типа данных - variant, который может содержать данные любого вида. Таким образом, VBScript можно не сообщать, с данными какого типа вы работаете, но нужно иметь в виду, что некоторые задачи выполняются в Visual Basic (VB) и VBScript с описанными типами данных по-разному (правда, подобная ситуация может никогда и не встретиться). Группы однотипных данных называются массивами (array).
Для простоты работы с данными VBScript поддерживает еще два типа данных, не имеющих никакого начального значения (null-данные), которые можно присваивать переменным (variable) и константам (constant) сценария. Значения переменных в ходе выполнения программы могут меняться, но их имена при этом остаются прежними. Константы при выполнении сценария имеют только одно значение и изменяться не могут.
Передать данные в сценарий можно двумя способами. Во-первых, их в явном виде прописывают в теле программы. Например, ""\\bigserver\sharedfolder"" - обычное использование в сценарии строковых данных для обозначения пути. Другой способ - передать нужные данные во входном потоке в сценарий. Кроме того, по ходу обработки сценарий может самостоятельно генерировать данные (например, вычислить дату двумя неделями позднее текущей), а затем использовать их.
Манипулировать данными можно с помощью операторов (operator) - символов, которые обычно применяются для обозначения математических функций. Какие-то операторы имеют более высокий приоритет, какие-то - более низкий, и это влияет на порядок вычисления выражений (expression). Выражение есть некоторое вычисление, в которое могут быть включены числа, переменные, строки, константы. В выражениях могут использоваться операторы. Например, выражение dInputDate + 2 = dNewDate означает, что к значению переменной dInputDate добавляется 2, и результат вычисления вновь присваивается переменной dNewDate.
Функции и подпрограммы
VBScript имеет набор встроенных функций, которые позволяют выполнять некоторые операции без подробного описания решаемой задачи. С помощью встроенных функций можно манипулировать числами, строками, значениями даты и времени, массивами. В состав VBScript также входят функции преобразования данных одного типа в другой. Например, VBScript обычно исходит из того, что число, допустим, 45, имеет тип "число", но при необходимости его можно рассматривать как данные строкового типа.
VBScript предусматривает создание собственных функций пользователя (user-defined function, UDF) для выполнения каких-то специфических задач. Например:
Пользовательская функция TestFunct работает со встроенной функцией Sqr для извлечения квадратного корня из 9 и добавления к полученному результату 2. UDF, как и встроенная функция, может использовать аргументы.
TestFunct UDF возвращает результат в основное тело программы. Подпрограмма выполняет некоторые действия, но ничего не возвращает в основной код в качестве результата. Программист может задействовать подпрограмму несколько раз, при необходимости использовать один и тот же участок кода, а повторно писать одно и то же лень. Подпрограмма
Объекты в сценарии
Объект (Object) представляет собой физическую или логическую часть вычислительной среды, например дисковод или имя учетной записи. Конечно, можно программировать, не прибегая к объектам, но большинство сценариев управления работает с объектами. Если используется WSH, VBScript может обращаться к объектам, изначально присущим WSH, например, представляющим файлы, каталоги, части реестра; VBScript также поддерживает объекты Windows Management Instrumentation (WMI) и Active Directory Service Interfaces (ADSI). Объекты WMI связаны с физическими и логическими частями вычислительной системы: например, адресами IP, файловыми системами, сетевыми адаптерами. ADSI-объекты представляют ресурсы службы каталогов: в частности, Active Directory (AD) или иные поддерживаемые каталоги, скажем Windows NT 4.0 SAM. Статические группы объектов одинаковой природы называются классами, а группы, описываемые пользователем, - библиотеками.
Объекты имеют свойства и методы. Объект определяется его свойствами (т. е. IP Address - это свойство объекта Network Card, а 12.4.21.197 - значение данного свойства). Методы - это действия, которые могут выполняться над объектом (Copy - один из методов объекта File). Не все объекты имеют методы. Свойства и методы используются при написании кода одинаково: сначала следует объект, затем ставится точка, далее название метода или свойства (например, ObjectName.PropertyName). Объекты могут содержать другие объекты. В частности, объект WSH WScript включает подчиненный объект WshArguments, который является набором аргументов, передаваемых при вызове файлу-сценарию. Для выделения первого элемента строки аргументов используется WScript.Arguments(0). Как было видно при обсуждении объектов WSH, формальное имя подчиненных объектов не совпадает с именем, используемым при обращении к ним в сценарии.
В следующий раз я расскажу о том, как применять полученные знания при создании сценариев управления.
Советы по составлению сценариев
В следующей статье будут приведены более конкретные советы по программированию на VBScript, а сейчас ограничимся общими правилами, которых нужно придерживаться всегда:
либо установить среду командной строки в виде среды по умолчанию:
В сценариях часто используются кавычки, и, если текстовый процессор так или иначе преобразует их, сценарий просто не будет работать.
Следующим шагом в развитии средств и технологий автоматизации в операционной системе Windows стало появление сервера сценариев Windows Script Host (WSH). Этот инструмент разработан для всех версий Windows и позволяет непосредственно в операционной системе выполнять сценарии на полноценных языках сценариев (по умолчанию, VBScript и JScript), которые до этого были доступны только внутри HTML-страниц и работали в контексте безопасности веб-браузера (в силу этого подобные сценарии, например, могли не иметь доступа к файловой системе локального компьютера).
По сравнению с командными файлами интерпретатора cmd.exe сценарии WSH имеют несколько преимуществ.
Во-первых, VBScript и JScript – это полноценные алгоритмические языки, имеющие встроенные функции и методы для обработки символьных строк, выполнения математических операций, обработки исключительных ситуаций и т.д.; кроме того, для написания сценариев WSH может использоваться любой другой язык сценариев (например, широко распространенный в Unix-системах Perl), для которого установлен соответствующий модуль поддержки.
Во-вторых, WSH поддерживает несколько собственных объектов, свойства и методы которых позволяют решать некоторые часто возникающие повседневные задачи администратора операционной системы: работа с сетевыми ресурсами, переменными среды, системным реестром, ярлыками и специальными папками Windows, запуск и управление работой других приложений.
В-третьих, из сценариев WSH можно обращаться к службам любых приложений-серверов автоматизации (например, программ из пакета Microsoft Office), которые регистрируют в операционной системе свои объекты.
Наконец, сценарии WSH позволяют работать с объектами информационной модели Windows Management Instrumentation (WMI), обеспечивающей программный интерфейс управления всеми компонентами операционной модели, а также с объектами службы каталогов Active Directory Service Interface (ADSI) (объектные модели WMI и ADSI будут обсуждаться подробнее в следующих лекциях).
Следует также отметить, что технология WSH поддерживается в Windows уже довольно давно, в Интернете (в том числе на сайте Microsoft) можно найти множество готовых сценариев, выполняющих ту или иную операцию и при определенных навыках и знаниях быстро "подогнать" эти сценарии под свои конкретные задачи.
Поговорим теперь о слабых местах WSH. Прежде всего, сам по себе WSH – это только среда выполнения сценариев, а не оболочка; WSH не интегрирован с командной строкой, то есть отсутствует режим, в котором можно было вводить команды с клавиатуры и сразу видеть результат их выполнения.
Большим минусом является то, что в операционной системе по умолчанию нет полноценной подробной справочной информации по объектам WSH и языкам VBScript/JScript (документацию приходится искать в Интернете на сайте Microsoft). Другими словами, если вы, например, не помните синтаксис определенной команды VBScript/JScript или точное название свойства объекта WSH, под рукой у вас нет распечатанной документации, а компьютер не имеет выхода в Интернет, то написать корректный сценарий вам просто не удастся (в данном аспекте командные файлы более универсальны, так как практически у всех команд есть по крайней мере встроенное описание используемых ими ключей, а в операционной системе имеется справочный файл с информацией о всех стандартных командах).
Наконец, сценарии WSH представляют собой довольно серьезную потенциальную угрозу с точки зрения безопасности, известно большое количество вирусов, использующих WSH для выполнения деструктивных действий.
Таким образом, можно дать следующую общую оценку: сценарии WSH – это универсальный инструмент, который в любой версии операционной системы Windows позволяет решать задачи автоматизации практически любой степени сложности, но требует при этом большой работы по изучению самих языков сценариев и ряда смежных технологий управления операционной системой (WMI, ADSI и т.п.).
Командная оболочка Microsoft PowerShell
Итак, к началу XXI века ситуацию со средствами автоматизации работы в Windows нельзя было назвать совсем хорошей. С одной стороны функциональности и гибкости языка оболочки cmd.exe было явно недостаточно, а с другой стороны сценарии WSH, работающие с объектными моделями ADSI и WMI, оказались слишком сложными для пользователей среднего уровня и начинающих администраторов.
Перед разработчиками новой оболочки, получившей название Windows PowerShell (предварительное название – Monad ), стояли следующие основные цели и задачи, которые были успешно решены:
Вообще, самая важная идея, заложенная в PowerShell, состоит в том, что в командной строке вывод результатов команды представляет собой не текст (в смысле последовательности байтов), а объект (данные вместе со свойственными им методами). В силу этого работать в PowerShell становится проще, чем в традиционных оболочках, так как не нужно выполнять никаких манипуляций по выделению нужной информации из символьного потока.
Кроме того, разработчики старались собрать в PowerShell все лучшие аспекты других оболочек командной строки из разных операционных систем. По их словам, сильное влияние на PowerShell оказали следующие продукты:
- BASH, KSH (конвейеризация или композиция команд);
- AS400/VMS (стандартные названия команд, ускоряющие изучение);
- TCL/WSH (поддержка встраиваемости и нескольких языков);
- PERL, PYTHON (выразительность и стиль).
Отметим, что PowerShell одновременно является и оболочкой командной строки (пользователь работает в интерактивном режиме) и средой выполнения сценариев, которые пишутся на специальном языке PowerShell.
Интерактивный сеанс в PowerShell похож на работу в оболочке Unix-систем: все команды в PowerShell имеют подробную встроенную справку (для большинства команд приводятся примеры их использования), поддерживается функция автоматического завершения названий команд и их параметров при вводе с клавиатуры, для многих команд имеются псевдонимы, аналогичные названиям Unix-утилит (ls, pwd, tee и т.д.).
Язык PowerShell несложен для изучения, писать на нем сценарии, обращающиеся к внешним объектам, проще, чем на VBScript или JScript. Отдельное внимание было уделено вопросам безопасности при работе со сценариями (например, запустить сценарий можно только с указанием полного пути к нему, а по умолчанию запуск сценариев PowerShell в системе вообще запрещен).
Всем нам, приходилось сталкиваться с рутинными задачами изо дня в день на работе, и не только.Например:
- Необходимо раз в месяц удалять все файлы из папки обмен.
- «Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.
- У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.
Можно еще привести множество примеров обыкновенных задач, на которые лучше не тратить свое время, а автоматизировать процесс. Сегодня хочу рассказать, как пишутся элементарные bat скрипты.
Давайте разберем первый пример:
Необходимо раз в месяц удалять все файлы из папки обмен.
- Открываем WordPad, блокнот не подойдет, он не умеет сохранять в кодировке 866.
- Пишем:
- Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, del_obmen.bat, жмем Ок, запускаем и наслаждаемся.
Второй пример:
«Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.
SHUTDOWN /s
Пояснения я думаю ни к чему.
3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, shutdown.bat, жмем Ок, запускаем и наслаждаемся.
4. Дальше открываем панель управления => планировщик заданий, создаем задание в 20 00, думаю понятно для чего.Третий пример:
У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.
Если у вас ip адреса раздаются по DHCP, то лучше ввести не ip адрес, а имя компьютера.
3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, print.bat, жмем Ок, запускаем и наслаждаемся.
Создание bat Файла своими руками
Читайте также:
- Широко используемое соглашение реализуется с помощью синтаксического анализатора командной строки, встроенного в библиотеку времени выполнения Microsoft Visual C ++ в CommandLineToArgvW . Он использует соглашение, согласно которому 2 n обратной косой черты, за которыми следует кавычка ("), создают n обратную косую черту, за которой следует начало / конец кавычки, тогда как (2 n ) Обратная косая черта +1, за которой следует кавычка, снова создает n обратных косых черт, за которыми следует литерал кавычек. Такое же соглашение является частью спецификации .NET Framework .