Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Работа с конфигурацией оболочки




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

Проще всего эти установки выполняются с помощью диалогового окна оболочки. Для его вызова нужно установить курсор мыши на заголовке окна, кликнуть правой кнопкой и выбрать пункт Свойства в появившемся контекстном меню. Должно появиться диалоговое окно (рис. 4)

Окно имеет несколько вкладок (Общие, Шрифт, Расположение, Цвета), каждая из которых позволяет настраивать определенную группу параметров. Здесь можно буферирование и запоминание интерактивно выполняемых команд с целью их последующего использования отдельным блоком в сценарии.

После выбора и установки всех нужных параметров следует нажать кнопку ОК. Система тут же требует указаний, к какому объекту применить эти изменения (рис. 5). Если изменения свойств должны действовать постоянно, то следует выбрать переключатель Сохранить свойства для других окон

 

Рис. 4 Диалоговое окно для установки параметров оболочки.

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

Рис. 5 Выбор объекта установки параметров оболочки.

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

По умолчанию командлет Get-Host без параметров отображает информацию о самой оболочке (региональные настройки, версия и т.п.):

Рис. 6 Обобщенные данные оболочки PowerShell и место размещения ее параметров

В команде (Get-Host).UI имя командлета взято в круглые скобки. Это обозначает, что требуется выполнить данный командлет и сформировать выходной объект. Только после этого извлекается свойство объекта UI. Пройдя эту цепочку, получаем доступ к параметрам командного окна:

Рис. 7 Параметры командного окна оболочки PowerShell

Значение каждого из перечисленных параметров можно изменить, настраивая внешний вид окна по желанию. При изменениях параметров целесообразно объект RawUI сохранить в качестве значения отдельной переменной [1]. Покажем, например, как изменить цвет фона и текста. Свойство BackgroundColor отвечает за цвет фона, а ForegroundColor – за цвет текста. В качестве цветов можно использовать следующие 16: Black, Gray, Red, Magenta, Yellow, Blue, Green, Cyan, White, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, DarkGray, DarkBlue. Установим желтый цвет текста на темно-синем фоне. Такое сочетание цветов часто используется в различных системах программирования. Желаемый эффект обеспечивается выполнением следующих трех команд.

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

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

$b=$a.WindowSize. Переопределим значения ширины и высоты командами $b.Width=80 и $b.Height=25, а затем изменим содержимое объекта WindowSize переменной $a, то есть выполним команду $a.WindowSize=$b.

Последняя строка рис. 7 отражает заголовок командного окна PowerShell. Оно достаточно длинное и непривлекательное. Выполнив команду $a.WindowTitle=” Мое командное окно”, получаем более приемлемое название.

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

Не рассматривая подробно составные части формата, так как это можно сделать, используя справочную систему, укажем, как создать приглашение, эквивалентное командной строке cmd.exe.

В данной команде используется конструкция “$(Get-Location)…, называемая подвыражением (subexpression). Подвыражение – это блок кода на языке PowerShell, который в строке заменяется значением, полученным в результате выполнения этого кода.

Все иллюстрированные выше настройки выполнялись в интерактивном режиме и их действие распространяется лишь на время текущего сеанса работы. После окончания сеанса работы в оболочке PowerShell они утрачивают силу.

Для сохранения настроек с целью их регулярного, а может быть и повседневного, использования необходимо создать файл с соответствующим набором команд-настроек. Этот файл текстового типа получил название профиль. Профиль – это сценарий, который будет загружаться и активизировать необходимые настройки при каждом запуске оболочки PowerShell. Значение профиля очень близко значениям файлов autoexec.bat для ранних и autoexec.nt для современных версий ОС Windows. Все они предназначаются для автоматического выполнения требуемых подготовительных работ. Корректно составленный профиль призван обеспечить не только комфортные условия работы пользователя, но и создать удобства для администрирования. Разработка и распространение профилей позволяет использовать единые условия работы пользователей на группе компьютеров в распределенной среде, например, в локальных компьютерных сетях.

