Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Введение в оболочку командной строки Windows PowerShell
Имена и структура командлетов
Как уже было отмечено выше, в 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.