Поделиться через


Ознакомьтесь с PowerShell

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

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

Для чего можно использовать PowerShell?

Изначально PowerShell был только для Windows. Теперь она кроссплатформенная и может использоваться для различных задач, таких как:

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

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

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

Командлеты PowerShell

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

Имя каждого командлета состоит из сочетания Verb-Noun. Например: Get-Process. Это соглашение об именовании делает проще понимание того, что выполняет cmdlet. Это также упрощает поиск нужной команды. При поиске используемого командлета можно отфильтровать глагол или существительное.

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

Когда вы впервые начинаете работать с 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. Piping означает, что две или несколько команд подключены через символ канала | . Выходные данные одной команды отправляются в качестве входных данных для следующей команды. Выражение фильтра для Where-Object использует оператор -like для сопоставления процессов, начинающихся с буквы p.

Изучение объектов с помощью 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 отображает только несколько свойств. В предыдущем примере отображались члены Name, MemberType и Definition. Вы можете использовать Select-Object для указания свойств, которые нужно просмотреть. Например, вы хотите отобразить только Name свойства и Definition свойства:

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

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

Get-Member показывает нам, что Get-Process возвращает объекты типа процесса . Параметр ParameterTypeGet-Command можно использовать для поиска других команд, которые принимают объекты 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…

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

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