Главная
страница 1страница 2 ... страница 7страница 8


Введение в Windows PowerShell

Корпорация Майкрософт

Дата публикации: сентябрь 2006 г.

Аннотация

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

В этом документе описываются основные черты и особенности оболочки Windows PowerShell, предлагаются способы, которые могут быть использованы в системном администрировании.



Содержание


Авторские права на руководство «Введение в Windows PowerShell»

Этот документ предоставлен только в информационных целях, и корпорация Майкрософт не дает в нем никаких гарантий, явных или подразумеваемых. Сведения в этом документе, включая URL-адреса и другие ссылки на веб-узлы в Интернете, могут быть изменены без предупреждения. Все риски, связанные с использованием или результатами использования этого документа, несет пользователь. Если не указано иное, встречающиеся в этом документе названия компаний, организаций и продуктов, имена доменов, адреса электронной почты, эмблемы, имена людей, названия населенных пунктов и события являются вымышленными. Любая связь с реальными названиями компаний, организаций и продуктов, именами доменов, адресами электронной почты, эмблемами, именами людей, названиями населенных пунктов и событиями случайна. Ответственность за соблюдение всех применимых законов об авторском праве лежит на пользователе. Без ущерба для прав по законам об авторских правах, никакая часть этого документа не может быть воспроизведена, сохранена, включена в информационно-поисковую систему или передана в какой-либо форме любыми средствами (электронными, механическими, фотокопировальными, записывающими или прочими) в любых целях без специального письменного разрешения корпорации Майкрософт.

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

© Корпорация Майкрософт (Microsoft Corp.), 2006. Все права защищены.

Microsoft, MS-DOS, Windows, Windows NT, Windows 2000, Windows XP и Windows Server 2003 являются охраняемыми товарными знаками корпорации Майкрософт в США и других странах.

Упоминаемые в этом документе имена действительных компаний и продуктов могут быть торговыми марками соответствующих владельцев.

Введение

Windows PowerShell является оболочкой командной строки и средой исполнения сценариев, предоставляя мощь .NET Framework пользователям командной строки и создателям сценариев. Она вводит некоторое количество новых мощных концепций, позволяющих расширять полученные знания и созданные сценарии в рамках командной строки и среды сервера сценариев Windows.

Целевая аудитория

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

Об оболочке Windows PowerShell

Оболочка PowerShell предназначена для улучшения работы с командной строкой и средой исполнения сценариев, устраняя давние проблемы и добавляя новые функции.

Понятность

Оболочка Windows Powershell обладает несложными в понимании функциями. Например, для нахождения списка командлетов, служащих для просмотра и изменения служб Windows, введите:

get-command *-service

После понимания того, какой командлет выполняет задачу, можно узнать больше об этом командлете при помощи командлета Get-Help. Например, для отображения справки о командлете Get-Service, введите:

get-help get-service

Для полного понимания вывода этого командлета направьте конвейером его вывод в командлет Get-Member. Например, при выполнении следующей команды отображаются сведения об элементах выходных объектов командлета Get-Service.

get-service | get-member

Согласованность

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

Согласованность оболочки Windows PowerShell является одним из основных ее преимуществ. Например, при изучении способов использования командлета Sort-Object эти знания могут быть применены для сортировки вывода какого-либо командлета. Нет необходимости изучать различные процедуры сортировки для каждого командлета.

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

Интерактивная среда и среда исполнения сценариев

Windows PowerShell является средой, в которой сочетаются интерактивные возможности и возможности исполнения сценариев, благодаря чему обеспечивается доступ к средствам командной строки и к объектам COM. Кроме того, эта среда позволяет использовать мощь библиотеки классов .Net Framework (FCL).

Эта среда улучшает работу с командной строкой Windows благодаря предоставлению интерактивной среды с несколькими средствами командной строки. Оболочка также улучшает возможности исполнения сценариев сервера сценариев (WSH), что позволяет использовать большое число средств командной строки и объектов автоматизации COM, но не предоставляет интерактивной среды.

Сочетанием доступа ко всем этим возможностям оболочки Windows PowerShell расширяет возможности интерактивного пользователя и создателя сценариев, улучшает управляемость администрирования системы.

Объектно-ориентированная среда

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

Несложный переход к исполнению сценариев

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

Установка и работа с оболочкой Windows PowerShell

Системные требования

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

· Windows XP с пакетом обновления 2, Windows 2003 с пакетом обновления 1 или более поздние версии Windows;

· Microsoft .NET Framework 2.0.

Если на компьютере уже установлена какая-либо версия Windows PowerShell, то перед установкой новой версии удалите старую версию при помощи элемента Добавление и удаление программ на панели управления.

Установка Windows PowerShell

Чтобы установить оболочку Windows PowerShell, выполните следующее:

1. загрузите файл установки Windows PowerShell (Имя этого файла различается в зависимости от платформы, операционной системы и языкового пакета);

2. для запуска установки нажмите кнопку «Открыть»;

3. следуйте инструкциям мастера установки.

Файлы Windows PowerShell можно также сохранить на сетевом ресурсе для установки на несколько компьютеров.

Чтобы выполнить автоматическую установку, введите:

/quiet


Например:

PowerShellSetup_x86_fre.exe /quiet


В 32-разрядных версиях Windows оболочка Windows PowerShell устанавливается по умолчанию в каталог %SystemRoot%\System32\WindowsPowerShell\v1.0. В 64-разрядных версиях Windows 32-разрядная версия Windows PowerShell устанавливается в каталог %SystemRoot%\SystemWow64\WindowsPowerShell\v1.0, а 64-разрядная версия Windows PowerShell устанавливается в каталог %SystemRoot%\System32\WindowsPowerShell\v1.0.

Запуск Windows PowerShell

Для запуска оболочки Windows PowerShell из меню «Пуск» нажмите кнопку Пуск, щелкните элемент Все программы, выберите Windows PowerShell 1.0, а затем щелкните значок Windows PowerShell.

Для запуска оболочки Windows PowerShell из окна «Выполнить» нажмите кнопку Пуск, нажмите Выполнить, введите powershell и нажмите кнопку ОК.

Для запуска Windows PowerShell из окна командной строки (cmd.exe) в командной строке введите powershell. Так как оболочка Windows PowerShell выполняется в сеансе консоли, можно использовать технику выполнения оболочки в сеансе удаленного telnet или SSH. Для возврата в сеанс командной строки нажмите exit.

Основы Windows PowerShell

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

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

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

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

· использование команды Get;

· использование Cmd.exe и команд ОС UNIX;

· использование внешних команд;

· использование функции автозавершения при помощи клавиши TAB;

· использование команды Get-Help.

Основные сведения о важных концепциях Windows PowerShell

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

Объектно-ориентированные команды

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

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

Семейство команд может расширяться

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

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

Из-за специальной природы внутренних команд Windows PowerShell мы будем называть их командлетами.



Примечание

Оболочка Windows PowerShell может выполнять и другие команды, отличные от командлетов. Здесь, в Введении в Windows PowerShell, мы не будем их подробно рассматривать, но полезно знать о них как о категориях команд разного типа. Оболочка Windows PowerShell поддерживает сценарии, аналогичные сценариям оболочки UNIX и пакетным файлам Cmd.exe, но имеющие в имени файла расширение PS1. Windows PowerShell позволяет также создавать внутренние функции, которые могут использоваться непосредственно в интерфейсе или в сценариях.

Как Windows PowerShell обрабатывает входные данные и дисплей консоли

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

Традиционные средства командной строки содержат свои собственные схемы для запроса и отображения справки. Некоторые средства командной строки для отображения справки используют «/?», другие используют «-?», «/H» или даже «//». Некоторые отображают справку в окне интерфейса GUI, а не на дисплее консоли. Некоторые сложные средства, такие как средства обновления приложений, распаковывают внутренние файлы перед отображением их справки. При использовании пользователем неверного параметра средство может пропустить то, что введено пользователем, и начать выполнять задачу автоматически.

При вводе команды в оболочке Windows PowerShell производится автоматический разбор и предварительная обработка всех вводимых данных. Если с командлетом Windows PowerShell используется параметр «-?», это всегда означает: «покажи мне справку для этой команды». Разработчики командлетов не должны производить разбор команд; все, что от них требуется — это предоставить текст справки.

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

