Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 16:

Введение в оболочку командной строки Windows PowerShell

< Лекция 15 || Лекция 16: 12 || Лекция 17 >

Имена и структура командлетов

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

Имена командлетов всегда соответствуют шаблону "глагол-существительное", где глагол задает определенное действие, а существительное определяет объект, над которым это действие будет совершено.

Например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Чтобы просмотреть список командлетов, доступных в ходе текущего сеанса, нужно выполнить командлет Get-Command:

PS C:\> Get-Command

CommandType  Name            Definition
-----------  ----            ----------
Cmdlet       Add-Content     Add-Content [-Path] <String[]> [-Value] <Object[...
Cmdlet       Add-History     Add-History [[-InputObject] <PSObject[]>] [-Pass...
Cmdlet       Add-Member      Add-Member [-MemberType] <PSMemberTypes> [-Name]...
Cmdlet       Add-PSSnapin    Add-PSSnapin [-Name] <String[]> [-PassThru] [-Ve...
Cmdlet       Clear-Content   Clear-Content [-Path] <String[]> [-Filter <Strin...
Cmdlet       Clear-Item      Clear-Item [-Path] <String[]> [-Force] [-Filter ...
...
16.1.

По умолчанию командлет Get-Command выводит сведения в трех столбцах: CommandType, Name и Definition. При этом в столбце Definition отображается синтаксис командлетов (многоточие ( ) в столбце синтаксиса указывает на то, что данные обрезаны).

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

Замечание

Косые черты ( / и \ ) вместе с параметрами в оболочке Windows PowerShell не используются.

В общем случае синтаксис командлетов имеет следующую структуру:

имя_командлета –параметр1 -параметр2 аргумент1 аргумент2

Здесь параметр1 – параметр (переключатель), не имеющий значения; параметр2 – имя параметра, имеющего значение аргумент1 ; аргумент2 – параметр, не имеющий имени. Например, командлет Get-Process имеет параметр Name, который определяет имя процесса, информацию о котором нужно вывести. Имя этого параметра указывать необязательно. Таким образом, для получения сведений о процессе Far можно ввести либо команду Get-Process -Name Far, либо команду Get-Process Far.

Автоматическое завершение команд

Находясь в оболочке PowerShell, можно ввести часть какой-либо команды, нажать клавишу <Tab> и система попытается сама завершить эту команду.

Подобное автоматическое завершение срабатывает, во-первых, для имен файлов и путей файловой системы. При нажатии клавиши <Tab> PowerShell автоматически расширит частично введенный путь файловой системы до первого найденного совпадения. При повторении нажатия клавиши <Tab> производится циклический переход по имеющимся возможностям выбора. Также в PowerShell реализована возможность автоматического завершения путей файловой системы на основе шаблонных символов ( ? и * ). Например, если ввести команду cd c:\pro*files и нажать клавишу <Tab>, то в строке ввода появится команда cd 'C:\Program Files'.

Во-вторых, в PowerShell реализовано автозавершение имен командлетов и их параметров. Если ввести первую часть имени командлета (глагол) и дефис, нажать после этого клавишу <Tab>, то система подставит имя первого подходящего командлета (следующий подходящий вариант имени выбирается путем повторного нажатия <Tab>). Аналогичным образом автозавершение срабатывает для частично введенных имен параметров командлета: нажимая клавишу <Tab>, мы будем циклически перебирать подходящие имена.

Наконец, PowerShell позволяет автоматически завершать имена используемых переменных (объектов) и имена свойств объектов .

Псевдонимы команд

Механизм псевдонимов, реализованный в оболочке 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 cd
CommandType     Name           Definition
-----------     ----           ----------
Alias           cd             Set-Location

Псевдонимы второго типа (стандартные псевдонимы) в PowerShell предназначены для быстрого ввода команд. Такие псевдонимы образуются из имен командлетов, которым они соответствуют. Например, глагол Get сокращается до g, глагол Set сокращается до s, существительное Location сокращается до l и т.д. Таким образом, для командлету Set-Location соответствует псевдоним sl, а командлету Get-Location – псевдоним gl.

Просмотреть список всех пседонимов, объявленных в системе, можно с помощью командлета Get-Alias без параметров. Определить собственный псевдоним можно с помощью командлета Set-Alias.

Справочная система PowerShell

В PowerShell предусмотрено несколько способов получения справочной информации внутри оболочки.

Краткую справку по одному командлету можно получить с помощью параметра ? (вопросительный знак), указанного после имени этого командлета. Например:

PS C:\> get-process -?

ИМЯ
    Get-Process
ОПИСАНИЕ
    Отображает процессы, выполняющиеся на локальном компьютере.

СИНТАКСИС
    Get-Process [[-name] <string[]>] [<CommonParameters>]
    Get-Process -id <Int32[]> [<CommonParameters>]
    Get-Process -inputObject <Process[]> [<CommonParameters>]

ПОДРОБНОЕ ОПИСАНИЕ
    Командлет Get-Process извлекает объект-процесс для каждого процесса. 
    При использовании командлета "Get-Process" без указания параметров 
    происходит отображение всех процессов, выполняющихся на компьютере, 
    что эквивалентно команде "Get-Process *". Процесс можно определить 
    по имени или идентификатору (PID) или передав объект по ковнейеру 
    в командлет Get-Process. Для Get-Process по умолчанию 
    передается имя процесса. Для Stop-Process по умолчанию передается 
    идентификатор процесса.

ССЫЛКИ ПО ТЕМЕ
    Stop-Process

ЗАМЕЧАНИЯ
    Для получения дополнительных сведений введите: 
      "get-help Get-Process -detailed".
    Для получения технических сведений введите: 
      "get-help Get-Process -full".

Более подробную информацию можно получить с помощью специального командлета Get-Help с параметрами Detailed или Full (например, Get-Help Get-Process -Full ). Запустив данный командлет с параметром *, можно увидеть все доступные разделы справочной системы.

Командлет Get-Help позволяет просматривать справочную информацию не только о разных командлетах, но и о синтаксисе языка PowerShell, о псевдонимах, о различных аспектах работы оболочки функциям и т.д. Список тем, обсуждение которых представлено с справочной службе PowerShell, можно увидеть следующим образом:

PS C:\> Get-Help about_*

Name                         Category    Synopsis
----                         --------    --------
about_alias                  HelpFile    Использование альтернативных имен ко...
about_arithmetic_operators   HelpFile    Операторы, которые используются в ко...
about_array                  HelpFile    Компактная структура размещения элем...
about_assignment_operators   HelpFile    Операторы, используемые в оболочке W...
about_associative_array      HelpFile    Компактная структура данных для хран...
about_automatic_variables    HelpFile    Переменные, автоматически задаваемые...
about_break                  HelpFile    Инструкция для немедленного завершен...
about_command_search         HelpFile    Как оболочка Windows PowerShell обна...
about_command_syntax         HelpFile    Формат команд в Windows PowerShell
. . .
16.2.

Таким образом, чтобы прочитать справочную информацию об использовании массивов в PowerShell, нужно выполнить следующую команду: Get-Help about_array.

Командлет Get-Help выводит содержимое раздела справки на экран сразу целиком. Функции man и help позволяют справочную информацию выводить поэкранно (аналогично команде MORE интерпретатора Cmd.exe), например: man about_array.

< Лекция 15 || Лекция 16: 12 || Лекция 17 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

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

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.