Глава 3. Применение системы подсказок
Содержание
В Главе 1 мы упоминали, что возможность обнаружения - это ключевая функциональная возможность, упрощающая изучение и применение графических интерфейсов пользователя (GUI), а также что интерфейсы командной строки (CLI), такие как PowerShell, зачастую более сложны, поскольку в них отсутствуют такие функции обнаружения. На самом деле PowerShell обладает фантастическими возможностями обнаружения, но они не столь очевидны. Одной из основных функциональных возможностей обнаружения выступает справочная система (help system). В Главе 1 мы упоминали, что возможность обнаружения является ключевой функцией, которая упрощает изучение и применение графического интерфейса пользователя (GUI), и что интерфейсы командной строки (CLI), такие как PowerShell зачастую более сложны по причине отсутствия в них функциональности обнаружения. В действительности PowerShell обладает фантастическими возможностями обнаружения, но они не столь очевидны. Одной из основных функциональных возможностей обнаружения и выступает его система подсказок.
Потерпите немного пока мы взбираемся на импровизированную трибуну и прочтём вам проповедь. Все мы работаем в отрасли, которая не уделяет большого внимания чтению, хотя у нас и имеется аббревиатура, которую мы ловко сплавляем пользователям, когда желаем чтобы они прочли дружественное руководство - RTMF (read the friendly manual). Большинство администраторов сразу же погружается в работу, полагаясь на такие вещи, как всплывающие подсказки, контекстные меню и тому подобное - те средства обнаружения GUI - которые служат выяснению того как что- то делать. Именно так мы зачастую и работаем и полагаем, что вы делаете то же самое. Но давайте проясним один момент:
Если вы не желаете знакомиться с файлами справок PowerShell, вы не будете действенно работать с PowerShell. В не научитесь его применению, вы не обучитесь администрировать с его помощью другие службы, такие как Azure, AWS, Microsoft 365 и тому подобные; и вы также могли бы продолжать оставаться с GUI.
Это чтобы было понятно, насколько возможно. Это резкое заявление, но абсолютно справедливое. Представьте себе, что вы пытаетесь разобраться с виртуальными машинами Azure или любым иным административным порталом без помощи всплывающих подсказок, меню и контекстных меню. Пытаться научиться применять PowerShell не тратя время на чтение и понимание файлов подсказок - это то же самое. Это всё равно как попробовать собрать мебель из Икеи, не прочтя инструкцию. Ваш опыт будт разочаровывающим, путанным и недейственным. Так зачем нам это делать?
Когда вам необходимо выполнить некую задачу и при этом вы не знаете какую команду применять, именно система подсказок служит вам для поиска такой команды. Начните с системы подсказок, прежде чем обращаться к предпочитаемому вами механизму поиска.
Если вы запускаете некую команду и получаете некую ошибку, именно ваша справочная система выступает тем, что покажет вам как надлежащим образом запускать эту команду с тем, чтобы не получать ошибок. Если вы желаете связать множество команд воедино для осуществления сложной задачи, именно справочная система это то, что поможет вам выявить как всякая команда способна подключаться к остальным. Вам нет нужды искать примеры в Google или Bing; вам надо изучить как применять сами команды с тем, чтобы вы могли создавать свои собственные примеры и решения.
Мы осознаём, что наша проповедь слегка тяжеловата, но 90% проблем, с которыми, как мы видим, пользователи борются на форумах, можно было бы решить, ели бы эти люди нашли несколько минут чтобы присесть, сделать несколько глубоких вдохов и ознакомиться со справкой. А затем прочтите данную главу, которая поможет вам понимать ту справку, с которой вы знакомитесь в PowerShell.
Начиная с денного момента мы рекомендуем вам знакомиться со справкой ещё по ряду причин:
-
Хотя мы и показываем большое число команд в своих примерах. мы почти никогда не выставляем полную функциональность, варианты, а также возможности каждой из команд для более простого уяснения основных принципов. Вам следует читать соответствующую справку абсолютно для всех показываемых нами команд с тем, чтобы вы познакомились с дополнительными действиями каждой из команд, которые можно предпринимать.
-
В своих лабораторных занятиях вы можете получать советы относительно применения как применять команду для некой задачи, однако мы не хотим давать вам советы относительно её синтаксиса. Вам следует пользоваться системой подсказок для выявления соответствующего синтаксиса своим собственным порядком для осуществления этих лабораторных занятий.
-
Мы обещаем вам, что освоение системы подсказок - это основной ключ к тому, чтобы превратиться в эксперта PowerShell. Нет вы не отыщите там все мелкие подробности, а многие сверхсовременные материалы не задокументированы в системе подсказок, но с точки зрения действенного повседневного администратора вам необходимо освоить систему подсказок. Данная книга сделает эту систему понятной и научит вас понятиям, которые опускает такая подсказка, на сделает это лишь в сочетании с самой встроенной подсказкой.
Спускаемся с импровизированной трибуны.
Сопоставление команд и командлетов | |
---|---|
PowerShell содержит большое число исполняемых команд. Некоторые из них носят название командлетов (cmdlet, мы обсудим командлеты в своей следующей главе), некоторые носят название функций, и так далее. Всё вместе это команды, а система подсказок работает с ними со всеми. Командлет это нечто уникальное для PowerShell, и многие из выполняемых вами команд являются командлетами. Однако мы будем пытаться единообразно применять команды, всякий раз, когда мы обсуждаем более общий класс исполняемых утилит. |
Когда вы запустите подсказку впервые, вы можете удивиться, потому что она не слишком большая. Но подождите, мы всё поясним.
Начиная с PowerShell v3 Microsoft включила новую функциональную возможность с названием обновляемая подсказка. PowerShell способен выгружать обновлённую, исправленную и расширенную подсказку непосредственно из Интернета. Изначально, когда вы запрашиваете подсказку по команде, вы получаете сокращённую, автоматически сгенерированную версию подсказки вместе с сообщением о том, как обновить имеющиеся файлы подсказки, что может выглядеть так:
PS /User/travisp> help Get-Process
NAME
Get-Process
SYNTAX
Get-Process [[-Name] <string[]>] [-Module] [-FileVersionInfo]
[<CommonParameters>]
Get-Process [[-Name] <string[]>] -IncludeUserName [<CommonParameters>]
Get-Process -Id <int[]> -IncludeUserName [<CommonParameters>]
Get-Process -Id <int[]> [-Module] [-FileVersionInfo] [<CommonParameters>]
Get-Process -InputObject <Process[]> [-Module] [-FileVersionInfo]
[<CommonParameters>]
Get-Process -InputObject <Process[]> -IncludeUserName
➥ [<CommonParameters>]
ALIASES
gps
REMARKS
Get-Help cannot find the Help files for this cmdlet on this computer. It
is displaying only partial help.
-- To download and install Help files for the module that includes
this cmdlet, use Update-Help.
-- To view the Help topic for this cmdlet online, type: "Get-Help
Get-Process -Online" or
go to https://go.microsoft.com/fwlink/?LinkID=113324.
Совет | |
---|---|
Невозможно пропустить тот факт, что у вас локально не установлена подсказка. Когда вы впервые обратитесь за подсказкой, PowerShell предложит вам обновить содержимое вашей подсказки. |
Обновление подсказки PowerShell должно стать вашей первой задачей. В Windows PowerShell для обновления от вас требовались
полномочия "Администратора" или Суперпользователя ("root"). В PowerShell 6 и выше вы теперь способны
выполнять обновление подсказки в качестве текущего пользователя. Откройте PowerShell и выполните
Update-Help
и, будьте любезны, подождать несколько минут.
Совет | |
---|---|
Когда вы не пользуетесь языком и региональными параметрами |
Важно обладать привычкой обновления подсказок каждый месяц или около того. PowerShell способен даже загружать обновлённую подсказку для не принадлежащих Microsoft команд, при условии что модули таких команд расположены в надлежащем месте и чтобы они были закодированы так, чтобы содержать значение местоположения в Интернете для обновлений справки (модули это то, как добавляются в PowerShell команды и это поясняется в Главе 7).
У вас имеются компьютеры, которые не подключены к Интернету? Не проблема: проследуйте к тому, который имеет подключение и
воспользуйтесь Save-Help
для получения локальной копии вашей подсказки. Поместите её
в файловый сервер или куда- то, что доступно для всей оставшейся вашей сетевой среды. Затем исполните
Update-Help
с его параметром -Source
, указывая ей
выгружать копию этой подсказки. Это позволит всем компьютерам из вашей сетевой среды схватывать эту обновлённую подсказку из
такого центрального места, вместо того чтобы получать её из Интернета.
Подсказка обладает открытым исходным кодом | |
---|---|
Файлы подсказки PowerShell Microsoft это материалы с открытым исходным кодом, которые доступны в https://github.com/MicrosoftDocs/PowerShell-Docs. Это может быть хорошим местом для просмотра самого последнего исходного кода, который ещё не был оттранслирован в файлы подсказки, которые способен выгружать и отображать PowerShell. |
PowerShell предоставляет командлет, Get-Help
, который выполняет доступ к вашей
системе подсказок. Вы можете наблюдать примеры (в особенности в Интернете), которые показывают как персонал применяет вместо
этого ключевое слово Help
. Ключевое слово Help
вовсе не является естественным командлетом; это функция, которая выступает оболочкой
вокруг центрального командлета Get-Help
.
Подсказка в macOS/Linux | |
---|---|
Имеющиеся файлы подсказки, при их просмотре в macOS и Linux применяют традиционную функциональную возможность man (manual) самой операционной системы, которая обычно "перенимает" этот экран для отображения данной подсказки, возвращая её в ваш обычный экран по завершению. |
Help
работает во многом аналогично своему базовому Get-Help
,
но он отправляет вывод Help
в less
, позволяя вам
получать приемлемо поделённый на страницы представление вместо просмотра всей подсказки прокручиваемой за раз. Исполнение
Help Get-Help
и Get-Help Get-Content
производят
одинаковые результаты, однако последняя обладает отображение страницы за раз. Для воспроизводства такого разбиваемого на
страницы отображения вы можете выполнить Get-Help Get-Content | less
,однако это потребует
дополнительного набора. Обычно мы применяем только Help
, однако мы хотим чтобы вы
понимали некий имеющийся под капотом трюк.
Между прочим, порой такое разбитое на страницы отображение может раздражать, потому как вы уже получили нужные вам сведения,
но оно по- прежнему требует нажатие пробела для отображения остающихся сведений. Если вы столкнулись с этим, нажмите
q
для прекращения этой команды и возврата в приглашение на ввод оболочки. При применении
less
q
всегда обозначает
quit (выход).
Ваша система подсказок имеет две основные цели: помогать вам находить команды для выполнения конкретных задач и помогать вам изучать применение этих команд после того как вы её нашли.
Технически говоря, система подсказок не предполагает какие команды представлены в вашей оболочке. Всё что ей известно, это какие разделы подсказок доступны, а у команд может не быть файла подсказок, и в этом случае система подсказок не будет знать о существовании такой команды. К счастью, Microsoft предоставляет раздел подсказки почти для всех созданных ими командлетов, а это означает, что обычно вы не обнаружите разницы. Кроме того, система подсказок может получать доступ к сведениям, не относящимся к конкретному командлету, включая базовые понятия и прочие общие сведения.
Как и большинство команд, Get-Help
(а следовательно и
Help
)обладает некоторыми параметрами. Один из них - возможно, наиболее важный - это
-Name
. Данный параметр определяет название той темы подсказок, к которой вы бы желали
получить доступ, причём это позиционный параметр, а потому вам не требуется набирать -Name
;
вы можете просто предоставлять то название, которое ищите. Он также принимает символы замены, что превращает вашу систему
подсказок в полезную для обнаружения команд.
Например, допустим, вы желаете выполнять нечто с событиями в объектах .NET. Вы не представляете себе какие команды могут быть доступными, и вы решили отыскать темы подсказок, которые охватывают события (event). Вы можете выполнить одну из этих двух команд:
Help *event*
Help *object*
Первая команда вернёт в вашем компьютере перечень, подобный такому:
Name Category ModuleName
Get-Event Cmdlet Microsoft.PowerShell.Utility
Get-EventSubscriber Cmdlet Microsoft.PowerShell.Utility
New-Event Cmdlet Microsoft.PowerShell.Utility
Register-EngineEvent Cmdlet Microsoft.PowerShell.Utility
Register-ObjectEvent Cmdlet Microsoft.PowerShell.Utility
Remove-Event Cmdlet Microsoft.PowerShell.Utility
Unregister-Event Cmdlet Microsoft.PowerShell.Utility
Wait-Event Cmdlet Microsoft.PowerShell.Utility
Замечание | |
---|---|
После установки вами некоторых модулей из прочих источников, вы можете заметить, что перечень подсказок команд включает
команды (и функции) из таких модулей как |
Многие из имеющихся командлетов в нашем предыдущем перечне, кажется, должны делать нечто с событиями. В своей среде вы
можете также обладать дополнительными командами, которые не относятся к делу, либо вы можете обладать темами "about",
которые предоставляют базовые сведения (подробнее обсуждаемые в разделе 3.6). Когда вы пользуетесь системой подсказок для
поиска команд PowerShell, старайтесь выполнять поиск при помощи максимально широкого термина из возможных -
*object*
или *event*
, вместо
*objectevent*
- потому как вы получите максимально возможные результаты.
Когда у вас имеется некий командлет, который, как вы полагаете, выполнит необходимое задание
(Register-ObjectEvent
выглядит подходящим кандидатом на то, что нам требуется для нашего
примера), вы можете обратиться за подсказкой по этой конкретной теме:
Help Register-ObjectEvent
Не забывайте про завершение табуляцией! Напоминаем, что вы можете ввести часть названия команды и нажать Tab, а ваша оболочка дополнит набранное вами ближайшим совпадением. Вы можете продолжать нажимать Tab для получения альтернативных совпадений.
Попробуйте прямо сейчас | |
---|---|
Наберите |
При помощи Help
вы можете применять и символы замещения - в основном символ
подстановки *
, который заменяет ноль или более символов. Если PowerShell находит лишь
одно соответствие набранному вами, он не будет отображать список тем для такого единственного элемента. Вместо этого он
сразу отобразит имеющееся содержимое для этого элемента.
Попробуйте прямо сейчас | |
---|---|
Выполните |
Если вы следовали в своей оболочке инструкциям, теперь вы должны наблюдать файл подсказки для
Get-EventSubscriber
. Этот файл, носящий название сводной подсказки, предназначен для
краткого описания своей команды и напоминания об её синтаксисе. Эти сведения полезны в том случае, когда вам необходимо
быстро освежить в памяти применение команды, и именно с этого момента мы приступаем к интерпретации самого файла подсказки.
Дополнительно | |
---|---|
Порой мы ходим делиться сведениями, которые хотя и достаточно примечательны, но не существенны для понимания вами самой оболочки. Мы помещаем такие сведения в сноску "Дополнительно", как эта. Если вы её пропустите, всё будет нормально, прочтя же её, зачастую вы ознакомитесь с альтернативным способом выполнения чего- либо или получите дополнительную информацию о PowerShell. Мы упоминали, что наша команда Как и командлет Лучше применять параметры |
Файлы подсказок командлета PowerShell обладают определённым набором соглашений. Научиться понимать то, на что вы смотрите - это ключ к извлечению максимального объёма сведений из таких файлов и к более действенному применению самих командлетов.
Большинство команд может работать различными способами, причём в зависимости от того что вам требуется чтобы они выполняли.
Например, вот имеющийся синтаксис для подсказки Get-Item
:
SYNTAX
Get-Item [-Stream <String[]>] [-Credential <PSCredential>] [-Exclude
➥ <String[]>] [-Filter <String>] [-Force] [-Include
<String[]>] -LiteralPath <String[]> [<CommonParameters>]
Get-Item [-Path] <String[]> [-Stream <String[]>] [-Credential
➥ <PSCredential>] [-Exclude <String[]>] [-Filter <String>] [-Force]
[-Include <String[]>] [<CommonParameters>]
Обратите внимание на то, что данная команда в предыдущем синтаксисе перечисляется дважды, что указывает на то, что эта
команда поддерживает два набора параметров; вы можете использовать эту команду двумя
различными путями. Некоторые параметры совместно используются этими двумя наборами. Вы заметите, например, что оба набора
параметров содержат параметр -Filter
. Однако эти два набора параметров всегд обладают
по крайней мере одним уникальным параметром, который присутствует только в этом наборе параметров. В данном случае наш первый
набор параметров поддерживает -LiteralPath
, который не входит в состав второго набора
параметров; второй набор параметров содержит параметр -Path
, который отсутствует в
первом наборе, однако оба могут содержать и дополнительные не применяемые совместно параметры.
Именно так это и работает: Если вы применяете параметр, который содержится лишь в одном наборе, вы замыкаетесь на этом
наборе и можете использовать лишь дополнительные параметры, которые появляются в том же самом наборе. Когда вы выбираете
параметр -LiteralPath
, вы не можете пользоваться параметрами из иного набора, в данном
случае -Path
, потому как он не присутствует в нашем первом наборе параметров. Это
означает, что -Path
и -LiteralPath
взаимоисключающие - вы никогда не пользуетесь ими обоими одновременно потому как они
присутствуют в двух различных наборах параметров.
Порой имеется возможность запуска команды только с теми параметрами, которые совместно применяются в разных наборах. В подобных ситуациях ваша оболочка обычно выбирает первый из списка набор параметров. Поскольку каждый набор параметров подразумевает иное поведение, важно понимать какой именно набор параметров вы применяете.
Вы заметите, что всякий набор параметров для каждого командлета PowerShell заканчивается
[
. Это ссылка на набор из 11 (на момент написания этих строк)
параметров, которые доступны для каждого отдельного командлета, причём вне зависимости от того как вы применяете данный
командлет. Мы обсудим некоторые из этих общих параметров позднее в данной книге, когда мы будем применять их для реальных
задач. Позднее в данной главе, тем не менее, мы покажем где дополнительно ознакомиться с этими общими параметрами, если вам
это интересно.
Замечание | |
---|---|
Проницательные читатели уже распознали разновидности наших примеров. Читатели заметили иную схему подсказки
|
Вам нет нужды во всех параметрах по- отдельности для запуска командлета. Подсказка PowerShell перечисляет необязательные
параметры в квадратных скобках. Например, [-Credential <PSCredential>]
указывает,
что параметр -Credential
необязательный. Вам вовсе не нужно пользоваться ими всеми;
сам командлет, вероятно, предоставит значения по умолчанию для полномочий своего текущего пользователя если вы не определите
при помощи данного параметра альтернативные полномочия. Именно поэтому [<-Common-Parameters>]
заключён в квадратные скобки: вы можете выполнять данную команду не применяя никакие общие параметры.
Почти каждый командлет обладает по крайней мере одним необязательным параметром. Вы можете никогда не пользоваться этими
параметрами и можете применять их ежедневно. Имейте в виду, что когда вы выбираете применение параметра, вам необходимо набрать
лишь достаточную часть значения названия параметра с тем, чтобы PowerShell был способен однозначно определить какой именно параметр
вы подразумеваете. Например, для -Force
может оказаться недостаточным
-F
, потому как -F
также может означать и
-Filter
. Однако -Fo
будет допустимым сокращением
для -Force
, потому как больше нет параметров, начинающихся с
-Fo
.
Что произойдёт если вы попробуете запустить команду и забудете один из обязательных параметров? Взгляните на подсказку для
Get-Item
, например, и вы обнаружите, что параметр -Path
обязательный. Вы можете заключить это по той причине, что весь параметр целиком - и его название, и его значение - не заключены
в квадратные скобки. Это означает, что некий необязательный параметр можно определять по той причине, что сам параметр и его
значение будут содержаться в квадратных скобках. Попробуйте запустить Get-Item
не
указав путь к файлу (Рисунок 3.1).
Рисунок 3-1
Данная подсказка Get-Item показывает, что значение переменной пути принимает некий массив строк, на что указывают квадратные скобки []
Попробуйте прямо сейчас | |
---|---|
Выполните это пример, запустив |
PowerShell также должен выдать приглашение на ввод для значения обязательного параметра -Path
.
Если вы наберёте нечто вроде ~
или ./
и нажмёте
Enter, ваша команды выполнится верно. Чтобы прервать свою команду вы можете нажать Ctrl-C.
Проектировщики PowerShell знают, что некоторые параметры будут применяться настолько часто, что вы не захотите постоянно набирать их названия. Такие распространённые параметры часто позиционные: вы можете предоставлять некое значение без набора значения названия параметра, что предоставляет вам возможность помещать такое значение в верном месте. Вы можете определять позиционные параметры двумя способами: через сводку соответствующего синтаксиса, либо с применением полной подсказки.
Поиск позиционных параметров в сводках синтаксиса
Первый способ вы обнаружите в соответствующей сводке синтаксиса: значение названия параметра - только самого названия -
будет взято в квадратные скобки. Например, взгляните на первые два параметра во втором наборе параметров
Get-Item
:
[-Path] <String[]> [-Stream <String[]>]…[-Filter <String>]
Самый первый параметр, -Path
, не является необязательным. Вы можете заключить это
потому как весь параметр - его название и его значение - не заключены в квадратные скобки. Однако само название параметра
содержится в квадратных скобках, превращая его в позиционный параметр - вы можете предоставлять значение названия журнала без
необходимости набирать -Path
. А поскольку этот параметр появляется в первой позиции
внутри соответствующего файла подсказки, вы знаете что значение названия журнала это самый первый предоставленный вами
параметр.
Наш второй параметр, -Stream
, не обязателен; и сам он, и его значение заключены в
квадратные скобки. Внутри них, -Stream
сам по себе не содержится во втором наборе
квадратных скобок, что указывает на то, что это не позиционный параметр. Если бы он являлся позиционным параметром, он бы
выглядел как [[-Stream] <string[]>]
. Следовательно, для предоставления его
значения, вам необходимо указывать название данного параметра.
Наш параметр -Filter
(который приводится далее в этом синтаксисе; запустите
Help Get-Item
и обнаружьте его самостоятельно) не обязателен, потому как он целиком
содержится внутри квадратных скобок. Значение названия -Filter
заключено в квадратные
скобки, что сообщает вам что если вы решите воспользоваться данным параметром, вам придётся набирать значение названия
этого параметра (или по крайней мере его часть). Существует ряд уловок по применению позиционных параметров:
-
Совершенно нормально смешивать и ставить в соответствие позиционные параметры с теми, которым необходимы их названия. Позиционные параметры всегда обязаны быть на верных местах. Например,
Get-Item ~ -Filter *
допустимо:~
заполнит значение параметра-Path
, поскольку данное значение расположено самой первой позицией, а*
проследует в параметр-Filter
, потому как было применено его название. -
Всегда допустимо применять названия параметров, а когда вы поступаете так, значение порядка, в котором вы набираете их, не существенно.
Get-Item -Filter * -Pa *
допустимо, потому как мы воспользовались названиями параметров (в данном случае-Path
сокращено).Замечание Некоторые команды, например,
Get-Item
, обладают множеством позиционных параметров. Самым первым выступает-Path
, за ним следует-Filter
. Когда вы пользуетесь множеством позиционных параметров, не теряйте отслеживание их положений.Get-ChildItem ~ Down*
сработает, при том что~
подключается к-Path
, аDown*
присоединяется к-Filter
.Get-ChildItem ~ Down* ~
не получит ничего вовсе, ибо~
присоединится к-Filter
и, скорее всего, не будет соответствовать никаким элементам.
Мы дадим вам практический совет: Пользуйтесь названиями параметров пока вам это комфортно для конкретных командлетов и пробуйте набирать часто применяемые названия параметров снова и снова. После этого пользуйтесь позиционными параметрами для экономии своего набора. Когда приходит время вставлять команду в некий текстовый файл для более быстрого повторного применения, всегда пользуйтесь полным названием командлета и набирайте полное название параметра - никаких позиционных параметров и никаких сокращений названий параметров. Поступая так вы превращаете файл в более просто читаемый и понимаемый в будущем, а поскольку вам не приходится набирать повторно названия параметров (это обусловлено тем, что вы уже вставили свою команду в файл), вам не придётся проводить дополнительную работу по набору.
Поиск позиционных параметров во всей подсказке
Мы сказали, что вы можете находить позиционные параметры двумя способами. Второй требует от вас открытия файла подсказки
с применением параметра -Full
в команде Help
.
Попробуйте прямо сейчас | |
---|---|
Выполните |
Пролистайте страницы вниз пока не дойдёте до описания параметра -Path
. Он должен
выглядеть как-то похоже на то, что отображено на Рисунке 3-2.
В нашем предыдущем примере вы можете наблюдать, что это позиционный параметр и он появляется в самой первой позиции, сразу после названия самого командлета, на основании значения 0 индекса позиции.
Мы всегда поощряем студентов сосредотачиваться на чтении полной подсказки, когда они приступают к командлетам, вместо того
чтобы пользоваться лишь сокращённым напоминанием синтаксиса. Чтение такой подсказки выявляет дополнительные подробности, включая
такие описания применения параметра. Вы также можете видеть, что эти параметры принимают символы замены, что означает что
вы можете предоставлять значения как Down*
. Вам не требуется набирать значение название
элемента, например значение папки Downloads.
Имеющиеся файлы подсказок также предоставляют вам ключи относительно того, какой вид ввода принимает каждый из параметров.
Большинство параметров ожидают некий вид значений ввода, которые всегда будут следовать за названием параметра и будут
отделяться от значения названия параметра пробелом (а не двоеточием, знаком равенства или иным прочим символом, хотя время от
времени вы можете сталкиваться с исключениями). В сокращённом синтаксисе значение типа ожидаемого ввода отображается угловыми
скобками как <>
:
-Filter <String>
Это отображается аналогичным образом и в полном синтаксисе:
-Filter <String>
Specifies a filter in the format or language of the provider.
The value of this parameter qualifies the Path parameter.
The syntax of the filter, including the use of wildcard characters,
depends on the provider. Filters are more efficient than
other parameters, because the provider applies them when the cmdlet
gets the objects rather than having PowerShell filter
the objects after they are retrieved.
Required? false
Position? named
Default value None
Accept pipeline input? False
Accept wildcard characters? true
Давайте рассмотрим некоторые распространённые типы ввода:
-
String
- Последовательность букв или цифр. Порой может содержать пробелы, однако при их наличии, вся такая строка целиком обязана содержаться в кавычках. Например,/usr/bin
не должна заключаться в кавычки, а~/book samples
обязана, потому как она обладает пробелом в середине. На данный момент вы можете взаимозаменяемо пользоваться одинарными или двойными кавычками, однако лучше привыкать к одинарным. -
Int
,Int32
илиInt64
- Целое число (полное число без десятичной части). -
DateTime
- Обычно некая строка, которая может интерпретироваться как дата на основе региональных установок вашего компьютера. В Соединённых Штатах это обычно нечто вроде10-10-2020
с месяцем, днём и годом. {Прим. пер.: В РФ - 28.10.2020 (день, месяц, год).}.
Прочие, более специфичные типы мы обсудим позднее, по мере их поступления. Вы также обратите внимание на то, что некоторые значения обладают дополнительными квадратными скобками:
-Path <String[]>
Такие идущие одна за другой квадратные скобки после String
не указывают на нечто не
обязательное. Вместо этого, String[]
указывает, что данный параметр способен принимать
массив, набор, либо
список строк. В таких лучаях он всегда допустим для предоставления отдельного
значения:
Get-Item -Path ~
Однако он также допустим и для задания множества значений. Простейшим способом является предоставление разделённого запятыми списка. PowerShell воспринимает разделённые запятыми списки как массив значений:
Get-Item -Path ~, ~/Downloads
И снова, все индивидуальные значения, которые содержат пробел, должны заключаться в кавычки. Однако весь список целиком не заключается в кавычки; важно что в кавычки заключены лишь отдельные значения. Вот это допустимо:
Get-Item -Path '~', '~/Downloads'
Даже если ни одно из таких значений не требует заключения в кавычки, будет нормально заключать его в кавычки, если вы пожелаете. Но приводимое ниже не верно:
Get-Item -Path '~, ~/Downloads'
В данном случае ваш командлет будет искать файл с названием ~, ~/Downloads
, что
скорее всего вовсе не то что бы вы хотели.
Вы также можете заполнять список значений параметра некими прочими путями, включающими считывание названий компьютеров из файла или из прочих командлетов. Такие технологии слегка более сложные, хотя мы и освоим их в последующих главах, после того как вы изучите некоторые командлеты, которые вам понадобятся для столь ловкой работы.
Иной способ, коим вы можете определять множество значений для параметра (допустим, это обязательный параметр), состоит в том что вы не определяете такой параметр вовсе. Как это имеет место для обязательного параметра, PowerShell выдаст вам приглашение на ввод необходимого значения параметра. Для параметров, которые принимают множество значений, вы можете набрать соответствующее первое значение и нажать Enter. PowerShell затем выдаст приглашение на ввод второго значения, который вы можете набрать и закончить нажатием Enter. Продолжайте выполнять это пока не закончите и нажмите Enter в пустом приглашении на ввод, чтобы позволить PowerShell понять что вы закончили. Как и всегда, вы можете нажать Ctrl-C для прерывания своей команды если вы не хотите получать приглашения на ввод.
Иные параметры, носящие название переключателей, не требуют вовсе ввода каких бы то ни было значений. В сокращённом синтаксисе они выглядят следующим образом:
[-Force]
Для полного синтаксиса они выглядят так:
-Force [<SwitchParameter>]
Indicates that this cmdlet gets items that cannot otherwise be accessed,
such as hidden items. Implementation varies from
provider to provider. For more information, see about_Providers
(../Microsoft.PowerShell.Core/About/about_Providers.md).
Even using the Force parameter, the cmdlet cannot override security restrictions.
Required? false
Position? named
Default value False
Accept pipeline input? False
Accept wildcard characters? false
Значение части [<SwitchParameter>]
подтверждает что это переключатель и что он
не ожидает некого входного значения. Переключатели никогда не бывают позиционными; вам всегда необходимо набирать
значение название параметра (или по крайней мере его сокращённую версию). Переключатели всегда необязательны, что предоставляет
вам возможность пользоваться ими, либо нет.
Например, Get-Item .*
никогда не отобразит для вас никаких файлов, но
Get-Item .* -Force
снабдит вас списком файлов, начинающихся с
.
, поскольку начинающиеся с .
файлы рассматриваются
как скрытые, а -Force
сообщает вашей команде включать и скрытые файлы.
Мы склонны учиться на примерах, поэтому мы постараемся втиснуть в данную книгу как можно больше примеров. Разработчики
PowerShell знают, что большинству администраторов нравятся примеры, поэтому многие из них встроены в файлы подсказок. Если вы
прокрутили файл справки Get-Item
до самого конца, вы, скорее всего, заметили почти дюжину
образцов того как применять данный командлет.
Давайте рассмотрим более простой способ добраться до таких примеров, если это всё что вы желаете обнаружить. Воспользуйтесь
параметром -Example
для команды Help
вместо
-Full
:
Help Get-Item -Example
Попробуйте прямо сейчас | |
---|---|
Проследуйте вперёд и откройте примеры командлета, воспользовавшись этим новым параметром. |
Замечание | |
---|---|
Поскольку PowerShell возник в Windows, многие примеры пользуются путями Windows. Предполагается, что вы знаете, что
способны применять пути macOS или Linux. На самом деле, для PowerShell всё равно применяете ли вы в качестве разделителя
каталогов |
Нам нравится обладать такими примерами. Хотя некоторые из них и могут быть сложными. Если како- то из примеров показался вам слишком трудным, пропустите его и пока изучайте другие. Либо слегка поэкспериментируйте (всегда на нерабочем компьютере), чтобы увидеть сможете ли вы разобраться что делает этот пример и почему.
Ранее в этой главе мы упоминали что система подсказок PowerShell содержит темы основ помимо подсказок для конкретных
командлетов. Такие базовые вопросы часто носят название тем "about", поскольку их названия файлов начинаются
с about_
. Из обсуждавшегося ранее в этой главе вы также можете вспомнить что все
командлеты поддерживают некий набор общих параметров. Как вы полагаете, где вы можете ознакомиться дополнительно с этими
общими параметрами?
Попробуйте прямо сейчас | |
---|---|
Прежде чем читать далее, посмотрите можете ли вы перечислить такие общие параметры при помощи своей системы подсказок. |
Вы начинаете с применения символов замещения. Поскольку слово common неоднократно применялось в этой книге, вероятно, неплохо было бы начать с него:
Help *common*
На самом деле это настолько хорошее ключевое слово, что оно соответствует лишь одной теме подсказок:
_common_parameters
. Данная тема отображается автоматически, поскольку это единственное
совпадение. Листая постранично по данному файлу вы обнаружите следующий перечень из 11 (на момент написания этих строк)
общих параметров:
-Verbose
-Debug
-WarningAction
-WarningVariable
-ErrorAction
-ErrorVariable
-OutVariable
-OutBuffer
-InformationAction
-InformationVariable
-PipelineVaribale
Данный файл сообщает, что PowerShell обладает двумя дополнительными параметрами смягчения
последствий (risk mitigation), но они поддерживаются не абсолютно всеми отдельными командлетами. Темы about
чрезвычайно важны в имеющейся системе подсказок, но, поскольку они не связаны с конкретным командлетом, их легко упустить
из виду. Когда вы запустите help about*
для получения списка их всех, вы будете
поражены тем, сколько дополнительной документации скрыто внутри этой оболочки.
Попробуйте прямо сейчас | |
---|---|
Выполните команду |
Файлы подсказок PowerShell писали простые смертные, что означает, что они не свободны от ошибок. В дополнение к обновлению
файлов подсказок (что вы можете осуществить исполнив Update-Help
), Microsoft публикует
подсказки на своём вебсайте. Параметр -Online
команды подсказки PowerShell попробует
открыть подсказку на веб основе - даже в macOS или Linux! - для конкретной команды:
Help Get-Item -Online
Вебсайт документации Microsoft размещает такие подсказки и зачастую они более современны чем то, что устанавливает сам PowerShell. Если вы полагаете что вы наткнулись на ошибку в неком примере или в соответствующем синтаксисе, попробуйте просмотреть Интернет версию искомой подсказки. Не все отдельные командлеты во вселенной обладают Интернет подсказкой; это в зоне ответственности команды каждого из продуктов (например, команды вычислений Azure, которая предоставляет функциональность ВМ, команды Хранилища Azure, и так далее) для предоставления такой подсказки. Однако когда она доступна, это отличный напарник для встроенной подсказки.
Мы влюблены в Интернет подсказку, поскольку она позволяет нам читать весь текст в одном окне (своего веб браузера, в котором эта подсказка к тому же отлично форматирована) по мере того как мы выполняем набор в PowerShell.
Нам важно указать вам на то, что команда PowerShell в Microsoft открыла исходный код для всех своих файлов подсказок с апреля 2016 года. Любой способе добавлять примеры, исправлять ошибки и в целом способствовать улучшению этих файлов подсказок. В Интернете, проект с открытым исходным кодом расположен в https://github.com/MicrosoftDocs/Powershell-Docs и обычно содержит лишь ту документацию, которой владеет сама команда PowerShell; они не обязательно содержат документацию от прочих команд, которые производят команды PowerShell. Вы можете править эти команды напрямую в их документации с открытом исходным кодом!
Замечание | |
---|---|
Для данных лабораторных занятий вам потребуется любой компьютер с исполняемым PowerShell 7. |
Мы надеемся, что данная глава оказала всю важность освоения системы подсказок в PowerShell. Теперь настало время отточить свои навыки, выполнив приводимые далее задания. Имейте в виду, что примеры ответов идут следом. В данных задачах ищите слова, выделенные курсивом и пользуйтесь ими в качестве подсказок для выполнения этих задач:
-
Запустите
Update-Help
и убедитесь что она выполнена без ошибок с тем, чтобы вы обладали копией необходимых подсказок в своём локальном компьютере. Вам потребуется интернет- подключение. -
Можете ли вы найти какой бы то ни было командлет, способный преобразовывать вывод прочих командлетов в HTML?
-
Существуют ли командлеты, способные перенаправлять вывод в некий file?
-
Сколько командлетов способно работать с processes (процессами)? (Совет: вспомните как все командлеты пользуются отдельным существительным.)
-
Какие командлеты вы можете применять для set (настройки) точки прерывания PowerShell. (Совет: относящиеся к PowerShell существительные часто имеют префикс PS.)
-
Вы изучили, что псевдонимы выступают краткими названиями для командлетов. Какие командлеты доступны для создания, изменения, экспорта или импорта aliases (псевдонимов)?
-
Существует ли способ transcript (дублирования) всего что вы набираете в своей оболочке и сохранения такого дубликата в неком текстовом файле?
-
Получение всех процессов может стать ошеломительным. Как вы можете получать процессы по значению названия соответствующего процесса?
-
Существует ли способ запросить
Get-Process
сообщать вам того пользователя, который запускал этот процесс? -
Существует ли способ запуска command в удалённом хосте? (Совет: глаголом для запуска чего- то в данном случае выступает Invoke.)
-
Испробуйте файл подсказки для командлета
Out-File
. Сколько символов в ширину имеют создаваемые по умолчанию этим командлетом файлы? Имеется ли параметр, который позволял бы вам изменять такую ширину? -
По умолчанию,
Out-File
перезаписывает все имеющиеся файлы с тем же самым названием, которое вы определили. Имеется ли параметр, который предотвращал бы перезапись имеющегося файла этим командлетом? -
Как вы можете обнаружить список всех определённых в PowerShell aliases (псевдонимов)?
-
Применяя как псевдоним, так и сокращённые названия параметров, какой будет самая короткая командная строка, которую вы бы могли набрать для выборки списка commands со словом process в их названии?
-
Сколько способных иметь дело с общими объектами командлетов доступно? (Совет: не забудьте применять существительное в единственном числе object вместо его же во множественном - objects.)
-
Данная глава вкратце упоминала arrays (массивы). Какая из тем могла бы сообщить вам дополнительно о них?
-
Update-Help
Либо, когда вы запускаете это более раза за день, пользуйтесь следующим:
Update-Help –force
-
help html
Или вы можете попробовать
Get-Command
:Get-Command –Noun html
-
Get-Command -Noun file,printer
-
Get-Command –Noun process
или
Help *Process
-
Get-Command -Verb set -Noun psbreakpoint
Либо когда вы не уверены в существительном, пользуйтесь символом замены:
help *breakpoint
или
help *break*
-
help *alias
или
Get-Command –Noun alias
-
help transcript
-
help Get-Process –Parameter Name
-
help Get-Process –Parameter IncludeUserName
-
Команда для выполнения поверх SSH:
help Invoke-Command –Parameter hostname
Или команда для запуска под наследуемым протоколом Windows
help Invoke-Command –Parameter computername
-
Help Out-File –Full
или
Help Out-File –Parameter Width
должна показать вм 80 символов как установку по умолчанию для консоли PowerShell. Вы также можете воспользоваться этим параметром для его изменения.
-
Если вы запустите
Help Out-File –Full
и взглянете на параметры, вы должны обнаружить-NoClobber
. -
Get-Alias
-
Gcm -na *process*
-
Get-Command –Noun object
-
help about_arrays
Либо вы можете воспользоваться символами замены:
help *array*