Примечание

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

Windows PowerShell использует некоторые черты синтаксиса C#

Оболочка Windows PowerShell имеет синтаксические особенности и ключевые слова, сходные с теми, которые применяются в языке программирования C#, так как оболочка Windows PowerShell основана на .NET Framework. Зная Windows PowerShell, гораздо легче изучить C#, если необходимо научиться программировать на этом языке.

Для пользователей, не занимающихся прогораммированием на C#, такое сходство не так важно. С другой стороны, зная C#, это сходство может значительно облегчить изучение Windows PowerShell.

Изучение имен команд оболочки Windows PowerShell

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

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

Большинство команд построено для управления элементами операционной системы или приложений, таких как службы или процессы. Команды имеют разнообразные имена, которые могут соответствовать или не соответствовать семейству. Например, в системах Windows можно использовать команды net start и net stop для запуска или остановки службы. Есть другое, более обобщенное средство управления службами для Windows, имеющее совершенно другое имя, sc, которое не соответствует шаблону именования для команд службы net. Для управления процессами в Windows есть команда tasklist для предоставления списка процессов и команда taskkill для уничтожения процессов.

Команды, для которых нужны параметры, имеют нерегулярные спецификации параметров. Нельзя использовать команду net start для запуска службы на удаленном компьютере. Команда sc запускает службу на удаленном компьютере, но для задания удаленного компьютера перед его именем должны ставиться две косые черты. Например, для запуска службы спулера на удаленном компьютере с именем DC01 необходимо ввести sc \\DC01 start spooler. Для формирования списка задач, выполняющихся на DC01, необходимо использовать параметр /S («system» — система) и задать имя DC01 без косых черт, например tasklist /S DC01.

Хотя между службой и процессом имеются важные технические различия, — это два примера управляемых элементов на компьютере, имеющем хорошо определенный жизненный цикл. Может быть необходимым запустить или остановить службу или процесс, либо получить список всех выполняющихся в настоящее время служб или процессов. Другими словами, хотя служба и процесс — это разные вещи, действия, которые производятся над службой или процессом, концептуально часто являются одинаковыми. Более того, выбор, который мы можем сделать для настройки действия заданием параметров, концептуально также может быть таким же.

Windows PowerShell использует это сходство для уменьшения количества различающихся имен, которые необходимо знать для понимания и использования командлетов.

Сокращение количества обязательных для запоминания команд при помощи шаблона глагол-существительное

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

Глаголы менее ограничены, но они должны всегда описывать, на что действует команда. В оболочке Windows PowerShell имеются такие команды, как Get-Process, Stop-Process, Get-Service и Stop-Service.

В случае двух существительных и двух глаголов согласованность не слишком упрощает изучение. Однако если взглянуть на обычный набор из десяти глаголов и десяти существительных, то нужно изучить только 20 слов, но при помощи их можно образовать 100 различных имен команд.

Часто по имени команды можно понять, что она выполняет, и обычно бывает очевидным, какое имя должно использоваться для новой команды. Например, команда завершения работы компьютера может выглядеть как Stop-Computer. Команда, формирующая список всех компьютеров в сети, может выглядеть как Get-Computer. Командой получения даты системы является команда Get-Date.

Можно перечислить все команды, включающие определенный глагол, задав параметр -Verb для команды Get-Command (мы будем подробно рассматривать команду Get-Command в следующем разделе). Например, для вывода списка всех командлетов, в которых используется глагол Get, введите:



PS> Get-Command -Verb Get

CommandType Name Definition

----------- ---- ----------

Cmdlet Get-Acl Get-Acl [[-Path] ]...

