Общие сведения о PowerShell

PowerShell — это оболочка командной строки и язык сценариев в одной системе. PowerShell запущена в Windows, чтобы автоматизировать административные задачи. Теперь она выполняет кроссплатформенную платформу и может использоваться для различных задач.

То, что делает PowerShell уникальным, заключается в том, что он принимает и возвращает объекты .NET, а не текст. Эта функция упрощает подключение различных команд в конвейере.

Для чего предназначена оболочка PowerShell?

С тех пор, как PowerShell применялась только в Windows, область ее действия значительно расширилась. Он по-прежнему используется для автоматизации задач Windows, но сегодня его можно использовать для таких задач, как:

  • Управление облаком. PowerShell можно использовать для управления облачными ресурсами. Например, можно получать сведения об облачных ресурсах, а также обновлять ресурсы или развертывать новые.
  • CI/CD. PowerShell можно также использовать в рамках конвейера непрерывной интеграции и непрерывного развертывания.
  • Автоматизация задач для Active Directory и Exchange. PowerShell можно использовать для автоматизации практически любой задачи в Windows, например создание пользователей в Active Directory и почтовых ящиков в Exchange.

Существует гораздо больше областей использования, но предыдущий список дает понять, что PowerShell удалось добиться значительного прогресса.

Кто использует PowerShell?

PowerShell — это мощный инструмент, который может помочь людям работать в различных ролях. Традиционно PowerShell использовали сотрудники с ролью системного администратора, но теперь с этим средством активно работают люди, называющие себя инженерами DevOps, Cloud Ops и даже разработчиками.

Командлеты PowerShell

В состав PowerShell входят сотни предустановленных команд. Команды PowerShell называются командлетами (с помощью произнесемой команды).

Имя каждого командлета состоит из пары глагол-существительное. Например, Get-Process. Такое соглашение об именовании облегчает понимание назначения командлета. Оно также упрощает поиск нужной команды. При поиске необходимого командлета можно выполнять фильтрацию по глаголу или существительному.

Использование командлетов для изучения PowerShell

Первое знакомство с PowerShell может показаться пугающим, так как кажется, что предстоит очень многому научиться. Изучение PowerShell происходит постепенно и по мере необходимости.

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

  • Get-Verb. При выполнении этой команды возвращается список глаголов, используемых в большинстве команд. Из ответа ясно, что именно делают эти глаголы. Так как большинство команд соответствуют этому соглашению об именовании, он задает ожидания по выполнению команды. Это очень удобно при выборе нужной команды, а также помогает задать имя для команды, если ее создает пользователь.
  • Get-Command. Эта команда извлекает список всех команд, установленных на компьютере.
  • Get-Member. Она работает с выходными данными на основе объектов и может определять объекты, свойства и методы, доступные для команды.
  • Get-Help. При вызове этой команды с именем команды в качестве аргумента отображается страница справки с описанием различных частей команды.

С помощью этих команд можно узнать о PowerShell практически все, что нужно.

Команда

Глагол является важным понятием в PowerShell. Это стандарт именования, которому следует большинство командлетов. Этого стандарта должны придерживаться и вы в процессе написания собственных команд. Суть в том, что глагол означает действие, которое будет выполняться, например чтение или изменение данных. В PowerShell имеется стандартизированный список глаголов. Чтобы получить полный список всех возможных команд, выполните командлет Get-Verb:

Get-Verb

Командлет возвращает длинный список команд. Описание содержит контекст для того, что глагол предназначен для выполнения. Ниже приведены первые несколько строк выходных данных:

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Поиск команд с помощью командлета Get-Command

Командлет Get-Command возвращает список всех доступных команд, установленных в системе. Список, который вы получите обратно, довольно большой. Вы можете ограничить объем информации, возвращаемой, отфильтровав ответ с помощью параметров или вспомогательных командлетов.

Фильтрация по имени

Вы можете отфильтровать выходные Get-Command данные с помощью различных параметров. Фильтрация позволяет находить команды с определенными свойствами. Параметр Name позволяет найти определенную команду по имени.

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

Что делать, если вы хотите найти все команды, которые работают с процессами? Для сопоставления других форм строки можно использовать дикий карта*. Например:

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

Фильтрация по существительным и глаголам

Существуют другие параметры, которые фильтруются по значениям глаголов и существительных. Глагол в имени команды является ее левой частью. Команда должна быть одной из значений, возвращаемых командлетом Get-Verb . Правая часть команды — это часть существительного. Существительное может быть чем-нибудь.

  • Фильтрация по глаголу. В команде Get-Process частью глагола является Get. Чтобы отфильтровать часть команды, используйте параметр Verb .

    Get-Command -Verb 'Get'
    

    В этом примере перечислены все команды, использующие команду Get.

  • Фильтрация по существительному. В команде Get-Process часть существительного представлена значением Process. Чтобы отфильтровать существительное, используйте параметр Noun . В следующем примере возвращаются все командлеты, имеющие существительные, начиная с буквы U.

    Get-Command -Noun U*
    

Кроме того, можно объединить параметры, чтобы сузить поиск, например:

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

Использование вспомогательных командлетов для фильтрации результатов

Вы также можете использовать другие командлеты для фильтрации результатов.

  • Select-Object. Эта универсальная команда помогает выбрать определенные свойства из одного или нескольких объектов. Вы также можете ограничить количество возвращаемых элементов. В следующем примере возвращаются значения свойств Name и Source для первых 5 команд, доступных в текущем сеансе.

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    Дополнительные сведения см. в разделе "Выбор объекта".

  • Where-Object. Этот командлет позволяет фильтровать объекты, возвращаемые на основе значений свойств. Команда принимает выражение, которое может проверить значение свойства. В следующем примере возвращаются все процессы, с которых ProcessName начинается p.

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Командлет Get-Process возвращает коллекцию объектов процесса. Чтобы отфильтровать ответ, передайте выходные данные Where-Objectв . Передача через конвейер означает, что две или более команды соединены с помощью символа вертикальной черты |. Выходные данные одной команды отправляются в качестве входных данных для следующей команды. Выражение фильтра для использования оператора для Where-Object сопоставления процессов, начинающихся с буквыp.-like

Изучение объектов с помощью Get-Member

После того как вы сможете найти нужный командлет, вы хотите узнать больше о том, какие выходные данные он создает. Командлет Get-Member отображает тип, свойства и методы объекта. Передайте выходные данные, которые требуется изучить, в командлет Get-Member.

Get-Process | Get-Member

Результат отображает возвращаемый тип как TypeName и все свойства и методы объекта. Вот фрагмент такого результата:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

С помощью параметра MemberType можно ограничить возвращаемые сведения.

Get-Process | Get-Member -MemberType Method

По умолчанию PowerShell отображает только несколько свойств. В предыдущем примере отображаются NameMemberType элементы и Definition элементы. Вы можете использовать Select-Object для указания свойств, которые нужно просмотреть. Например, вы хотите отобразить только Name свойства и Definition свойства:

Get-Process | Get-Member | Select-Object Name, Definition

Поиск по типу параметра

Get-Member показывает нам, что Get-Process возвращает объекты типа процесса . Параметр Get-Command ParameterType можно использовать для поиска других команд, которые принимают объекты Process в качестве входных данных.

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Зная тип выходных данных команды, можно сузить поиск связанных команд.

Дополнительные ресурсы