Общие сведения о 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 отображает только несколько свойств. В предыдущем примере отображаются Name
MemberType
элементы и 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…
Зная тип выходных данных команды, можно сузить поиск связанных команд.
Дополнительные ресурсы
PowerShell