Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Оболочка командной строки Windows PowerShell 2.0↑ Стр 1 из 8Следующая ⇒ Содержание книги Поиск на нашем сайте
Оболочка командной строки Windows PowerShell 2.0
Цель работы – знакомство с основными возможностями оболочки командной строки Windows PowerShell 2.0
1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Цели и задачи создания новой оболочки Новая оболочка Windows PowerShell была задумана разработчиками Microsoft как более мощная среда для написания сценариев и работы из командной строки. Разработчики PowerShell преследовали несколько целей, главная из которых – создание среды составления сценариев, которая наилучшим образом подходила бы для современных версий ОС 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 В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы. Первый тип – так называемые командлеты (cmdlet). Этот термин используется пока только внутри PowerShell. Командлет – аналог внутренней команды интерпретатора командной строки - представляет собой класс.NET, порожденный от базового класса Cmdlet; разрабатываются командлеты с помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов для встроенной справки. Командлеты рассматриваются в данной работе. С командами других типов можно ознакомиться, используя [1]. Данный тип команд компилируется в динамическую библиотеку (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. Просмотр структуры объектов Для анализа структуры объекта, возвращаемого определенной командой, проще всего направить этот объект по конвейеру на командлет Get-Member (псевдоним gm), например: 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 {get;}...Здесь мы видим имя.NET-класса, экземпляры которого возвращаются в ходе работы исследуемого командлета (в нашем примере это класс System.Diagnostic.Process), а также полный список элементов объекта (в частности, интересующее нас свойство Responding, определяющего "зависшие" процессы). При этом на экран выводится очень много элементов, просматривать их неудобно. Командлет Get-Member позволяет перечислить только те элементы объекта, которые являются его свойствами. Для этого используется параметр MemberType со значением Properties: Процессам ОС соответствуют объекты, имеющие очень много свойств, на экран же при работе командлета 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 {$_.Id -gt 1000} | Sort-Object cpu –Descending 1.9.5. Использование переменныхВ переменных хранятся все возможные значения, даже если они являются объектами. Имена переменных в PowerShell всегда должны начинаться с символа «$». Можно сохранить список процессов в переменной, это позволит в любое время получать доступ к списку процессов. Присвоить значение переменной легко: $a = get-process | sort-object CPUВывести содержимое переменной можно, просто напечатав в командной строке $a.
Операции с массивами По умолчанию массивы PowerShell могут содержать элементы разных типов (целые 32-х разрядные числа, строки, вещественные и другие), то есть являются полиморфными. Можно создать массив с жестко заданным типом, содержащий элементы только одного типа, указав нужный тип в квадратных скобках перед именем переменной. Например, следующая команда создаст массив 32-х разрядных целых чисел: PS C:\> [int[]]$a=1,2,3 Массивы PowerShell базируются на.NET-массивах, имеющих фиксированную длину, поэтому обращение за предел массива фиксируется как ошибка. Имеется способ увеличения первоначально определенной длины массива. Для этого можно воспользоваться оператором конкатенации + или +=. Например, следующая команда добавит к массиву $a два новых элемента со значениями 5 и 6: PS C:\> $a PS C:\>$a+=5,6 PS C:\>$a При выполнении оператора += происходит следующее: · создается новый массив, размер которого достаточен для помещения в него всех элементов; · первоначальное содержимое массива копируется в новый массив; · новые элементы копируются в конец нового массива. Таким образом, на самом деле создается новый массив большего размера. Можно объединить два массива, например $b и $c в один с помощью операции конкатенации +. Например: PS C:\> $d=$b+$c
Оператор PowerShell -match Для начала изучения мы будем использовать оператор PowerShell -match, который позволяет сравнивать текст слева от него, с регулярным выражением справа. В случае если текст подпадает под регулярное выражение, оператор выдаёт True, иначе – False. PS C:\> "PowerShell" -match "Power" True При сравнении с регулярным выражением ищется лишь вхождение строки, полное совпадение текста необязательно (разумеется, это можно изменить). То есть достаточно, чтобы регулярное выражение встречалось в тексте. PS C:\> "Shell" -match "Power" False PS C:\> "PowerShell" -match "rsh" True Еще одна тонкость: оператор -match по умолчанию не чувствителен к регистру символов (как и другие текстовые операторы в PowerShell), если же нужна чувствительность к регистру, используется -cmatch: PS C:\> "PowerShell" -cmatch "rsh" False
Управляющие инструкции 1.11.1. Инструкция If …ElseIf … Else
В общем случае синтаксис инструкции If имеет вид If (условие1) {блок_кода1} [ElseIf (условие2)] {блок_кода2}] [Else {блок_кода3}] При выполнении инструкции If проверяется истинность условного выражения условие1. Если условие1 имеет значение $True, то выполняется блок_кода1, после чего выполнение инструкции if завершается. Если условие1 имеет значение $False, проверяется истинность условного выражения условие2. Если условие2 имеет значение $True, то выполняется блок_кода2 и выполнение инструкции if завершается. Если и условие1, и условие2 имеют значение $False, то выполняется блок_кода3 и выполнение инструкции if завершается. Пример использования инструкции if в интерактивном режиме работы. Сначала переменной $a присвоим значение 10: PS C:\> $a=10 Затем сравним значение переменной с числом 15: PS C:\> If ($a –eq 15) { >> ‘Значение $a равно 15’ >> } >> Else {‘ Значение $a не равно 15‘} >> Значение $a не равно 15 Из приведенного примера видно также, что в оболочке PS в интерактивном режиме можно выполнять инструкции, состоящие из нескольких строк, что полезно при отладке сценариев.
1.11.2. Циклы While и Do … While Самый простой из циклов PS – цикл While, в котором команды выполняются до тех пор, пока проверяемое условие имеет значение $True. Инструкция While имеет следующий синтаксис: While (условие) {блок_команд} Цикл Do … While похож на цикл While, однако условие в нем проверяется не до блока команд, а после: Do {блок_команд} While (условие). Например: PS C:\> $val=0 PS C:\>Do {$val++; $val} While ($val –ne 3)
Цикл For
Обычно цикл For применяется для прохождения по массиву и выполнения определенных действий с каждым из его элементов. Синтаксис инструкции For: For (инициация; условие; повторение) {блок_команд}. Пример PS C:\> For ($i=0; $i –lt 3; $i++) {$i }
Цикл ForEach
Инструкция ForEach позволяет последовательно перебирать элементы коллекций. Самый простой тип коллекции – массив. Особенность цикла ForEach состоит в том, что его синтаксис и выполнение зависят от того, где расположена инструкция ForEach: вне конвейера команд или внутри конвейера. Сохранение данных в файл Командлет Out-File позволяет направить выводимые данные вместо окна консоли в текстовый файл. Аналогичную задачу решает оператор перенаправления (>), однако командлет Out-File имеет несколько дополнительных параметров, с помощью которых можно более гибко управлять выводом: задавать тип кодировки файла (параметр Encoding), задавать длину выводимых строк в знаках (параметр Width), выбирать режим перезаписи файла (параметр Append). Например, следующая команда направит информацию о выполняющихся на компьютере процессах в файл C:\Process.txt, причем данный файл будет записан в формате ASCII: 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
1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
|
||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 921; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.119.163 (0.008 с.) |