В зависимости от уровня выполняемых настроек и значимости администрируемых ресурсов можно формировать профили четырех видов:

- профили, действующие на всех пользователей сети и на все их оболочки PowerShell (хосты);

- профили, действующие на всех пользователей сети с использованием единой оболочки PowerShell;

- профили, действующие только на текущего пользователя и на все оболочки;

- профили, действие которых распространяется только на текущего пользователя и только на хост powershell.exe.

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

Каждый тип профиля имеет свое место хранения в особой зоне ОС Windows. При работе с оболочкой на автономном компьютере используется только пользовательский профиль, относящийся к последнему типу. Место его расположения и имя файла можно определить по значению специальной переменной $profile:

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

Если профиль создан, то реакция будет True, в противном случае – False.

По умолчанию, даже если профиль создан, выполнение блока его команд запрещено. Параметр политики выполнения устанавливается Restricted. Это сделано для обеспечения безопасности системы.

Автоматическое выполнение сценариев профиля с цифровой подписью разрешается при параметрах политики выполнения AllSigned и RemoteSigned. Возможно выполнение сценариев и без цифровой подписи при параметре Unrestricted. В этом случае система выдает предупреждение и требует подтверждения со стороны пользователя. Узнать, какая политика является активной, можно с помощью команды

Переустановка значения параметра обеспечивается командлетом Set-ExecutionPolicy и далее через пробел пишется название политики выполнения, например, RemoteSigned. Запоминать имена возможных политик нет необходимости. Установив курсор после имени командлета, и нажимая клавишу Tab, можно перебрать все варианты политик выполнения, оставив необходимую.

Задание 4.

1. Вызвать диалоговое окно оболочки для проверки и установки параметров командного окна. Внимательно изучить рубрики вкладок Общие, Шрифт, Расположение, Цвета. Просмотреть, как изменение различных параметров отражается на внешнем виде командного окна.

2. Изучить последовательность команд для программного изменения свойств консоли. По образцу и подобию установить новые размеры командного окна, применить другие сочетания цветов.

3. Изменить название командного окна.

 

Работа с объектами

Оболочка PowerShell относится к объектно-ориентированной среде, в которой все действия совершаются над объектами – ресурсами компьютерных систем. Каждый объект в общем случае включает совокупность данных, отражающих свойства объекта, и модули обработки этих данных (методы объекта).

Фундаментом оболочки следует считать платформу Microsoft.NET, так как она изначально предназначалась для разработки различных информационных систем. В составе этой платформы уже заложен набор сетевых служб и серверов, что позволяет создать программный образ функционирования любой системы. Часть этой платформы Microsoft.NET Framework предназначается для разработки приложений. Она дает большие преимущества для разработчиков программ в части использования различных систем программирования.

Самым мощным достоинством платформы служит наличие в ней обширной библиотеки классов (тысячи классов), содержащих готовые, отлаженные и постоянно пополняемые методы обработки. Мощнейшим средством обработки данных в оболочке PowerShell является использование конвейеров. Конвейер – это последовательность команд, разделенных вертикальной чертой, в которой результаты обработки одной команды передаются другой команде.

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

Покажем на примерах, какой арсенал средств может применять пользователь в своей работе.

Очень часто при анализе многопрограммной работы компьютера возникает задача определения, какие процессы и как используют ресурсы системы. Начальную информацию можно получить, включив командлет Get-Process, который отражает часть данных о всех активных процессах. Результатом является список из нескольких десятков запущенных в системе процессов. Каждая запись содержит набор параметров-характеристик процессов. Некоторые из них интуитивно понятны (ProcessName – имя процесса, CPU(s) – время, затрачиваемое на работу процесса в секундах), другие имеют не всегда понятные сокращения.

….

Для понимания смысла всех сокращений и выяснения полной структуры объекта целесообразно использовать конвейер двух командлетов Get-Process|Get-Member. Для сокращения длины команды и уменьшения трудоемкости набора можно записать конвейер из псевдонимов этих командлетов gps|gm.

