Найти тему
ProPowershell.ru

Основы Powershell. Поиск команд, справка и великий Get-Member

Оглавление

Как искать команды в Powershell?

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

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

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

Вам необходимо перезапустить службу Диспетчера печати. Вы не знаете с помощью каких команд можно взаимодействовать со службами, но Вы точно знаете, что Ваш целевой объект это – служба (Service).

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

Get-Command *-Service*

Этот командлет в качестве параметра принимает имя или часть имени искомой команды (допускается использование подстановочных символов). И на выходе Вы получите список всех команд, в имени которых фигурирует наш объект – служба (Service). Get-Command можно выполнить и без указания каких-либо параметров, тогда Вы получите полный список всех возможных команд с учетом установленных на момент выполнения модулей powershell, что в нашем случае избыточно. Для фильтрации избыточной информации Вы можете использовать ключ -CommandType и указать тип желаемых объектов, например Cmdlet, что фактически будет означать “Покажи мне только команды, у которых параметр CommandType имеет значение Cmdlet”.

Пример работы команды Get-Command
Пример работы команды Get-Command

Таким образом мы видим, что для выполнения нашей задачи наверняка подойдет командлет Restart-Service. При этом, если выполнить Get-Command еще и с ключом -Syntax, Вы сразу сможете увидеть общий синтаксис каждой команды, попавшей в вывод.

Получение справки по командам

В powershell так же существует довольно мощная справочная система. Так как с ростом версии powershell командлеты могут изменяться, то и справочная система время от времени обновляется. Чтобы ей воспользоваться необходимо выполнить команду Get-Help, либо один из ее псевдонимов MAN или HELP. В отличие от Get-Help псевдонимы выводят справку постранично, Get-Help выводит всю справку целиком.

Чтобы узнать, как работает команда перезапуска службы напишем команду Get-Help, укажем командлет, по которому мы хотим получить справку – Restart-Service. Погнали:

Get-Help Restart-Service
Пример работы Get-Help
Пример работы Get-Help

Стандартный вывод нам предоставляет краткое и полное описание команды, ее синтаксис, ссылки на документацию (в случае ее наличия) и информацию о некоторых полезных ключах. Например выполнение Get-Help с ключом -Online отобразит актуальную на текущий момент справку прямо из Интернета, если к нему есть доступ. Ключ -Examples продемонстрирует ряд конкретных примеров использования командлета, по которому запрошена справка.

Отдельно отмечу такой довольно полезный ключ как -ShowWindow. Выполнение Get-Help с этим ключом вызывает графическое окно с полным справочным описанием команды, с возможностью поиска по нему. Но его использование возможно только в операционной системе с графическим интерфейсом (GUI).

Пример работы Get-Help с ключом -ShowWindow
Пример работы Get-Help с ключом -ShowWindow

Таким образом из справки понятно, что для перезапуска службы “Диспетчер печати” достаточно будет выполнить командлет Restart-Service и в его параметре -Name указать имя службы:

Restart-Service -Name spooler

Get-Member – просмотр свойств объекта

Возможно все это время Вас терзает вопрос – в чем же величие командлета Get-Member? Так как powershell – это язык объектно-ориентированный и мы постоянно оперируем объектами, зачастую возникает необходимость в понимании того, какими свойствами и методами обладает объект, каким будет тип данных у его свойств или в результате выполнения его методов. Различные командлеты могут принимать на вход значения конкретно заданного типа данных. И может возникнуть ситуация, когда с виду рабочий скрипт не работает, потому что на вход следующему командлету по конвейеру передается объект не того типа, который он ожидает получить.

Get-Member – это тот инструмент, который позволяет Вам заглянуть внутрь объекта и можно сказать, увидеть его схему, если проводить параллель со схемой Active Directory. Для примера давайте посмотрим какие свойства и методы есть у объекта класса System.DateTime (дата\время). Для чего выполним:

Get-Date | Get-Member

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

Пример использования Get-Member
Пример использования Get-Member

Как Вы можете видеть, у объекта класса System.DateTime есть методы, позволяющие добавлять к дате такие параметры как – дни, часы, минуты. Это может быть полезным, когда есть необходимость, например, просматривать логи за последнее какое-то количество дней. Для примера чтобы получить дату, на 5 дней предшествующую текущей, можно выполнить метод (Get-Date).AddDays(-5) и передать ему на вход отрицательное количество дней.

И есть свойства, такие как DayOfWeek, DayOfYear. Обратившись к ним так же через точку (Get-Date).DayOfWeek, Вы можете узнать какой сегодня день недели или какой сегодня день по счету в году. В первом случае тип данных будет – System.DateTimeKind, а во втором – Int.

Так же в параметре TypeName (в самом верху) Вы можете видеть тип самого объекта. В нашем случае это – System.DateTime.

Get-Member – это незаменимый помощник, особенно, если Вы используете командлет впервые или у Вас возникла какая-либо новая потребность, с которой Вы ранее не сталкивались.

Далее мы разберем тему псевдонимов (алиасов) команд, модулей и как пользоваться обозревателем команд в консоли Powershell ISE.

Благодарю за внимание!