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


Обнаружение 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. Это соглашение об именовании упрощает понимание того, что делает командлет. Это также упрощает поиск нужной команды. При поиске используемого командлета можно отфильтровать глагол или существительное.

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

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

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

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

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

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