Описание тега powershell

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

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

Windows PowerShell

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

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

Как оболочка командной строки, он разработан на основе командлетов, названных в форме {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):

Общие проблемы

Выполнение файлов 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' ''

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

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 https://stackru.com/images/f609284566be8a1e733a906805aa5986d7ccf1ba.png "PSReadLine заменяет возможность редактирования командной строки в PowerShell.exe для версий 3 и выше". Включен в Windows 10.

  • Powertab "PowerTab предлагает расширенные возможности расширения вкладок для PowerShell".

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

Ядро PowerShell

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

Ресурсы