….

На экран выводится весь перечень свойств процессов. Перед списком указывается, к какому.NET-типу относятся все названия свойств (System.Diagnostics.Process). Если требуется только вывести определенную категорию свойств, то следует задать значение типа параметра.

….

В оболочке PowerShell имеется несколько конфигурационных файлов, необходимых для отображения объектов различных типов. Они находятся в том же каталоге, что и powershell.exe и имеют названия, заканчивающиеся *format.ps1xm1.

Второй файл в этом списке dotnettypes.format.ps1xm1 предназначается для форматирования объектов System.Diagnostics.Process.

Приведенные примеры показывают, что количество выводимых данных может быть огромно и требуется иметь средства, позволяющие отсеивать ненужную информацию и выделять требуемую. Обычно для этого используются процедуры сортировки и фильтрации. Именно сортировка призвана служить сокращению числа операций перебора при поиске требуемых данных. Создание рабочих массивов данных, упорядоченных по определенному параметру, позволяет использовать методы дихотомии согласно зависимости

,

где N – количество элементов в исходном анализируемом массиве,

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

За операции сортировки отвечает командлет Sort-Object. В качестве его параметра указываются имена свойств, по которым упорядочиваются объекты. Выведем список процессов, упорядоченный в соответствии с требуемым процессорным временем.

….

Для получения списка, упорядоченного в порядке убывания процессорного времени должен быть включен параметр –Descending.

….

Часто в отсортированном списке наибольший интерес представляют записи, имеющие максимальные или минимальные значения некоторых параметров. Для выявления подобных объектов в списке командлетов имеется Select-Object, который позволяет в отсортированном списке отбирать несколько первых записей (-First) или последних (-Last). Например, для выявления пяти процессов, использующих наибольшие объемы памяти (свойство WS), можно сформировать команду-конвейер, состоящую из трех командлетов.

Фильтрацию данных обычно используют, применяя командлет Where-Object. Например, для определения данных об остановленных службах (свойство Status равно “Stopped”) следует сформировать команду

Появляется информация о нескольких десятках остановленных службах. Следует обратить внимание, что при сравнении свойств в фигурных скобках командлета не используются знаки =, <, >, а операторы сравнения задаются мнемоническими сокращениями (табл. 2).

Таблица 2. Операторы сравнения в PowerShell

Оператор Значение Пример (возвращается значение True)
-eq Равно 10 –eq 10
-ne Не равно 9 –ne 10
-lt Меньше 3 –lt 4
-le Меньше или равно 3 –le 4
-gt Больше 4 -gt 3
-ge Больше или равно 4 –ge 3
-like Сравнение на совпадение с учетом подстановочного знака во втором операнде “file.doc” –like “f*.doc”
-notlike Сравнение на несовпадение с учетом подстановочного знака во втором операнде “file.doc” –notlike “f*.rtf”
-contains Содержит 1, 2, 3 –contains 1
-notcontains Не содержит 1, 2, 3 –notcontains 4

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

Одной из типовых задач является определение суммарного объема некоторой группы файлов. Подсчитаем объем памяти с точностью до байта, занимаемый каталогом, например, \user. Решение этой задачи можно обеспечить последовательностью команд.

Первая строка формирует переменную $TotalLength со значением нуль, вторая строка представлена конвейером из двух командлетов, подсчитывающим суммарный объем памяти. Командлет ForEach-Object обеспечивает циклическое накопление суммы. Третья строка считывает полученный итог. Эту же задачу в более расширенном функциональном формате можно решить, используя командлет Measure-Object.

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

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

Функции

Набор командлетов оболочки PowerShell вполне можно отнести к языку запросов. В терминах СУБД Microsoft “Access” они обеспечивают запросы-выборки, в которых имя командлета указывает на объект с которым работает пользователь, а вариация параметров является, по существу, инструкцией, какие данные и в каком виде должны быть представлены в результате выполнения запроса. Комбинированное действие командлетов в виде конвейеров позволяет получить более сложные виды запросов: запросы с группировкой, перекрестные запросы, запросы с параметрами, запросы-действия и т.п.

