Описание тега powershell
Вопросы о задачах администрирования 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, включая:
- Журналы событий, планировщик задач, WMI, COM-объекты.
- Active Directory, Hyper-V, IIS, службы удаленных рабочих столов и другие роли и функции
- Сервер обмена
- SQL Server
- SharePoint
- Dynamics CRM
- Облачные службы Windows Azure
- Office 365
- А также обычные скриптовые задачи - работа с файлами / папками, учетными записями пользователей, манипулирование строками, запуск внешних программ и т. Д.
Сторонние поставщики также предлагают интеграцию с 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.
Ресурсы
- Microsoft Windows PowerShell Домашняя страница
- Блог группы разработчиков Windows PowerShell
- MSDN Windows PowerShell
- Репозиторий кода PowerShell
- Организация PowerShell
- Галерея PowerShell
- Журнал PowerShell
- Новые возможности PowerShell версии 3
- Новые возможности PowerShell версии 4
- Новые возможности PowerShell версии 5
- Статья в Википедии о PowerShell