Cmdlet Get-Alias Get-Alias [[-Name]

Cmdlet Get-AuthenticodeSignature Get-AuthenticodeSignature [-...

Cmdlet Get-ChildItem Get-ChildItem [[-Path]

...


Параметр -Noun еще более полезен, так как он позволяет видеть семейство команд, влияющих на объекты одного типа: Например, если необходимо видеть, какие команды имеются для управления службами, введите следующую команду:

PS> Get-Command -Noun Service

CommandType Name Definition

----------- ---- ----------

Cmdlet Get-Service Get-Service [[-Name]

Cmdlet New-Service New-Service [-Name] ...

Cmdlet Restart-Service Restart-Service [-Name]

Cmdlet Resume-Service Resume-Service [-Name]

Cmdlet Set-Service Set-Service [-Name] ...

Cmdlet Start-Service Start-Service [-Name]

Cmdlet Stop-Service Stop-Service [-Name]

Cmdlet Suspend-Service Suspend-Service [-Name]

...


Команда — это не обязательно командлет только из-за того, что он имеет схему именования глагол-существительное. Примером собственной команды Windows PowerShell, не являющейся командлетом, но имеющей имя типа глагол-существительное, является команда очистки окна консоли Clear-Host. Команда Clear-Host в действительности является внутренней функцией, в чем можно убедиться при выполнении на ней команды Get-Command:

PS> Get-Command -Name Clear-Host
CommandType Name Definition

----------- ---- ----------

Function Clear-Host $spaceType = [System.Managem...


Командлеты используют стандартные параметры

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

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

Примечание

При использовании параметров перед их именами всегда стоит «-», что позволяет оболочке Windows PowerShell легко идентифицировать их как параметры. В примере Get-Command -Name Clear-Host именем параметра является Name, но оно вводится как -Name.

Далее приводятся некоторые из общих характеристик обычных имен параметров и использования этих параметров.

Параметр справки (?)

При указании параметра -? в каком-либо командлете командлет не исполняется. Вместо этого Windows PowerShell отображает справку для командлета.

Общие параметры

Оболочка Windows PowerShell содержит несколько параметров, называемых общими параметрами. Так как эти параметры контролируются механизмом Windows PowerShell, при каждом их использовании командлетом их поведение будет всегда одинаковым. Общими параметрами являются параметры WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable и OutBuffer.

Рекомендуемые к использованию параметры

Командлеты ядра Windows PowerShell используют стандартные имена для одинаковых параметров. Хотя использование имен параметров не является принудительным, имеется явная рекомендация по использованию имен для обеспечения стандартизации.

Например, рекомендуется именовать параметры, обращающиеся к компьютеру по имени как ComputerName, а не как Server (сервер), Host (узел), System (система), Nod (узел) или другие общие альтернативные слова. Важными рекомендуемыми именами параметров являются Force, Exclude, Include, PassThru, Path и CaseSensitive.

Сводные сведения о командах

Командлет Windows PowerShell Get-Command извлекает имена всех имеющихся команд. При вводе команды Get-Command в командную строку Windows PowerShell отображаются данные, подобные следующим:



PS> Get-Command

CommandType Name Definition

----------- ---- ----------

Cmdlet Add-Content Add-Content [-Path]

Cmdlet Add-History Add-History [[-InputObject] ...

Cmdlet Add-Member Add-Member [-MemberType]




...

Этот вывод выглядит очень похоже на вывод справки интерфейса Cmd.exe: сводка внутренних команд в табличной форме. В показанном выше фрагменте для вывода команды Get-Command каждая команда имеет значение параметра CommandType, равное Cmdlet (командлет). Командлет является типом внутренней команды оболочки Windows PowerShell, грубо соответствующим командам dir и cd интерфейса Cmd.exe и командам, встраиваемым в оболочки ОС UNIX, например BASH.

В выводе команды Get-Command все определения заканчиваются троеточием (...), указывающим на то, что PowerShell не может отобразить все содержание в доступном пространстве. Когда оболочка Windows PowerShell отображает конечные данные, она форматирует вывод как текст и затем выстраивает его таким образом, чтобы данные точно умещались в окне консоли. Это будет рассмотрено позднее в разделе, посвященном механизмам форматирования.

Командлет Get-Command имеет параметр Syntax, позволяющий извлекать только синтаксис каждого командлета. Для отображения полного вывода введите команду Get-Command -Syntax:

PS> Get-Command -Syntax

Add-Content [-Path] [-Value] [-PassThru] [-Filter ] [-Include ] [-Exclude ] [-Force] [Credential


] [-Verbose] [-Debug] [-ErrorAction ] [-ErrorVariable ] [-OutVariable ] [-OutBuffer ] [-WhatIf] [-Confirm] [-Encoding ]
Add-History [[-InputObject]
] [-Passthru] [-Verbose] [-Debug] [-ErrorAction ] [-ErrorVariable ] [-OutVariable ][-OutBuffer ]...

Отображение имеющихся типов команд

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

Можно получить распечатку всех элементов, которые могут быть вызваны, вводом следующей команды:

PS> Get-Command *

Так как этот список включает в себя внешние файлы на пути поиска, он может содержать тысячи элементов. Имеет больший смысл сокращенный набор команд. Для нахождения собственных команд других типов можно использовать параметр CommandType командлета Get-Command. Хотя еще ничего и не было сказано об этих командах другого типа, их можно отобразить, если знать имя CommandType для класса команд.

Примечание

Хотя мы это еще и не обсуждали, звездочка (*) используется в аргументах команды Windows PowerShell для сравнения на совпадение с учетом подстановочных знаков. * означает «совпадение одного или нескольких любых знаков». Для поиска команд, начинающихся с буквы «a», можно ввести Get-Command a*. В отличие от сравнения на совпадение с учетом подстановочных знаков в Cmd.exe, подстановочный знак оболочки Windows PowerShell учитывает также и точку.

Для отображения псевдонимов категории специальных команд (имеются имена, альтернативные стандартным именам команд), введите следующую команду:

PS> Get-Command -CommandType Alias

Для отображения всех функций Windows PowerShell введите следующую команду:

PS> Get-Command -CommandType Function

Для отображения внешних сценариев на пути поиска Windows PowerShell введите следующую команду:

PS> Get-Command -CommandType ExternalScript

Получение подробных справочных сведений

В оболочке Windows PowerShell имеется подробная справочная документация для всех командлетов. Для отображения разделов справки используйте командлет Get-Help. Например, для получения справки по командлету Get-Childitem введите:



get-help get-childitem

или

get-childitem -?

Можно также каждый раз отображать по одной странице каждой темы при помощи функций man и help. Для их использования введите man или help, а затем имя командлета. Например, для отображения справки для командлета Get-Childitem введите:

man get-childitem

или

help get-childitem

Командлет Get-Help отображает также сведения о концептуальных разделах в оболочки Windows PowerShell. Концептуальные разделы справки начинаются префиксом «about_», например «about_line_editing». Для отображения списка концептуальных разделов введите:

get-help about_*

Для отображения определенного раздела справки, введите имя раздела, например:

get-help about_line_editing

Использование имен знакомых команд

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

Механизм псевдонимов связывает вводимое имя команды с другой командой. Например, в Windows PowerShell есть внутренняя функция Clear-Host, очищающая окно для выводимых данных. Если в командной строке ввести команду cls или clear, Windows PowerShell интерпретирует это как псевдоним для функции Clear-Host и выполняет функцию Clear-Host.

Это помогает пользователям изучать Windows PowerShell. Во-первых, большая часть пользователей Cmd.exe и ОС UNIX умеет работать с большим количеством команд, которые они уже знают по имени, и хотя эквивалентные команды Windows PowerShell могут не давать идентичных результатов, по форме они настолько близки известным пользователям командам, что они могут использовать их в работе, не тратя усилий на запоминание имен команд Windows PowerShell. Во-вторых, основными источниками трудностей при изучении новой оболочки, если пользозователь уже знаком с другой оболочкой, являются ошибки, вызываемые «памятью пальцев». Если вы в течение многих лет использовали Cmd.exe и если необходимо очистить экран, заполненный выводом, вы рефлекторно введете команду cls и нажмете клавишу ВВОД. Без псевдонима функции Clear-Host в оболочке Windows PowerShell вы просто получите сообщение об ошибке «'cls' не распознана как командлет, функция, выполняемая программа и файл сценария», и вам совершенно будет непонятно, как очистить экран.

Далее приводится краткий список общих команд Cmd.exe и ОС UNIX, которые можно использовать в оболочке Windows PowerShell:

cat

dir

mount

rm

cd

echo

move

rmdir

chdir

erase

popd

sleep

clear

h

ps

sort

cls

history

pushd

tee

copy

kill

pwd

type

del

lp

r

write

diff

ls

ren

 

Если вы рефлекторно используете одну из этих команд, и хотите узнать действительное имя собственной команды Windows PowerShell, можно для этого использовать команду Get-Alias:

PS> Get-Alias cls
CommandType Name Definition

----------- ---- ----------

Alias cls Clear-Host


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

Интерпретация стандартных псевдонимов

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

В оболочке Windows PowerShell предпринята попытка найти компромисс между ясностью и краткостью. Такой компромисс обеспечивается при предоставлении набора стандартных псевдонимов, основанных на сокращенных именах для обычных глаголов и существительных. Это позволяет сформировать базовый набор псевдонимов для общих командлетов, которые могут быть читаемы, если известны сокращенные имена. Например, в стандартных псевдонимах глагол Get сокращается до g, глагол Set сокращается до s, существительное Item сокращается до i, существительное Location сокращается до l и существительное Command сокращается до cm.

Приведем краткий пример для иллюстрации того, как это работает. Стандартный псевдоним для Get-Item образуется из сочетания g для Get и i для Item: gi. Стандартный псевдоним для Set-Item образуется из сочетания s для Set и i для Item: si. Стандартный псевдоним для Get-Location образуется из сочетания g для Get и l для Location, gl. Стандартный псевдоним для Set-Location образуется из сочетания s для Set и l для Location, sl. Стандартный псевдоним для Get-Command образуется из сочетания g для Get и cm для Command, gcm. Не существует командлета Set-Command, но если бы он был, нетрудно было бы догадаться, что стандартный псевдоним был бы образован из s для Set и cm для Command: scm. Кроме того, люди, знакомые с механизмом псевдонимов Windows PowerShell и встретившие scm, могли бы догадаться, что этот псевдоним относится к Set-Command.

Создание новых псевдонимов

Можно создать свои собственные псевдонимы при помощи командлета Set-Alias. Например, следующие инструкции создают стандартные псевдонимы командлетов, рассматривавшиеся в разделе «Интерпретация стандартных псевдонимов».

Set-Alias -Name gi -Value Get-Item

Set-Alias -Name si -Value Set-Item

Set-Alias -Name gl -Value Get-Location

Set-Alias -Name sl -Value Set-Location

Set-Alias -Name gcm -Value Get-Command


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

PS> Set-Alias -Name gi -Value Get-Item

Set-Alias : Псевдоним gi не подлежит записи, так как он является постоянным или доступен только для чтения, и запись в него не может быть выполнена.

В строке:1 знак:10

+ Set-Alias <<<< -Name gi -Value Get-Item

Применение клавиши TAB для автоматического завершения имен

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

Примечание

Автозавершение контролируется внутренней функцией TabExpansion. Так как эта функция может быть изменена или переопределена, это рассмотрение служит в качестве руководства по поведению конфигурации Windows PowerShell по умолчанию.

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

Автозавершение имен командлетов выглядит несколько по-иному. Для использования расширения табуляции в имени командлета введите всю первую часть имени (глагол) и дефис, следующий за этой частью. В случае частичного совпадения можно ввести больший фрагмент имени. Например, при вводе get-co и последующем нажатии клавиши Tab оболочкаWindows PowerShell автоматически расширяет это до командлета Get-Command (отметим, что оболочка изменяет также регистр букв в их стандартную форму). При повторном нажатии клавиши Tab оболочка Windows PowerShell заменяет это имя на другое, единственное соответствующее имя командлета, а именно: Get-Content.

В одной и той же строке функцию автозавершения можно использовать несколько раз. Например, автозавершение можно использовать для имени командлета Get-Content, введя:

PS> Get-Con

При нажатии клавиши Tab команда расширяется до:

PS> Get-Content

После этого можно частично задать путь к файлу журнала Active Setup и вновь использовать автозавершение:

PS> Get-Content c:\windows\acts

При нажатии клавиши Tab команда расширяется до:

PS> Get-Content C:\windows\actsetup.log

Примечание

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

Конвейер объектов

Конвейеры ведут себя как ряд соединенных между собой сегментов трубы. Элементы, перемещающиеся по конвейеру, проходят через каждый сегмент. Для создания конвейера в оболочке Windows PowerShell команды соединяются друг с другом оператором конвейерной обработки «|», и вывод каждой команды используется в качестве ввода следующей команды.

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

В этой главе будет описываться, чем конвейер Windows PowerShell отличается от конвейеров наиболее популярных оболочек. Затем будут продемонстрированы некоторые базовые средства, которые могут использоваться для контроля вывода конвейера, а также, чтобы видеть, как работает конвейер.

Основные сведения о конвейере Windows PowerShell

Конвейеризация работает фактически везде в оболочке Windows PowerShell. Хотя на экране виден текст, Windows PowerShell не пропускает текст конвейером между командами. На самом деле оболочка пропускает по конвейеру объекты.

Форма записи конвейеров сходна с формой, используемой в других оболочках, так что на первый взгляд не очевидно, что тут Windows PowerShell вводит что-то новое. Например, при использовании командлета Out-Host для постраничного отображения вывода другой команды вывод выглядит как обычный текст, отображаемый на экране и разбитый на страницы:

PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging

Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32


Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2005-10-22 11:04 PM 315 $winnt$.inf

-a--- 2004-08-04 8:00 AM 68608 access.cpl

-a--- 2004-08-04 8:00 AM 64512 acctres.dll

-a--- 2004-08-04 8:00 AM 183808 accwiz.exe

-a--- 2004-08-04 8:00 AM 61952 acelpdec.ax

-a--- 2004-08-04 8:00 AM 129536 acledit.dll

-a--- 2004-08-04 8:00 AM 114688 aclui.dll

-a--- 2004-08-04 8:00 AM 194048 activeds.dll

-a--- 2004-08-04 8:00 AM 111104 activeds.tlb

-a--- 2004-08-04 8:00 AM 4096 actmovie.exe

-a--- 2004-08-04 8:00 AM 101888 actxprxy.dll

-a--- 2003-02-21 6:50 PM 143150 admgmt.msc

-a--- 2006-01-25 3:35 PM 53760 admparse.dll

next page; next line; Q quit

...


Команда Out-Host -Paging является полезным элементом конвейера там, где необходимо медленно отобразить большой объем данных. Она особенно полезна при очень большой загрузке ЦП. Так как обработка передается командлету Out-Host, когда в нем имеется полная, готовая к отображению страница, командлеты, стоящие в конвейере ранее, останавливают свою работу, пока не будет подготовлена следующая страница вывода. Это можно наблюдать при использовании диспетчера задач Windows для контроля использования ЦП и памяти оболочкой Windows PowerShell.

Выполните следующую команду: Get-ChildItem C:\Windows -Recurse. Сравните использование ЦП и памяти с аналогичными показателями следующей команды: Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. На экране виден текст, но этот текст виден потому, что в окне консоли объекты необходимо представить в виде текста. Это является представлением того, что действительно происходит в оболочке Windows PowerShell. Например, рассмотрим командлет Get-Location. Если Get-Location будет введено, если текущим положением является корень диска С, можно будет видеть следующие данные:



PS> Get-Location
Path

----


C:\

Если оболочка Windows PowerShell пропускает по конвейеру текст, выполняя такую команду как Get-Location | Out-Host, из Get-Location в Out-Host будет передан набор знаков, в порядке, в котором они отображаются на экране. Другими словами, если пропустить данные заголовка, Out-Host вначале получит знак «С», затем знак «:», а затем знак «\». Командлет Out-Host не может определить, какой смысл связан с выходными знаками, выводимыми командлетом Get-Location.

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

Команда Get-Location не возвращает текст, содержащий текущий путь. Она возвращает пакет информации, называемый объектом PathInfo, содержащий текущий путь вместе с некоторой другой информацией. Затем командлет Out-Host пересылает этот объект PathInfo на экран, и оболочка Windows PowerShell решает, какую информацию следует отобразазить, и как ее надо отобразить на основании ее правил форматирования.

Фактически вывод информации заголовка командлета Get-Location добавляется только в конце процесса, как часть процесса форматирования данных, выводимых на экран. На экране видна сводные данные, а не полное представление выходного объекта.

Если выводом команды Windows PowerShell является большее количество информации, чем может быть отражено в окне консоли, каким образом можно извлечь невидимые элементы? Каким образом можно видеть дополнительные данные? И что делать в случае, если необходимо просмотреть данные в формате, отличном от формата, обычно используемого в оболочке Windows PowerShell?

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

Просмотр структуры объекта (командлет Get-Member)

Так как объекты играют центральную роль в Windows PowerShell, имеется несколько собственных команд, предназначенных для работы с объектами произвольного типа. Наиболее важной из них является команда Get-Member.

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

Чтобы увидеть все элементы объекта «Process» и сформировать страницу вывода таким образом, чтобы можно было просмотреть все элементы, введите:



PS> Get-Process | Get-Member | Out-Host -Paging

Вывод этой команды будет выглядеть подобно следующему:

TypeName: System.Diagnostics.Process
Name MemberType Definition

---- ---------- ----------

Handles AliasProperty Handles = Handlecount

Name AliasProperty Name = ProcessName

NPM AliasProperty NPM = NonpagedSystemMemorySize

PM AliasProperty PM = PagedMemorySize

VM AliasProperty VM = VirtualMemorySize

WS AliasProperty WS = WorkingSet

add_Disposed Method System.Void add_Disposed(Event...

...


Такой длинный список информации можно сделать более удобным, отфильтровав нужные элементы. Команда Get-Member позволяет перечислять только элементы, являющиеся свойствами. Имеется несколько форм свойств. Если в качестве значения параметра Get-MemberMemberType задается Properties, командлет отображает свойства любого типа. Окончательный список все еще очень длинный, но он является немного более управляемым:

PS> Get-Process | Get-Member -MemberType Properties

TypeName: System.Diagnostics.Process


Name MemberType Definition

---- ---------- ----------

Handles AliasProperty Handles = Handlecount

Name AliasProperty Name = ProcessName

...

ExitCode Property System.Int32 ExitCode {get;}



...

Handle Property System.IntPtr Handle {get;}

...

CPU ScriptProperty System.Object CPU {get=$this.Total...



...

Path ScriptProperty System.Object Path {get=$this.Main...

...


Примечание

Допустимыми значениями MemberType являются AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet и All.

Для процесса имеется более 60 свойств. Причиной, по которой оболочка Windows PowerShell часто отображает для хорошо известного объекта лишь небольшое число свойств, является то, что отображение всех этих свойств связано с неизмеримо большим количеством информации.

Примечание

Windows PowerShell определяет способ отображения объекта определенного типа, используя информацию, хранимую в XML-файлах, имена которых заканчиваются на .format.ps1xml. Данные форматирования для объектов процесса, являющихся объектами .NET System.Diagnostics.Process, хранятся в файле PowerShellCore.format.ps1xml.

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

Применение команд форматирования для изменения конечного представления данных

Windows PowerShell содержит набор командлетов, позволяющих пользователю контролировать, какие свойства должны отображаться для определенных объектов. Имена всех этих командлетов начинаются глаголом Format. Они позволяют выбрать для отображения одно или несколько свойств.


следующая страница >>
Смотрите также:
В Windows PowerShell™ Корпорация Майкрософт Дата публикации: сентябрь 2006 г
1693.56kb.
8 стр.
Руководство рецензентов Windows Server 2008 R2
1185.94kb.
11 стр.
Руководство по развертыванию Operations Manager 2007
2572.88kb.
23 стр.
Руководство по решению распределенных файловых систем в ос windows Server 2003 R2 Корпорация Майкрософт
537.72kb.
4 стр.
Голосовая связь через Интернет (VoIP)
377.61kb.
1 стр.
Руководство рецензентов Windows Server 2008 R2
957.52kb.
11 стр.
Книга Эта книга, «Windows PowerShell»
528.62kb.
8 стр.
Библиотечный модуль печати налоговых документов с двухмерным штриховым кодом pdf417 Версия 9
34.17kb.
1 стр.
Операционные системы Windows и их архитектура
269.62kb.
1 стр.
Аляскинский маламут перевод: Алифиренко В. Э. (июнь 2006). Родина: U. S. A. Дата публикации действительного стандарта
62.58kb.
1 стр.
Обзор архитектуры Windows X, Windows 95, os/2 Warp, Windows nt
132.37kb.
1 стр.
Microsoft Windows ce 0 Сетевые шлюзы
1008.48kb.
7 стр.