PowerShell - это кроссплатформенная утилита командной строки и сценариев от Microsoft. Используйте этот тег только для вопросов о написании и выполнении сценариев PowerShell. Вопросы программирования, относящиеся к кроссплатформенной версии PowerShell Core (Windows, macOS и Linux), должны быть помечены [powershell-core]. Вопросы о системном администрировании следует задавать в случае сбоя суперпользователя или сервера.

Вопросы о задачах администрирования Windows, связанных с PowerShell, следует задавать по адресу Super User. Вопросы по теме предназначены ТОЛЬКО для написания сценариев

Windows PowerShell

powershell- это интерактивная оболочка и язык сценариев, изначально входящий в состав Microsoft Windows 7 и Microsoft Windows Server 2008 R2 и более поздних версий. Он включает в себя оболочку командной строки (Windows PowerShell) для интерактивного использования - базовую среду сценариев для запускать сценарии из командной строки и среды редактирования / отладки сценариев GUI (Windows PowerShell ISE). См .: Начало работы с Windows PowerShell.

Как язык, powershellимеет синтаксис для литеральных массивов и хеш-таблиц, поддержку регулярных выражений, сопоставление с образцом и расширение строк. Он построен на платформе .NET, поэтому имеет поддержку Unicode, может быть ориентирован на локаль и культуру и может напрямую обращаться к методам платформы .NET.

Как оболочка командной строки, она построена на основе командлетов, названных в форме {Verb} - {Noun}, предназначенных для использования однотипных команд во многих доменах. Например. Get-Date возвращает текущую дату, а Get-Process возвращает массив объектов, представляющих запущенные процессы, которые можно передать другим командам, работающим с объектами процесса. Многие команды и ключевые слова имеют короткие псевдонимы для сокращения ввода.

В качестве среды управления системой компоненты Windows и продукты Microsoft были расширены для обеспечения собственных интерфейсов PowerShell в рамках создания единой системы управления для систем Windows, включая:

Сторонние поставщики также предлагают интеграцию PowerShell, в том числе:

powershellиспользует идею Unix, заключающуюся в передаче текста между программами и манипулировании текстом, и расширяет ее, распространяя экземпляры объектов .NET. Поскольку объекты несут информацию о типе (например, даты и время) и сложное состояние (например, свойства и методы, хеш-таблицы, проанализированные данные XML и сетевые сокеты в реальном времени), это облегчает многие задачи, которые было бы трудно или нецелесообразно выполнить, передавая текст между программами ,

Помимо взаимодействия с консолью PowerShell или PowerShell ISE, есть также несколько сторонних опций IDE, включая PrimalScript ISE Sapien.

Пример использования

# List all processes using > 100 MB of PagedMemory in descending sort order (v3_
C:\PS> Get-Process | Where PagedMemorySize -GT 100MB | Sort -Descending

# PowerShell can handle numbers and arithmetic
C:\PS> (98.6 - 32) * 5/9
37

# Production orientation allows experimentation and confirmation
C:\PS> Get-ChildItem C:\Users\John *.bak -r |
           Where {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |
           Remove-Item -WhatIf
What if: Performing operation "Remove File" on Target "C:\Users\John\foo.bak"

C:\PS> Get-Process iexp* | Stop-Process -Confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "iexplore (7116)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is Y):

Общие Gotchas

Для выполнения EXE-файлов через путь с пробелами необходимо указывать путь и использовать оператор вызова - &

C:\PS> & 'C:\Program Files\Windows NT\Accessories\wordpad.exe'

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

C:\PS> function Greet($fname, $lname) {"My name is '$lname', '$fname' '$lname'"}
C:\PS> Greet('James','Bond') # Wrong way to invoke this function!!
My name is '', 'James Bond' ''

Обратите внимание, что 'James' и 'Bond' упакованы как один аргумент (массив), который передается первому параметру. Правильный вызов:

C:\PS> Greet James Bond
My name is 'Bond', 'James' 'Bond'

Обратите внимание, что в PowerShell 2.0 использование Set-StrictMode -version 2.0 решит проблему такого типа.

Профили PowerShell

Другая распространенная проблема при перемещении файлов с компьютера пользователя в производственную среду - несоответствие настроек профиля. На компьютере пользователя может быть определен profile.ps1 внутри этой папки

%UserProfile%\Documents\WindowsPowerShell

Файл профиля используется для определения определенных команд, которые автоматически выполняются перед запуском скрипта. Общие команды могут включать добавление оснастки PowerShell. Чтобы минимизировать этот тип путаницы между средами, рекомендуется запускать тесты с командной строкой PowerShell с помощью флага -NoProfile. Это обеспечит выполнение сценария профиля.

Дополнительную информацию о профилях можно найти здесь. ,

Расширяемые функциональные возможности

Одной из замечательных особенностей PowerShell является его расширяемость: мы можем добавить функциональность, импортируя модули, которые представляют собой пакет командлетов, функций и псевдонимов, специализирующихся на конкретном домене (например, администрирование базы данных, администрирование виртуальной машины и т. Д.).

Вот наиболее часто используемые в сообществе модули:

  • PSReadLine"PSReadLine заменяет возможность редактирования командной строки в PowerShell.exe для версий 3 и выше." Включено в Windows 10.

  • Powertab«PowerTab предлагает расширенное расширение вкладок для PowerShell».

  • PSCX«Расширения сообщества PowerShell (PSCX) предназначены для предоставления широкого набора дополнительных командлетов, поставщиков, псевдонимов, фильтров, функций и скрипты для Windows PowerShell, в которых члены сообщества проявили интерес, но еще не добавлены в PowerShell ».

PowerShell Core

С 2016 года версия PowerShell с открытым исходным кодом и кроссплатформенная (Windows, macOS и Linux) была в альфа-состоянии, а затем в бета-состоянии. Обеспечение общей доступности в 2018 году, PowerShell Core построен на .NET Core Framework. Вопросы о функциональности, специфичной для PowerShell Core, должны быть помечены powershell-core.

Ресурсы