Функциональность каждого командлета изменить нельзя, так как их программный код из оболочки не доступен. Только функции и сценарии позволяют формировать программный код, который пользователь создает по своему желанию. Обработка данных в зависимости от контекста работ и специфики аппаратных и программных ресурсов может осуществляться с различной степенью детализации.

Функция в PowerShell - это блок кода, имеющий уникальное имя. Этот блок активизируется при первом к нему обращении и остается действительным до завершения текущего сеанса работы с оболочкой. Функции могут быть очень простыми, без параметров и очень сложными с формальными и замещаемыми параметрами. Они могут включаться в конвейеры и возвращать значения не только некоторых переменных, а даже целых массивов переменных различного типа данных.

Ограниченный объем главы не позволяет глубоко ознакомить с особенностями встроенного языка программирования, но следует отметить, что функциональность языковых средств программирования очень высокая и это позволяет создавать очень эффективные программы. Язык программирования оболочки PowerShell требует отдельного рассмотрения. Ниже будут приведены примеры построения функций различной сложности. Контекст программ, включаемый в функции, достаточно прост и особых пояснений не требует.

Для определения функции используется формат

Function Имя_функции {тело функции} [аргументы],

где Function – ключевое слово, которым объявляется новая функция,

Имя_функции – присваиваемое уникальное имя,

{тело функции} – набор операторов встроенного языка программирования, обеспечивающих обработку данных. Тело функции обязательно заключается в фигурные скобки,

[аргументы] – набор аргументов и параметров функции. Квадратные скобки указывают, что аргументы и параметры не являются обязательным элементом, они могут отсутствовать.

Покажем пример формирования простейшей функции без аргументов [1]. Создадим функцию MyFunc, формирующую текстовое сообщение:

Для активизации функции надо в командную строку записать ее имя:

По данной схеме можно создавать функции, извещающие пользователя о начале и прекращении каких-либо работ в системе.

В более сложных случаях функции могут использовать аргументы, которые передаются ей при запуске. Имеется два вида обработки аргументов: с помощью переменной $Args и путем задания формальных параметров. Рассмотрим оба варианта обработки аргументов.

В оболочке PowerShell имеется переменная $Args, которая в общем случае является массивом, элементы которого могут быть параметрами функции, заданными при ее запуске.

Переопределим предыдущую функцию таким образом, чтобы она могла принимать переменные значения:

Переменная $Args помещена в тело функции, заключенное в двойные кавычки. Это обозначает, что при запуске функции она примет значения аргументов и вставит их в строку результата.

Внутри переменной $Args, являющейся массивом, можно обращаться к элементам массива по их порядковому номеру. Например, если требуется подсчитать сумму нескольких чисел и знать их количество, то функцию SumArgs можно определить следующим образом.

Смысл данной программы достаточно понятен. У этой функции может быть переменное число аргументов. Пусть требуется сложить пять слагаемых: 50, 14, 4, 7, 33.

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

Другим методом учета аргументов является задание формальных параметров функции, значения которых замещаются значениями аргументов. Это типовой прием во многих системах программирования.

Рассмотрим несколько примеров. Сначала очень простой пример. Определим функцию, обеспечивающую сложение двух аргументов.

При определении функции выражение в круглых скобках устанавливает порядок ввода и анализа переменных, а выражение в фигурных скобках формирует тело функции. По умолчанию эта функция, как и другая функция PowerShell, ведет себя полиморфным образом. Она учитывает и “приспосабливается” к желаниям пользователей. Просмотрим несколько вариантов работы функции с различными типами данных.

Примеры показывают, что программа по-разному себя ведет, принимая данные различных типов. Контекст выполнения функции строится в зависимости от типа данных. Она может складывать целые числа, числа с плавающей точкой. Если аргументы имеют данные различных типов, то программа их приводит к типу первого слагаемого. Последние две строки демонстрируют правила округления и перевода вещественных чисел в целочисленную форму. Вторая строка показывает, что при “сложении” строковых данных включается конкатенация (соединение) строк.

