Windows PowerShell является оболочкой командной строки и языком сценариев для Windows, который заменяет оболочку CMD.exe и пакетный язык. PowerShell является также механизмом автоматизации для Windows, который обеспечивает функциональность, подобную Windows Script Host и VBScript.

Описание Windows PowerShell

Windows PowerShell является оболочкой командной строки и языком сценариев для Windows, который заменяет оболочку CMD.exe и пакетный язык. PowerShell является также механизмом автоматизации для Windows, который обеспечивает функциональность, подобную Windows Script Host и VBScript. Механизм PowerShell является разрешением таблицы хостов функциональность PowerShell быть полученным доступ из пользовательских приложений включая другие хосты PowerShell, такие как PowerShell ISE, PowerGUI и PowerShellPlus.

PowerShell создается сверху Microsoft.NET Framework и выставляет большую часть возможностей Платформы.NET через язык сценариев PowerShell. И так как.NET допускает interop с COM, можно также написать сценарий COM-объектов.

PowerShell 2.0 интегрируется с Windows 7 и Windows Server 2008 R2, и доступен для Windows XP SP3, Windows Server 2003 SP2 и Windows Vista SP1 и SP2. Powershell 5.0 в настоящее время является стандартом в Windows 10 и Сервере 2 012 R2.

Использование в качестве примера

# List all processes using > 100 MB of PagedMemory in descending sort order C:\PS> Get-Process | Where {$_.PagedMemorySize -gt 100MB} | Sort -Desc # PowerShell can also evaluate expressions C:\PS> "Hello World!" Hello World! 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): 

Общие глюки

Выполнение EXEs через путь с пробелами требует заключения в кавычки пути и использования оператора вызова - &

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

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

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' и 'Связь' упаковываются как отдельный аргумент (массив), который передается первому параметру. Корректный вызов:

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

Обратите внимание на это в PowerShell 2.0, использовании Set-StrictMode -version 2.0 поймает этот тип проблемы.

Включение сценариев

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

.\test.ps1 : File C:\test.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + .\test.ps1 + ~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess 

Можно установить политику выполнения сценария с Set-ExecutionPolicy cmdlet:

# Allow scripts to be run by all users. This command requires admin privileges Set-ExecutionPolicy Unrestricted # Allow scripts to be run by the current user. This does not require special privileges Set-ExecutionPolicy Unrestricted -Scope CurrentUser 

Ресурсы