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

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

Создание файла профиля

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

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

$profile

Конкретный путь, указанный в переменной $profile, определяется именем пользователя и операционной системой. Скажем, в среде Windows Vista путь будет иметь приблизительно такой вид: C:\Users\user1\Documents\Windows PowerShell\Microsoft.PowerShell_profile.ps1. В среде Windows XP путь может выглядеть так: C:\Documents and Settings\user1\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Чтобы создать файл профиля с переменной $profile, нужно воспользоваться командой New-Item и определить переменную $profile как значение параметра -path, вот так:

New-Item -path $profile `
-itemType file -force

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

После создания файла можно открыть его, вызвав редактор Notepad. Это можно сделать, не покидая среды PowerShell с помощью кода

Notepad $profile

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

Добавление содержимого в файл профиля

Чтобы добавить в файл профиля содержимое, следует просто ввести инструкции, как вы вводили бы их с консоли PowerShell. Например, можно определить такую переменную:

# Получить день недели и дату
$today = Get-Date -displayHint date

Переменная $today возвращает текущий день недели и дату. При добавлении кода в файл профиля всегда полезно включать комментарии, в которых раскрывается назначение кода (строка, предваряемая знаком «решетка»). PowerShell игнорирует все строки, в начале которых стоит этот знак.

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

#Получить 10 последних событий.
function events ($log="system")
{
Get-EventLog $log -newest 10
}

Функция events возвращает 10 последних событий, зафиксированных в указанном журнале. Если же при вызове этой функции вы не зададите имя журнала в качестве входного параметра, она возвратит события из журнала System. Сведения о пользовательских функциях можно найти в статье «Create Your Own PowerShell Functions» (http://windowsitpro.com/article/articleid/101610/create-your-own-powershell-functions.html). Завершив ввод инструкций в файл профиля, сохраните файл и закройте программу Notepad. Образец файла профиля представлен на экране 1.

Экран 1. Добавление в файл профиля переменной $today и функции events

Чтобы использовать файл профиля, нужно перезапустить оболочку PowerShell. Но прежде чем это сделать, следует выяснить, как настроена политика выполнения PowerShell. Политика выполнения (execution policy) определяет, может ли выполняться файл сценария (а надо сказать, что файлы профилей относятся к типу файлов сценариев). Файлы сценариев и файлы профилей представляют собой текстовые файлы с расширением ps1. По умолчанию PowerShell задает для политики выполнения значение Restricted; это означает, что файлы сценариев не выполняются, а файлы профилей не загружаются.

Чтобы определить, как настроена политика выполнения, запустите команду

Get-ExecutionPolicy

Если оболочка PowerShell возвратит настройку Restricted, как показано на экране 2, эту настройку можно изменить с помощью команды Set-ExecutionPolicy. Но перед тем как приступать к выбору настройки для политики выполнения, познакомьтесь со справочным файлом PowerShell About Signing and Execution Policies, где описаны параметры имеющихся четырех политик. Выбрав нужную политику, можно выполнить такую, например, команду:

Set-ExecutionPolicy RemoteSigned

Эта команда задает политике выполнения значение RemoteSigned. Настроив политику, можно вновь выполнить команду Get-ExecutionPolicy, дабы удостовериться в том, что изменение внесено, как показано на экране 2.

Экран 2. Настройка политики выполнения

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

$today

На экране 3 показано, какие результаты можно получить при выполнении этой команды.

Экран 3. Обращение к переменной $today и к функции events в файле профиля

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

events "windows powershell"

PowerShell вызывает функцию, передает ей значение параметра и возвращает результаты, как показано на экране 3. Как мы видим, профили представляют собой удобный механизм для хранения кода. Более подробная информация о файлах профилей содержится в руководстве Getting Started, включенном в комплект поставки PowerShell.

Создание файла сценария

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

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

#Возвратить имена действующих служб
Get-Service |
where {$_.Status -eq 'running'} |
sort -property DisplayName

в файл Services.ps1, расположенный в папке C:\PSscripts.

Файл Services.ps1 возвращает список действующих служб и сортирует их по отображаемым именам.

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

C:\PSscripts\Services.ps1

Вот и все. Сценарий будет запущен на выполнение и возвратит результаты, подобные тем, что показаны на экране 4.

Экран 4.  Выполнение файла сценария

Другой способ вызова сценария: можно перетащить его из окна Windows Explorer на консоль PowerShell. Завершив буксировку, нажмите клавишу ввода, и файл будет запущен. Есть еще один способ вызова — перейти из текущего рабочего каталога в тот каталог, где расположен сценарий. Для этого необходимо выполнить такую, например, команду

Set-Location C:\PSscripts

а затем выполнить файл сценария с помощью инструкции

.\Services.ps1

Точка перед обратной косой чертой предписывает оболочке PowerShell использовать текущий рабочий каталог.

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

#Возвращение списка действующих
служб.
param ($service="*windows*")
Get-Service -DisplayName $service |
where {$_.Status -eq 'running'} |
sort -property DisplayName

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

Итак, если вы хотите вызвать файл Services.ps1, введите полный путь к нему, а также — после пробела — значение желаемого параметра. Например:

C:\PSscripts\Services.ps1 *net*

После этого файл Services.ps1 будет возвращать имена всех действующих служб, чьи имена отображения включают строку net, как показано на экране 5. Если бы вы не включили входной параметр, файл сценария возвращал бы список действующих служб, чьи имена отображения включают строку windows.

Экран 5. Определение значения входного параметра при выполнении файла сценария

Код в файле Services.ps1 весьма прост, но можно создавать сложные файлы сценариев, выполняющие целый ряд действий. Имея возможность передавать значения параметров, вы можете создать один файл сценария и использовать его в различных сетях.

Пользуйтесь средствами PowerShell

Файлы профилей и файлы сценариев позволяют сохранять различные команды и логику, необходимую для выполнения широкого круга административных задач. Файлы обоих типов легко реализуются и обслуживаются; они могут содержать коды настолько простые или настолько сложные, как того требуют обстоятельства. Чем больше вы будете работать с PowerShell, тем больше пользы сможете извлечь из файлов обоих типов. Но важно помнить одну истину: ценность этих файлов (как, впрочем, и любых инструментов) зависит от того, насколько хорошо пользователь понимает базовую технологию. Иначе говоря, чем лучше вы разобрались в механизмах PowerShell и языке этой оболочки, тем с большей эффективностью сможете использовать файлы профилей и сценариев, да и все другие средства, реализованные в PowerShell.

Роберт Шелдон (contact@rhsheldon.com) — технический консультант и автор книг по технологиям Microsoft Windows и базам данных