PowerShell

PowerShell

Описание 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 Framework через язык сценариев PowerShell. А поскольку .NET позволяет взаимодействовать с 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 и Server 2012 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):

Общие ошибки

Выполнение 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 (файлы .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 https://go. At line:1 char:1 + .\test.ps1 + ~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

Вы можете установить политику выполнения скрипта с помощью командлета Set-ExecutionPolicy:

# 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

Ресурсы

  • Домашняя страница Microsoft Windows PowerShell
  • Блог группы Windows PowerShell
  • Репозиторий кода PowerShell