Контекст выполнения функции можно отследить командой

Основные достоинства PowerShell заключаются в реализации различных конвейеров. Функции, как средства обработки, играют здесь очень важную роль. С помощью их можно перебирать, анализировать, фильтровать и обсчитывать элементы потоковой информации, а также разрабатывать новые командлеты. Покажем работу функции в конвейере при поступлении потока данных. Для передачи потоковых данных в PowerShell служит переменная $Input, которая предназначается для хранения коллекции входящих объектов.

Создадим функцию Sum, обеспечивающую суммирование элементов входящего потока [1].

Создадим простейший входной поток из целых чисел от 1 до 10. В этом случае функция должна подсчитать сумму членов арифметической прогрессии.

Запуск конвейера формирует ответ, подсчитанная сумма равна 55.

Сценарии

Частично построение сценариев затрагивалось в п. 1.4.2 при формировании профилей. В общем случае сценарий представляет собой текстовый файл, содержащий набор команд управления в необходимой последовательности. Как и в любой системе программирования для создания программ следует выбирать текстовый редактор, имеющий минимальное количество невидимых символов форматирования, например, редактор Блокнот (Notepad). Файл со сценарием должен иметь расширением *.ps1. Создать файл со сценарием с можно четырьмя различными способами:

- вызвать текстовый редактор и вручную набрать в нужной последовательности команды управления. После окончания набора сохранить файл с нужным расширением;

- выполнить необходимые команды в оболочке PowerShell, скопировать их с консоли в буфер Windows и вставить в текстовый файл, открытый во внешнем текстовом редакторе;

- при работе в окне PowerShell включить с помощью командлета Start-Transcript режим протоколирования команд. После окончания сеанса выдать команду Stop- Transcript, что прекращает процесс формирования журнала.

- при работе в оболочке PowerShell команды, подлежащие размещению в сценарии, оформляются в виде строковых данных (заключаются в одиночные апострофы) и с помощью символов > и >> одна за другой перенаправляются в файл сценария *.ps1. Символ > размещает строку в начале файла, а символы >>записывают строки в конец файла. Например,

PS C:\>’Команда – строка, помещаемая в сценарий’ >> *.ps1

 

Искусство написания сценариев требует большого опыта работы пользователя в качестве администратора компьютерных систем. Имеются даже библиотеки с сотнями сценариев, которые можно использовать в типовых вариантах управления (http://www.ecom.ru/catalog_18/fileData/file_23_4.zip).

Рассмотрим в качестве примера процесс подготовки простого файла-сценария и его выполнения. Пусть он будет выполнять действия, аналогичные функции, созданной в п.1.5 (подсчет количества аргументов и суммы их значений). Пример одновременно продемонстрирует, как можно передавать значения аргументов в сценарии.

В каталоге пользователя создадим подкаталог PScript, в котором и сформируем требуемый файл.

Войдем в созданный каталог и построчно введем знакомую программу. Знаки ‘@ указывают на начало и конец программы. Последняя строка программы присваивает файлу сценария имя SumArgs.ps1.

Попытка сразу выполнить файл сценария к успеху обычно не приводит. По соображениям безопасности здесь имеется несколько уровней защиты. Сначала надо проверить значение политики выполнения сценариев. По умолчанию она устанавливается Restricted. Может быть установлена и более строгая AllSigned.

В этих случаях требуется установить политику RemoteSigned. Именно она позволяет выполнять неподписанные локальные сценарии. Еще одной ступенью защиты является специфический запуск сценариев. При запуске сценария обязательно должен прописываться полный путь к файлу сценария *.ps1. Чтобы снизить трудоемкость набора длинных путей к файлу сценария, при его запуске из текущего каталога разрешается сокращенная запись пути к файлу.\SumArgs. Здесь знак точки (.) и соответствует текущему каталогу, как в Unix- и Linux-системах.

Сценарий выполнен.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...