Блок кода на языке powershell хранящийся во внешнем файле с расширением ps1
Аннотация: Описываются возможности оболочки Windows PowerShell и отличие ее от традиционных оболочек и языков сценариев. Обсуждаются основные концепции PowerShell (типы команд, структура командлетов, псевдонимы команд). Рассматриваются особенности справочной системы PowerShell
Подробное описание
В языке программирования PowerShell блок скрипта представляет собой коллекцию инструкций или выражений, которые можно использовать как единый блок. Блок сценария может принимать аргументы и возвращать значения.
Синтаксический блок скрипта — это список операторов в фигурных скобках, как показано в следующем синтаксисе:
Блок скрипта возвращает выходные данные всех команд в блоке скрипта либо как один объект, либо как массив.
Также можно указать возвращаемое значение с помощью return ключевого слова. Ключевое слово не влияет на другие выходные данные, возвращаемые блоком скрипта, и не подавляет их return . return Однако ключевое слово завершает блок сценария в этой строке. Дополнительные сведения см. в разделе about_Return.
Как и функции, блок скрипта может включать параметры. Используйте ключевое слово Param для присвоения именованных параметров, как показано в следующем синтаксисе:
В блоке сценария, в отличие от функции, нельзя указывать параметры за пределами фигурных скобок.
Как и функции, блоки скриптов могут содержать DynamicParam Ключевые слова, Begin , Process и End . Дополнительные сведения см. в разделе about_Functions и about_Functions_Advanced.
Поиск текста в области сценариев
- Чтобы найти текст в любой части скрипта, нажмите клавиши CTRL + F или выберите Find in Script (Найти в сценарии) в меню Edit (Правка).
- Чтобы найти текст после курсора, нажмите клавишу F3 или выберите Найти следующее в сценарии в меню Правка.
- Чтобы найти текст до курсора, нажмите клавиши SHIFT + F3 или выберите Find Previous in Script (Найти предыдущее в сценарии) в меню Edit (Правка).
Открытие существующего сценария
Повторное выполнение действия в области сценариев
Нажмите клавиши CTRL + Y , щелкните значок Повторить на панели инструментов или выберите Повторить в меню Правка.
Введение в оболочку командной строки Windows PowerShell
На настоящий момент мы рассмотрели уже три разных инструмента, предназначенных для автоматизации работы в операционной системе Windows : оболочки командной строки Cmd.exe и WMIC, а также сервер сценариев WSH. Зачем же компании Microsoft понадобилась разработка еще одной полностью новой оболочки командной строки со своим языком сценариев?
Причины и цели создания новой оболочки
Чтобы ответить на этот вопрос, вспомним основные требования к "идеальному" средству автоматизации, которые мы обсуждали в первой лекции, и посмотрим, в какой степени удовлетворяют этим требованиям перечисленные выше инструменты (табл.16.1).
Как мы видим, у каждого из рассмотренных нами ранее инструментов автоматизации присутствовали довольно серьезные недостатки, не позволявшие сказать, что Windows обладает по-настоящему мощным и эффективным средством для работы с командной строкой и написания сценариев.
Новая оболочка Windows PowerShell (предварительно она была названа Monad ) была задумана разработчиками Microsoft как более мощная среда для написания сценариев и работы из командной строки. Разработчики PowerShell преследовали несколько целей. Главная и самая амбициозная из них – создать среду составления сценариев, которая наилучшим образом подходила бы для современных версий операционной системы Windows и была бы более функциональной, расширяемой и простой в использовании, чем какой-либо аналогичный продукт для любой другой операционной системы. В первую очередь эта среда должна была подходить для решения задач, стоящих перед системными администраторами (тем самым Windows получила бы дополнительное преимущество в борьбе за сектор корпоративных платформ), а также удовлетворять требованиям разработчиков программного обеспечения, предоставляя им средства для быстрой реализации интерфейсов управления к создаваемым приложениям.
Для достижения этих целей были решены следующие задачи:
- Обеспечение прямого доступа из командной строки к объектам COM, WMI и .NET. В новой оболочке присутствуют команды, позволяющие в интерактивном режиме работать с COM-объектами, а также с экземплярами классов, определенных в информационных схемах WMI и .NET.
- Организация работы с произвольными источниками данных в командной строке по принципу файловой системы. Например, навигация по системному реестру или хранилищу цифровых сертификатов выполняется из командной строки с помощью аналога команды CD интерпретатора Cmd.exe.
- Разработка интуитивно понятной унифицированной структуры встроенных команд, основанной на их функциональном назначении. В новой оболочке имена всех внутренних команд (в PowerShell они называются командлетами) соответствуют шаблону "глагол-существительное", например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Для одинаковых параметров внутренних команд используются стандартные имена, структура параметров во всех командах идентична, все команды обрабатываются одним синтаксическим анализатором. В результате облегчается запоминание и изучение команд.
- Обеспечение возможности расширения встроенного набора команд. Внутренние команды PowerShell могут дополняться командами, создаваемыми пользователем. При этом они полностью интегрируются в оболочку, информация о них может быть получена из стандартной справочной системы PowerShell.
- Организация поддержки знакомых команд из других оболочек. В PowerShell на уровне псевдонимов собственных внутренних команд поддерживаются наиболее часто используемые стандартные команды из оболочки Cmd.exe и Unix-оболочек. Например, если пользователь, привыкший работать с Unix-оболочкой, выполнит ls, то он получит ожидаемый результат: список файлов в текущем каталоге (то же самое относится к команде dir).
- Разработка полноценной встроенной справочной системы для внутренних команд . Для большинства внутренних команд в справочной системе дано подробное описание и примеры использования. В любом случае встроенная справка по любой внутренней команде будет содержать краткое описание всех ее параметров.
- Реализация автоматического завершения при вводе с клавиатуры имен команд, их параметров, а также имен файлов и папок. Данная возможность значительно упрощает и ускоряет ввод команд с клавиатуры.
Главной особенностью среды PowerShell, отличающей ее от всех других оболочек командной строки, является то, что единицей обработки и передачи информации здесь является объект, а не строка текста.
Отличие PowerShell от других оболочек – ориентация на объекты
В-третьих, работая в оболочке с объектами, можно с помощью их свойств и методов легко получать нужные данные, не занимаясь разбором и анализом символьной информации, как это происходит во всех традиционных тексто-ориентированных оболочках командной строки. Рассмотрим пример. В Windows XP есть консольная утилита tasklist.exe, которая выдает информацию о процессах запущенных в системе:
Предположим, что мы в командном файле интерпретатора Cmd.exe с помощью этой утилиты хотим определить, сколько оперативной памяти тратит процесс kavsvc.exe. Для этого нужно выделить из выходного потока команды tasklist соответствующую строку, извлечь из нее подстроку, содержащую нужное число и убрать пробелы между разрядами (при этом следует учесть, что в зависимости от настроек операционной системы разделителем разрядов может быть не пробел, а другой символ). В PowerShell аналогичная задача решается с помощью команды get-process , которая возвращает коллекцию объектов, каждый из которых соответствует одному запущенному процессу. Для определения памяти, затрачиваемой процессом kavsvc.exe, нет необходимости в дополнительных манипуляциях с текстом, достаточно просто взять значение свойства WS объекта, соответствующего данному процессу.
Загрузка и установка PowerShell
Запуск оболочки. Выполнение команд
Установив оболочку в системе, можно начать новый интерактивный сеанс. Для этого следует нажать на кнопку Пуск (Start), открыть меню Все программы (All Programs) и выбрать элемент Windows PowerShell. Другой вариант запуска оболочки – пункт Выполнить… (Run) в меню Пуск (Start), ввести имя файла powershell и нажать кнопку OK.
В результате откроется новое командное окно с приглашением вводить команды (рис. 16.1).
Выполним первую команду в PowerShell. Пусть это будет что-то знакомое, например dir (команды в PowerShell обрабатываются без учета регистра). На экран будет выведен список файлов в текущем каталоге:
Типы команд PowerShell
В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы.
Данный тип команд компилируется в динамическую библиотеку (DLL) и подгружается к процессу PowerShell во время запуска оболочки (то есть сами по себе командлеты не могут быть запущены как приложения, но в них содержатся исполняемые объекты). Так как компилированный код подгружается к процессу оболочки, данный тип команд выполняется наиболее эффективно. Командлеты – это аналог внутренних команд традиционных оболочек.
Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.
Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.
Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.
В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.
Сохранение сценария в кодировке ASCII
По умолчанию интегрированная среда сценариев Windows PowerShell сохраняет новые файлы сценариев ( .ps1 ), файлы данных сценариев ( .psd1 ) и файлы модулей сценариев ( .psm1 ) в кодировке Юникод (BigEndianUnicode). Чтобы сохранить сценарий в другой кодировке, например ASCII (ANSI), используйте методы Save или SaveAs объекта $psISE.CurrentFile.
Следующая команда сохраняет новый сценарий в кодировке ASCII и с именем MyScript.ps1:
Следующая команда заменяет текущий файл сценария на файл с таким же именем, но в кодировке ASCII:
Следующая команда возвращает кодировку текущего файла:
Интегрированная среда скриптов Windows PowerShell поддерживает следующие параметры кодировки: ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8 и Default. Значение параметра Default зависит от системы.
Интегрированная среда скриптов Windows PowerShell не изменяет кодировку файлов скриптов при использовании команд "Сохранить" или "Сохранить как".
Сценарий — это обычный текстовый файл, содержащий одну или несколько команд PowerShell. Сценарии PowerShell имеют .ps1 расширение файла.
Выполнение сценария во многом похоже на выполнение командлета. Введите путь и имя файла скрипта и используйте параметры для отправки данных и задания параметров. Сценарии можно запускать на компьютере или в удаленном сеансе на другом компьютере.
Написание сценария сохраняет команду для последующего использования и упрощает совместное использование с другими пользователями. Что самое важное, это позволяет выполнять команды просто путем ввода пути скрипта и имени файла. Скрипты могут быть простыми как одной командой в файле, так и сложной программой.
Остановка выполняемого сценария
Есть несколько способов остановить выполняемый скрипт.
- На панели инструментов щелкните Остановить операцию.
- Нажмите CTRL + BREAK .
- В меню Файл выберите Остановить операцию.
Нажатие клавиш CTRL + C также сработает, если нет выделенного текста. В противном случае нажатие клавиш CTRL + C приведет к копированию выделенного текста.
Получить справку по сценариям
Командлет Get-Help получает разделы справки для скриптов, а также для командлетов и других типов команд. Чтобы получить раздел справки для скрипта, введите Get-Help , за которым следует путь и имя файла скрипта. Если путь к скрипту находится в Path переменной среды, путь можно опустить.
Например, чтобы получить справку по сценарию ServicesLog.ps1, введите:
Параметры в скриптах
Параметры сценария работают как параметры функции. Значения параметров доступны для всех команд в скрипте. Все функции параметров функций, включая атрибут Parameter и его именованные аргументы, также допустимы в скриптах.
При выполнении скрипта пользователи заменяют параметры после имени скрипта.
В следующем примере показан Test-Remote.ps1 скрипт с параметром ComputerName . Обе функции сценария могут обращаться к значению параметра ComputerName .
Чтобы выполнить этот скрипт, введите имя параметра после имени скрипта. Пример:
Дополнительные сведения о инструкции Param и параметрах функции см. в разделе about_Functions и about_Functions_Advanced_Parameters.
Возврат значения выхода
По умолчанию скрипты не возвращают состояние выхода при завершении сценария. Для возврата кода выхода из скрипта необходимо использовать exit инструкцию. По умолчанию exit инструкция возвращает 0 . Можно указать числовое значение, чтобы вернуть другое состояние выхода. Ненулевое значение кода выхода обычно сигнализирует об ошибке.
в Windows допускается любое число между [int]::MinValue и [int]::MaxValue .
В UNIX разрешены только положительные числа в диапазоне от [byte]::MinValue (0) до [byte]::MaxValue (255). Отрицательное число в диапазоне от -1 до -255 автоматически преобразуется в положительное число путем добавления 256. Например, -2 преобразуется в 254 .
В PowerShell exit инструкция задает значение $LASTEXITCODE переменной. в Windows командной оболочке (cmd.exe) оператор exit задает значение %ERRORLEVEL% переменной среды.
Любой аргумент, который не является числовым или вне диапазона, зависящего от платформы, преобразуется в значение 0 .
Сохранение сценария
Нажмите клавиши CTRL + S , щелкните значок Сохранить на панели инструментов или выберите Сохранить в меню Файл.
Вырезание текста в области сценариев
- В области сценариев выделите текст, который требуется вырезать.
- Нажмите клавиши CTRL + X , щелкните значок Cut (Вырезать) на панели инструментов или выберите Cut (Вырезать) в меню Edit (Правка).
Скрипты в модулях
Модуль — это набор связанных ресурсов PowerShell, которые можно распространять как единое целое. Вы можете использовать модули для организации скриптов, функций и других ресурсов. Можно также использовать модули для распространения кода среди других пользователей и получения кода из надежных источников.
Можно включить скрипты в модули или создать модуль скрипта, который представляет собой модуль, полностью или в основном содержащий скрипт и вспомогательные ресурсы. Модуль скрипта — это просто сценарий с расширением файла PSM1.
Дополнительные сведения о модулях см. в разделе about_Modules.
Запуск с помощью PowerShell
Начиная с PowerShell 3,0 можно запускать сценарии из проводника.
Чтобы использовать функцию "Запуск с помощью PowerShell", сделайте следующее:
Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду "запустить с помощью PowerShell".
Функция "запустить с помощью PowerShell" предназначена для выполнения скриптов, которые не имеют обязательных параметров и не возвращают выходные данные в командную строку.
Дополнительные сведения см. в разделе about_Run_With_PowerShell.
Поиск и замена текста в области сценариев
Нажмите клавиши CRTL + H или в меню Edit (Правка) выберите Replace in Script (Заменить в сценарии). Введите текст, который нужно найти, и замещающий текст, затем нажмите клавишу ВВОД .
Выполнение сценария
перед запуском скрипта на Windows необходимо изменить политику выполнения PowerShell по умолчанию. политика выполнения не применяется к PowerShell, работающему на платформах, отличных от Windows.
Политика Restricted выполнения по умолчанию предотвращает выполнение всех скриптов, включая скрипты, которые вы пишете на локальном компьютере. Подробнее см. в разделе about_Execution_Policies.
Политика выполнения сохраняется в реестре, поэтому ее необходимо изменить только один раз на каждом компьютере.
Чтобы изменить политику выполнения, используйте следующую процедуру.
В командной строке введите:
Изменение вступает в силу немедленно.
Чтобы выполнить сценарий, введите полное имя файла скрипта и полный путь к нему.
Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:
Чтобы выполнить сценарий в текущем каталоге, введите путь к текущему каталогу или используйте точку для представления текущего каталога, после чего следует обратная косая черта ( .\ ).
Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:
Если у скрипта есть параметры, введите параметры и значения параметров после имени файла скрипта.
Например, следующая команда использует параметр ServiceName скрипта Get-ServiceLog, чтобы запросить журнал действия службы удаленного управления Windows.
В качестве функции безопасности PowerShell не выполняет сценарии при двойном щелчке значка скрипта в проводнике или при вводе имени сценария без полного пути, даже если сценарий находится в текущем каталоге. Дополнительные сведения о выполнении команд и сценариев в PowerShell см. в разделе about_Command_Precedence.
Ввод текста в области сценариев
- Установите курсор в область сценариев, щелкнув кнопкой мыши любую ее часть или выбрав пункт Перейти в область сценариев в меню Вид.
- Создайте сценарий. Цветовая подсветка синтаксиса и заполнение нажатием клавиши TAB обеспечивают более широкие возможности для редактирования в интегрированной среде скриптов Windows PowerShell.
- Подробную информацию о заполнении нажатием клавиши TAB, помогающем при вводе кода, см. в статье How to Use Tab Completion in the Script Pane and Console Pane (Использование заполнения нажатием клавиши TAB в областях сценариев и консоли).
Написание и редактирование текста в области сценариев
В области скриптов текст можно копировать, вырезать, вставлять, искать и заменять. Также можно отменить и повторить последнее выполненное действие. Для этого используются те же клавиши, как и во всех других приложениях Windows.
Введение в оболочку командной строки Windows PowerShell
На настоящий момент мы рассмотрели уже три разных инструмента, предназначенных для автоматизации работы в операционной системе Windows : оболочки командной строки Cmd.exe и WMIC, а также сервер сценариев WSH. Зачем же компании Microsoft понадобилась разработка еще одной полностью новой оболочки командной строки со своим языком сценариев?
Причины и цели создания новой оболочки
Чтобы ответить на этот вопрос, вспомним основные требования к "идеальному" средству автоматизации, которые мы обсуждали в первой лекции, и посмотрим, в какой степени удовлетворяют этим требованиям перечисленные выше инструменты (табл.16.1).
Как мы видим, у каждого из рассмотренных нами ранее инструментов автоматизации присутствовали довольно серьезные недостатки, не позволявшие сказать, что Windows обладает по-настоящему мощным и эффективным средством для работы с командной строкой и написания сценариев.
Новая оболочка Windows PowerShell (предварительно она была названа Monad ) была задумана разработчиками Microsoft как более мощная среда для написания сценариев и работы из командной строки. Разработчики PowerShell преследовали несколько целей. Главная и самая амбициозная из них – создать среду составления сценариев, которая наилучшим образом подходила бы для современных версий операционной системы Windows и была бы более функциональной, расширяемой и простой в использовании, чем какой-либо аналогичный продукт для любой другой операционной системы. В первую очередь эта среда должна была подходить для решения задач, стоящих перед системными администраторами (тем самым Windows получила бы дополнительное преимущество в борьбе за сектор корпоративных платформ), а также удовлетворять требованиям разработчиков программного обеспечения, предоставляя им средства для быстрой реализации интерфейсов управления к создаваемым приложениям.
Для достижения этих целей были решены следующие задачи:
- Обеспечение прямого доступа из командной строки к объектам COM, WMI и .NET. В новой оболочке присутствуют команды, позволяющие в интерактивном режиме работать с COM-объектами, а также с экземплярами классов, определенных в информационных схемах WMI и .NET.
- Организация работы с произвольными источниками данных в командной строке по принципу файловой системы. Например, навигация по системному реестру или хранилищу цифровых сертификатов выполняется из командной строки с помощью аналога команды CD интерпретатора Cmd.exe.
- Разработка интуитивно понятной унифицированной структуры встроенных команд, основанной на их функциональном назначении. В новой оболочке имена всех внутренних команд (в PowerShell они называются командлетами) соответствуют шаблону "глагол-существительное", например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Для одинаковых параметров внутренних команд используются стандартные имена, структура параметров во всех командах идентична, все команды обрабатываются одним синтаксическим анализатором. В результате облегчается запоминание и изучение команд.
- Обеспечение возможности расширения встроенного набора команд. Внутренние команды PowerShell могут дополняться командами, создаваемыми пользователем. При этом они полностью интегрируются в оболочку, информация о них может быть получена из стандартной справочной системы PowerShell.
- Организация поддержки знакомых команд из других оболочек. В PowerShell на уровне псевдонимов собственных внутренних команд поддерживаются наиболее часто используемые стандартные команды из оболочки Cmd.exe и Unix-оболочек. Например, если пользователь, привыкший работать с Unix-оболочкой, выполнит ls, то он получит ожидаемый результат: список файлов в текущем каталоге (то же самое относится к команде dir).
- Разработка полноценной встроенной справочной системы для внутренних команд . Для большинства внутренних команд в справочной системе дано подробное описание и примеры использования. В любом случае встроенная справка по любой внутренней команде будет содержать краткое описание всех ее параметров.
- Реализация автоматического завершения при вводе с клавиатуры имен команд, их параметров, а также имен файлов и папок. Данная возможность значительно упрощает и ускоряет ввод команд с клавиатуры.
Главной особенностью среды PowerShell, отличающей ее от всех других оболочек командной строки, является то, что единицей обработки и передачи информации здесь является объект, а не строка текста.
Отличие PowerShell от других оболочек – ориентация на объекты
В-третьих, работая в оболочке с объектами, можно с помощью их свойств и методов легко получать нужные данные, не занимаясь разбором и анализом символьной информации, как это происходит во всех традиционных тексто-ориентированных оболочках командной строки. Рассмотрим пример. В Windows XP есть консольная утилита tasklist.exe, которая выдает информацию о процессах запущенных в системе:
Предположим, что мы в командном файле интерпретатора Cmd.exe с помощью этой утилиты хотим определить, сколько оперативной памяти тратит процесс kavsvc.exe. Для этого нужно выделить из выходного потока команды tasklist соответствующую строку, извлечь из нее подстроку, содержащую нужное число и убрать пробелы между разрядами (при этом следует учесть, что в зависимости от настроек операционной системы разделителем разрядов может быть не пробел, а другой символ). В PowerShell аналогичная задача решается с помощью команды get-process , которая возвращает коллекцию объектов, каждый из которых соответствует одному запущенному процессу. Для определения памяти, затрачиваемой процессом kavsvc.exe, нет необходимости в дополнительных манипуляциях с текстом, достаточно просто взять значение свойства WS объекта, соответствующего данному процессу.
Загрузка и установка PowerShell
Запуск оболочки. Выполнение команд
Установив оболочку в системе, можно начать новый интерактивный сеанс. Для этого следует нажать на кнопку Пуск (Start), открыть меню Все программы (All Programs) и выбрать элемент Windows PowerShell. Другой вариант запуска оболочки – пункт Выполнить… (Run) в меню Пуск (Start), ввести имя файла powershell и нажать кнопку OK.
В результате откроется новое командное окно с приглашением вводить команды (рис. 16.1).
Выполним первую команду в PowerShell. Пусть это будет что-то знакомое, например dir (команды в PowerShell обрабатываются без учета регистра). На экран будет выведен список файлов в текущем каталоге:
Типы команд PowerShell
В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы.
Данный тип команд компилируется в динамическую библиотеку (DLL) и подгружается к процессу PowerShell во время запуска оболочки (то есть сами по себе командлеты не могут быть запущены как приложения, но в них содержатся исполняемые объекты). Так как компилированный код подгружается к процессу оболочки, данный тип команд выполняется наиболее эффективно. Командлеты – это аналог внутренних команд традиционных оболочек.
Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.
Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.
Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.
В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.
Написание сценария
Скрипт может содержать любые допустимые команды PowerShell, в том числе отдельные команды, команды, использующие конвейер, функции и управляющие структуры, такие как операторы If и циклы for.
Чтобы написать сценарий, откройте новый файл в текстовом редакторе, введите команды и сохраните их в файле с допустимым именем файла с .ps1 расширением.
Следующий пример представляет собой простой сценарий, который получает службы, работающие в текущей системе, и сохраняет их в файл журнала. Имя файла журнала создается с текущей даты.
Чтобы создать этот скрипт, откройте текстовый редактор или редактор скриптов, введите следующие команды, а затем сохраните их в файле с именем ServiceLog.ps1 .
Создание файла сценария
Сохранение сценария
Звездочка рядом с именем скрипта обозначает, что файл не был сохранен после изменения. После сохранения звездочка исчезает.
Переход к определенной строке текста в области сценариев
В области сценариев нажмите клавиши CTRL + G или выберите Go to Line (Перейти к строке) в меню Edit (Правка).
Введите номер строки.
Использование блоков скриптов с отложенной привязкой с параметрами
Типизированный параметр, который принимает входные данные конвейера ( by Value ) или ( by PropertyName ), позволяет использовать блоки скриптов с отложенной привязкой для параметра. В блоке скрипта с отложенной привязкой можно ссылаться на перенаправленный объект, используя переменную $_ конвейера.
В более сложных командлетах блоки скриптов с отложенной привязкой позволяют повторно использовать один из переданных объектов для заполнения других параметров.
Примечания к блокам скриптов отложенной привязки в качестве параметров:
Необходимо явно указать все имена параметров, используемые с блоками скриптов отложенной привязки .
Параметр не должен быть нетипизированным, а тип параметра не может быть [scriptblock] или [object] .
Если используется блок скрипта отложенной привязки без предоставления входных данных конвейера, возникает ошибка.
Новая оболочка Windows PowerShell была задумана разработчиками Microsoft как более мощная среда для написания сценариев и работы из командной строки. Разработчики PowerShell преследовали несколько целей, главная из которых – создание среды составления сценариев, которая наилучшим образом подходила бы для современных версий ОС Windows и была бы более функциональной, расширяемой и простой в использовании, чем какой-либо аналогичный продукт для любой другой ОС. В первую очередь эта среда должна была подходить для решения задач, стоящих перед системными администраторами, а также удовлетворять требованиям разработчиков программного обеспечения, предоставляя им средства для быстрой реализации интерфейсов управления к создаваемым приложениям.
Для достижения этих целей были решены следующие задачи:
· Организация работы с произвольными источниками данных в командной строке по принципу файловой системы. Например, навигация по системному реестру или хранилищу цифровых сертификатов выполняется из командной строки с помощью аналога команды CD интерпретатора Cmd.exe.
· Разработка интуитивно понятной унифицированной структуры встроенных команд, основанной на их функциональном назначении. В новой оболочке имена всех внутренних команд (в PowerShell они называются командлетами) соответствуют шаблону "глагол-существительное", например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Для одинаковых параметров внутренних команд используются стандартные имена, структура параметров во всех командах идентична, все команды обрабатываются одним синтаксическим анализатором. В результате облегчается запоминание и изучение команд.
· Обеспечение возможности расширения встроенного набора команд. Внутренние команды PowerShell могут дополняться командами, создаваемыми пользователем. При этом они полностью интегрируются в оболочку, информация о них может быть получена из стандартной справочной системы PowerShell.
· Организация поддержки знакомых команд из других оболочек. В PowerShell на уровне псевдонимов собственных внутренних команд поддерживаются наиболее часто используемые стандартные команды из оболочки Cmd.exe и Unix-оболочек. Например, если пользователь, привыкший работать с Unix-оболочкой, выполнит ls, то он получит ожидаемый результат: список файлов в текущем каталоге (то же самое относится к команде dir).
· Разработка полноценной встроенной справочной системы для внутренних команд. Для большинства внутренних команд в справочной системе дано подробное описание и примеры использования. В любом случае встроенная справка по любой внутренней команде будет содержать краткое описание всех ее параметров.
· Реализация автоматического завершения при вводе с клавиатуры имен команд, их параметров, а также имен файлов и папок. Данная возможность значительно упрощает и ускоряет ввод команд с клавиатуры.
Главной особенностью среды PowerShell, отличающей ее от всех других оболочек командной строки, является то, что единицей обработки и передачи информации здесь является объект, а не строка текста.
Типы команд PowerShell
В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы.
Данный тип команд компилируется в динамическую библиотеку (DLL) и подгружается к процессу PowerShell во время запуска оболочки (то есть сами по себе командлеты не могут быть запущены как приложения, но в них содержатся исполняемые объекты). Командлеты – это аналог внутренних команд традиционных оболочек.
Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.
Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.
Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.
Псевдонимы команд
Механизм псевдонимов, реализованный в оболочке PowerShell, дает возможность пользователям выполнять команды по их альтернативным именам (например, вместо команды Get-Childitem можно пользоваться псевдонимом dir). В PowerShell заранее определено много псевдонимов, можно также добавлять собственные псевдонимы в систему.
Псевдонимы в PowerShell делятся на два типа. Первый тип предназначен для совместимости имен с разными интерфейсами. Псевдонимы этого типа позволяют пользователям, имеющим опыт работы с другими оболочками (Cmd.exe или Unix-оболочки), использовать знакомые им имена команд для выполнения аналогичных операций в PowerShell, что упрощает освоение новой оболочки, позволяя не тратить усилий на запоминание новых команд PowerShell. Например, пользователь хочет очистить экран. Если у него есть опыт работы с Cmd.exe, то он, естественно, попробует выполнить команду cls. PowerShell при этом выполнит командлет Clear-Host, для которого cls является псевдонимом и который выполняет требуемое действие – очистку экрана. Для пользователей Cmd.exe в PowerShell определены псевдонимы cd, cls, copy, del, dir, echo, erase, move, popd, pushd, ren, rmdir, sort, type; для пользователей Unix – псевдонимы cat, chdir, clear, diff, h, history, kill, lp, ls, mount, ps, pwd, r, rm, sleep, tee, write.
Узнать, какой именно командлет скрывается за знакомым псевдонимом, можно с помощью командлета Get-Alias:
PS C:\> Get-Alias cdCommandType Name Definition----------- ---- ----------Alias cd Set-Location
Псевдонимы второго типа (стандартные псевдонимы) в PowerShell предназначены для быстрого ввода команд. Такие псевдонимы образуются из имен командлетов, которым они соответствуют. Например, глагол Get сокращается до g, глагол Set сокращается до s, существительное Location сокращается до l и т.д. Таким образом, для командлету Set-Location соответствует псевдоним sl, а командлету Get-Location – псевдоним gl.
Просмотреть список всех пседонимов, объявленных в системе, можно с помощью командлета Get-Alias без параметров. Определить собственный псевдоним можно с помощью командлета Set-Alias.
Просмотр структуры объектов
PS C:\> Get-Process | Get-Member TypeName: System.Diagnostics.Process Name MemberType Definition---- ---------- ----------Handles AliasProperty Handles = HandlecountName AliasProperty Name = ProcessNameNPM AliasProperty NPM = NonpagedSystemMemorySizePM AliasProperty PM = PagedMemorySizeVM AliasProperty VM = VirtualMemorySizeWS AliasProperty WS = WorkingSet. . .Responding Property System.Boolean Responding . . .
Здесь мы видим имя .NET-класса, экземпляры которого возвращаются в ходе работы исследуемого командлета (в нашем примере это класс System.Diagnostic.Process), а также полный список элементов объекта (в частности, интересующее нас свойство Responding, определяющего "зависшие" процессы). При этом на экран выводится очень много элементов, просматривать их неудобно. Командлет Get-Member позволяет перечислить только те элементы объекта, которые являются его свойствами. Для этого используется параметр MemberType со значением Properties:
PS C:\> Get-Process | Get-Member -MemberType Property TypeName: System.Diagnostics.ProcessName MemberType Definition---- ---------- ----------BasePriority Property System.Int32 BasePriority EnableRaisingEvents Property System.Boolean EnableRaisingEvents. ExitCode Property System.Int32 ExitCode ExitTime Property System.DateTime ExitTime Handle Property System.IntPtr Handle HandleCount Property System.Int32 HandleCount HasExited Property System.Boolean HasExited Id Property System.Int32 Id . . . Responding Property System.Boolean Responding . . .
Процессам ОС соответствуют объекты, имеющие очень много свойств, на экран же при работе командлета Get-Process выводятся лишь несколько из них (способы отображения объектов различных типов задаются конфигурационными файлами в формате XML, находящимися в каталоге, где установлен файл powershell.exe).
Рассмотрим наиболее часто используемые операции над элементами конвейера: фильтрации и сортировки.
Сортировка объектов
Сортировка элементов конвейера – еще одна операция, которая часто применяется при конвейерной обработке объектов. Данную операцию осуществляет командлет Sort-Object: ему передаются имена свойств, по которым нужно произвести сортировку, а он возвращает данные, упорядоченные по значениям этих свойств.
Например, для вывода списка запущенных в системе процессов, упорядоченного по затраченному процессорному времени (свойство cpu), можно воспользоваться следующим конвейером: PS C:\> Get-Process | Sort-Object cpu
Для сортировки в обратном порядке используется параметр Descending:
PS C:\> Get-Process | Sort-Object cpu -Descending
В рассмотренных нами примерах конвейеры состояли из двух командлетов. Это не обязательное условие, конвейер может объединять и большее количество команд, например:
Get-Process | Where-Object | Sort-Object cpu –Descending 1.9.5. Использование переменных
В переменных хранятся все возможные значения, даже если они являются объектами. Имена переменных в PowerShell всегда должны начинаться с символа «$». Можно сохранить список процессов в переменной, это позволит в любое время получать доступ к списку процессов. Присвоить значение переменной легко:
$a = get-process | sort-object CPU
Вывести содержимое переменной можно, просто напечатав в командной строке $a.
Операции с массивами
По умолчанию массивы PowerShell могут содержать элементы разных типов (целые 32-х разрядные числа, строки, вещественные и другие), то есть являются полиморфными. Можно создать массив с жестко заданным типом, содержащий элементы только одного типа, указав нужный тип в квадратных скобках перед именем переменной. Например, следующая команда создаст массив 32-х разрядных целых чисел:
При выполнении оператора += происходит следующее:
· создается новый массив, размер которого достаточен для помещения в него всех элементов;
· первоначальное содержимое массива копируется в новый массив;
· новые элементы копируются в конец нового массива.
Таким образом, на самом деле создается новый массив большего размера.
Можно объединить два массива, например $b и $c в один с помощью операции конкатенации +. Например:
Оператор PowerShell -match
Для начала изучения мы будем использовать оператор PowerShell -match, который позволяет сравнивать текст слева от него, с регулярным выражением справа. В случае если текст подпадает под регулярное выражение, оператор выдаёт True, иначе – False.
PS C:\> "PowerShell" -match "Power"
При сравнении с регулярным выражением ищется лишь вхождение строки, полное совпадение текста необязательно (разумеется, это можно изменить). То есть достаточно, чтобы регулярное выражение встречалось в тексте.
PS C:\> "Shell" -match "Power"
PS C:\> "PowerShell" -match "rsh"
Еще одна тонкость: оператор -match по умолчанию не чувствителен к регистру символов (как и другие текстовые операторы в PowerShell), если же нужна чувствительность к регистру, используется -cmatch:
PS C:\> "PowerShell" -cmatch "rsh"
Управляющие инструкции
1.11.1. Инструкция If …ElseIf … Else
В общем случае синтаксис инструкции If имеет вид
If (условие1)
[ElseIf (условие2)]
При выполнении инструкции If проверяется истинность условного выражения условие1.
Если условие1 имеет значение $True, то выполняется блок_кода1, после чего выполнение инструкции if завершается. Если условие1 имеет значение $False, проверяется истинность условного выражения условие2. Если условие2 имеет значение $True, то выполняется блок_кода2 и выполнение инструкции if завершается. Если и условие1, и условие2 имеют значение $False, то выполняется блок_кода3 и выполнение инструкции if завершается.
Примериспользования инструкции if в интерактивном режиме работы. Сначала переменной $a присвоим значение 10:
Затем сравним значение переменной с числом 15:
PS C:\> If ($a –eq 15)
>> ‘Значение $a равно 15’
Значение $a не равно 15
Из приведенного примера видно также, что в оболочке PS в интерактивном режиме можно выполнять инструкции, состоящие из нескольких строк, что полезно при отладке сценариев.
1.11.2. Циклы While и Do … While
Самый простой из циклов PS – цикл While, в котором команды выполняются до тех пор, пока проверяемое условие имеет значение $True. Инструкция While имеет следующий синтаксис:
Цикл Do … While похож на цикл While, однако условие в нем проверяется не до блока команд, а после: Do While (условие). Например:
Цикл For
Обычно цикл For применяется для прохождения по массиву и выполнения определенных действий с каждым из его элементов. Синтаксис инструкции For:
For (инициация; условие; повторение) . Пример
PS C:\> For ($i=0; $i –lt 3; $i++)
Цикл ForEach
Инструкция ForEach позволяет последовательно перебирать элементы коллекций. Самый простой тип коллекции – массив. Особенность цикла ForEach состоит в том, что его синтаксис и выполнение зависят от того, где расположена инструкция ForEach: вне конвейера команд или внутри конвейера.
Сохранение данных в файл
Get-Process | Out-File -FilePath C:\Process.txt -Encoding ASCII
Подавление вывода
Командлет Out-Null служит для поглощения любых своих входных данных. Это может пригодиться для подавления вывода на экран ненужных сведений, полученных в качестве побочного эффекта выполнения какой-либо команды. Например, при создании каталога командой mkdir на экран выводится его содержимое:
PS C:\> mkdir spo Каталог: Microsoft.PowerShell.Core\FileSystem::C:\Mode LastWriteTime Length Name---- ------------- ------ ----d---- 03.01.2009 1:01 spo
Если эта информация не нужна, то результат выполнения команды mkdir необходимо передать по конвейеру командлету Out-Null:
mkdir spo | Out-Null
1.12.5. Преобразование данных в формат html, сохранение в файле и просмотр результатов
Для преобразования данных в формат html служит командлет Convertto-html. Параметр Property определяет свойства объектов, включаемые в выходной документ. Например, для получения списка выполняемых процессов в формате html, включающего имя процесса и затраченное время CPU и записи результата в файл processes.html можно использовать команду
Get-Process | Convertto-html -Property Name, CPU > Processes.htmДля просмотра содержимого файла можно использовать командлет Invoke-Item “имя документа”Например Invoke-Item “processes.htm”
Псевдонимы команд.
Управляющие инструкции PS.
Как создать массив в PS?
Как объединить два массива?
Как ввести данные в массив?
Оператор PowerShell –match.
19. Использование символа ^ в командлетах.
20. Использование символа $ в командлетах.
Оболочка командной строки Windows PowerShell 2.0
Цель работы – знакомство с основными возможностями оболочки командной строки Windows PowerShell 2.0
Закрытие вкладки сценария
На вкладке файла, которую нужно закрыть, щелкните значок закрытия (X) или откройте меню File (Файл) и выберите Close (Закрыть).
Если файл был изменен с момента последнего сохранения, будет предложено сохранить или отменить изменения.
Отображение пути к файлу
На вкладке файла наведите курсор на его имя. Появится подсказка с полным путем к файлу сценария.
Вставка текста в области сценариев
Нажмите клавиши CTRL + V , щелкните значок Paste (Вставить) на панели инструментов или выберите Paste (Вставить) в меню Edit (Правка).
Копирование текста в области сценариев
В области сценариев выделите текст, который требуется скопировать.
Нажмите клавиши CTRL + C , щелкните значок Copy (Копировать) на панели инструментов или выберите Copy (Копировать) в меню Edit (Правка).
Написание справки для сценариев
Раздел справки для скрипта можно написать с помощью любого из двух следующих методов.
Comment-Based справки по сценариям
Создайте раздел справки, используя специальные ключевые слова в комментариях. Чтобы создать справку на основе комментариев для сценария, необходимо поместить комментарии в начало или в конец файла скрипта. Дополнительные сведения о справке на основе комментариев см. в разделе about_Comment_Based_Help.
XML-Based справки по сценариям
Создайте раздел справки на основе XML, например тип, который обычно создается для командлетов. При преобразовании разделов справки на несколько языков требуется справка на основе XML.
Чтобы связать скрипт с разделом справки на основе XML, используйте. Ключевое слово комментария справки Екстерналхелп. Дополнительные сведения о ключевом слове Екстерналхелп см. в разделе about_Comment_Based_Help. Дополнительные сведения о справке на основе XML см. в разделе как написать справку по командлетам.
Создание и выполнение сценариев
В области скриптов можно открывать и редактировать файлы Windows PowerShell. Сейчас нас интересуют следующие типы файлов Windows PowerShell: файлы скриптов ( .ps1 ), файлы данных скриптов ( .psd1 ) и файлы модулей скриптов ( .psm1 ). Эти типы файлов имеют цветовую подсветку синтаксиса в редакторе области сценариев. Другие стандартные файлы, которые можно открыть в области сценариев, — это файлы конфигурации ( .ps1xml ), XML-файлы и текстовые файлы.
Политика выполнения Windows PowerShell определяет, можно ли выполнять сценарии, загружать профили Windows PowerShell и файлы конфигурации. Политика выполнения по умолчанию, Restricted, запрещает выполнение сценариев и блокирует загрузку профилей. Чтобы изменить эту политику выполнения и разрешить загрузку и использование профилей, см. описание Set-ExecutionPolicy и about_Signing.
Использование блоков сценариев
Invoke-Command также может выполнять блоки скриптов с блоками параметров. Параметры присваиваются по положению с помощью параметра ArgumentList .
Блок скрипта в предыдущем примере использует param ключевое слово для создания параметров $p1 и $p2 . Строка "First" привязывается к первому параметру ( $p1 ), а "Second" — к ( $p2 ).
Дополнительные сведения о поведении ArgumentList см. в разделе about_Splatting.
Переменные можно использовать для хранения и выполнения блоков сценариев. В приведенном ниже примере блок скрипта сохраняется в переменной и передается Invoke-Command в.
Оператор Call — это еще один способ выполнения блоков сценариев, хранящихся в переменной. Как Invoke-Command и оператор Call, выполняет блок скрипта в дочерней области. Оператор Call может упростить использование параметров с блоками скриптов.
Выходные данные из блоков скрипта можно сохранить в переменной с помощью присваивания.
Дополнительные сведения о операторе Call см. в разделе about_Operators.
Выполнение части сценария
Другие функции сценариев
В PowerShell есть много полезных функций, которые можно использовать в скриптах.
$PSCommandPath — Содержит полный путь и имя выполняемого скрипта. Этот параметр допустим во всех скриптах. Эта автоматическая переменная появилась в PowerShell 3,0.
$PSScriptRoot — Содержит каталог, из которого выполняется скрипт. В PowerShell 2,0 эта переменная допустима только в модулях скриптов ( .psm1 ). Начиная с PowerShell 3,0, он действителен во всех скриптах.
$MyInvocation``$MyInvocation — Автоматическая переменная содержит сведения о текущем скрипте, включая сведения о том, как он был запущен или вызван. Эту переменную и ее свойства можно использовать для получения сведений о скрипте во время его выполнения. Например, $MyInvocation . Переменная Микомманд. path содержит путь и имя файла скрипта. $MyInvocation . Строка содержит команду, которая запустила скрипт, включая все параметры и значения.
Начиная с PowerShell 3,0, $MyInvocation имеет два новых свойства, которые предоставляют сведения о скрипте, который вызывал или вызывает текущий скрипт. Значения этих свойств заполняются только в том случае, если вызывающий элемент или вызвавший объект является сценарием.
Пскоммандпас содержит полный путь и имя скрипта, который вызывал или вызывает текущий скрипт.
PSScriptRoot содержит каталог скрипта, вызвавшего или вызвавшего текущий скрипт.
В отличие $PSCommandPath от и $PSScriptRoot автоматических переменных, содержащих сведения о текущем скрипте, свойства $MyInvocation пскоммандпас и PSScriptRoot этой переменной содержат сведения о скрипте, вызвавшем текущий скрипт.
Разделы данных. Вы можете использовать Data ключевое слово для разделения данных из логики в скриптах. Разделы данных также могут упростить локализацию. Дополнительные сведения см. в разделе about_Data_Sections и about_Script_Internationalization.
Подпись скрипта. Вы можете добавить цифровую подпись к сценарию. В зависимости от политики выполнения можно использовать цифровые подписи для ограничения выполнения скриптов, которые могут включать ненадежные команды. Дополнительные сведения см. в разделе about_Execution_Policies и about_Signing.
Определяет, что такое блок скрипта, и объясняет, как использовать блоки сценариев на языке программирования PowerShell.
Сохранение сценария с определенным именем
- В меню Файл выберите пункт Сохранить как. Появится диалоговое окно Сохранить как.
- В поле Имя файла введите имя файла.
- В поле Тип файла выберите тип файла. Например, в поле Тип сохраняемого файла выберите "Скрипты PowerShell ( *.ps1 )".
- Нажмите Сохранить.
Отмена действия в области сценариев
Нажмите клавиши CTRL + Z , щелкните значок Undo на панели инструментов или выберите Отменить в меню Правка.
Область скрипта и источники с точкой
Каждый скрипт выполняется в отдельной области. Функции, переменные, псевдонимы и диски, созданные в сценарии, существуют только в области скрипта. Доступ к этим элементам или их значениям в области, в которой выполняется скрипт, невозможен.
Чтобы выполнить скрипт в другой области, можно указать область, например Global или local, или создать точку для скрипта.
Функция «с точкой» позволяет запускать скрипт в текущей области, а не в области скрипта. При запуске скрипта, который имеет точку с точкой, команды в скрипте выполняются так, будто были введены в командной строке. Функции, переменные, псевдонимы и диски, создаваемые сценарием, создаются в области, в которой выполняется работа. После выполнения скрипта можно использовать созданные элементы и получить доступ к их значениям в сеансе.
Чтобы создать точку скрипта для исходного кода, введите точку (.) и пробел перед путем к сценарию.
или диспетчер конфигурации служб
UtilityFunctions.ps1 После выполнения скрипта функции и переменные, создаваемые сценарием, добавляются в текущую область.
Например, UtilityFunctions.ps1 Скрипт создает New-Profile функцию и $ProfileName переменную.
При запуске UtilityFunctions.ps1 скрипта в собственной области New-Profile скрипта функция и $ProfileName переменная существуют только во время выполнения скрипта. При завершении работы скрипта удаляется функция и переменная, как показано в следующем примере.
Когда вы подаете скрипту точку и запускаете его, сценарий создает New-Profile функцию и $ProfileName переменную в своем сеансе в вашей области. После выполнения скрипта можно использовать New-Profile функцию в сеансе, как показано в следующем примере.
Дополнительные сведения об области действия см. в разделе about_Scopes.
Выполнение сценариев на других компьютерах
Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр Invoke-Command FilePath командлета.
Введите путь и имя файла скрипта в качестве значения параметра FilePath . Скрипт должен находиться на локальном компьютере или в каталоге, к которому локальный компьютер может получить доступ.
Следующая команда запускает Get-ServiceLog.ps1 сценарий на удаленных компьютерах с именем Server01 и Server02.
Запуск сценария
Читайте также: