02.12.2021
Афиша "Get-Help Get-Command | Get-Member"

Поиск команд, справка и великий 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 – это тот инструмент, который позволяет заглянуть внутрь объекта и увидеть его методы и свойства. Подробнее о Get-Member

Для примера посмотрим какие свойства и методы есть у объекта класса 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 – это незаменимый помощник. Особенно, если Вы используете командлет впервые или у Вас возникла какая-либо новая потребность.

Анонс следующей статьи: “Знакомые команды CMD, модули и их обзор в консоли ISE”

Игорь Чердаков

Мне 32 года. На текущий момент я являюсь администратором систем Microsoft в одной из крупнейших компаний в России. За моими плечами практически 7 лет опыта работы в IT, последние 3 из которых в администрировании. Сопровождая немалую инфраструктуру, в ежедневной деятельности я сталкиваюсь с необходимостью автоматизации рутинных процессов, в чем мне успешно помогает Powershell. Данный блог основывается на моем личном опыте и знаниях. Мои статьи не являются истиной в последней инстанции и я положительно отношусь к обоснованной и конструктивной критике. По этому я приглашаю Вас обсуждать волнующие нас вопросы, связанные с Powershell.

Посмотреть все записи автора Игорь Чердаков →

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *