Как запустить сценарий PowerShell из командной строки и многое другое

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

Предварительные требования

Эта статья будет для вас практическим руководством по запуску PowerShell на вашем локальном компьютере. Если вы хотите следовать за нами, убедитесь, что у вас есть следующие предварительные требования перед началом этой статьи.

  • A Windows 10 computer with Administrator privileges.
  • Windows версии PowerShell 5 или выше. Вы также можете использовать PowerShell v7. В этом учебнике будет рассмотрен Windows PowerShell, так как он уже присутствует в операционной системе Windows.
  • Любой редактор текстовых файлов

Работа с политикой выполнения

Если это ваш первый опыт попыток выполнения сценария Windows PowerShell, вы, возможно, столкнетесь с распространенной проблемой. PowerShell вероятно вернет сообщение об ошибке, указывающее, что сценарий “не может быть загружен, потому что выполнение сценариев отключено на этой системе”.

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

PowerShell возвращает вышеуказанное сообщение об ошибке при попытке запустить PowerShell с установленной политикой выполнения Restricted, Remote Signed или All Signed.

Restricted

– это политика по умолчанию для клиентских компьютеров под управлением Windows. Если вы используете PowerShell впервые, вероятно, ваша политика по умолчанию ограничит все сценарии.

Вы все равно можете выполнять отдельные команды в терминале, но не файл сценария. Ограничение включает в себя любой файл, заканчивающийся на .ps1xml, .psm1 или .ps1.

Unrestricted

– это политика, позволяющая запускать любой сценарий, предупреждая вас перед выполнением, если сценарий загружен из интернета. Эта политика обычно является политикой по умолчанию для устройств, не под управлением Windows.

Remote Signed

– эта политика позволяет запускать любой сценарий, который либо (a) цифрово подписан, либо (b) написан на вашем локальном компьютере с или без подписи.

Если сценарий загружен из интернета и не подписан, вам нужно разблокировать файл. Вы можете сделать это, щелкнув правой кнопкой мыши по файлу и выбрав Свойства. Или вы можете использовать командлет PowerShell Unblock-File для этого конкретного сценария.

Использование политики Remote Signed было бы идеальным вариантом при выполнении сценария, загруженного из интернета.

All Signed

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

Изменение политики выполнения PowerShell

Чтобы изменить политику выполнения:

  1. Откройте Windows PowerShell с помощью Запуск от имени администратора, чтобы убедиться, что у вас есть самые высокие разрешения для внесения изменений в политику.
Search PowerShell in Start Menu

2. При открытии выполните следующую команду PowerShell, чтобы установить политику выполнения вашего компьютера. Политика выполнения, как было упомянуто выше, может быть одним из трех различных типов. В этом руководстве используется полезная, но все еще безопасная политика выполнения RemoteSigned.

Поскольку в этом руководстве предполагается, что вы загрузили из интернета файл скрипта GetServices.ps1, установите политику выполнения на RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

Политика выполнения RemoteSigned заставляет вас криптографически подписывать каждый сценарий PowerShell, загруженный из Интернета, перед тем, как PowerShell запустит его на вашей системе.

3. Вы должны увидеть выход, запрашивающий подтверждение действия. Введите Y и нажмите Enter, чтобы подтвердить изменение политики.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

На этом этапе следуйте следующим шагам, чтобы изучить различные методы запуска сценария PowerShell на вашем компьютере.

Как запустить сценарий PowerShell

Чтобы продемонстрировать запуск сценария PowerShell, вам действительно нужен файл сценария для запуска! Если у вас его нет под рукой, загрузите этот ZIP-архив и извлеките файл PS1 из него. Внутри вы найдете простой файл сценария под названием GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Каждый сценарий PowerShell должен заканчиваться расширением .ps1.

Использование консоли

После того как у вас есть готовый сценарий, есть несколько разных способов выполнения файла сценария PowerShell. Один из самых распространенных способов – через консоль PowerShell.

Для этого:

  1. Откройте консоль PowerShell, как показано выше.

2. Перейдите в местоположение файловой системы, где находится ваш сценарий, используя командлет PowerShell Set-Location или псевдоним cd. Сценарий этого учебного пособия находится в каталоге C:\Temp.

PS> cd C:\Temp\

3. Запустите сценарий, используя точку (.) в обозначении. PowerShell – это оболочка, которая также ищет имена команд. Чтобы различить между командой PowerShell и сценарием, вы должны предварить сценарий точкой. Эта точка представляет текущий каталог.

 PS> .\GetServices.ps1

Как запустить сценарий PowerShell из командной строки через местоположение PowerShell

Если вы не можете или предпочитаете не запускать сценарии через консоль PowerShell, вы также можете сделать это через хорошую старую командную строку (командный интерпретатор).

Чтобы запустить сценарии через командную строку, сначала необходимо запустить исполняемый файл PowerShell (powershell.exe), указав расположение PowerShell C:\Program Files\WindowsPowerShell\powershell.exe и затем передать путь к сценарию в качестве параметра.

Вы можете запускать сценарии с параметрами в любом контексте, просто указав их при запуске исполняемого файла PowerShell, например, powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

После открытия cmd.exe можно выполнить сценарий PowerShell, как показано ниже. В этом примере запускается движок и передается путь к сценарию C:\Temp\GetServices.ps1.

Обратите внимание, что в приведенном ниже примере используется путь к местоположению PowerShell для запуска сценария. Вам придется сделать это, если папка не указана в вашем PATH.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

Местоположение PowerShell для PowerShell 7 использует другой исполняемый файл с именем pwsh.exe, обычно расположенный в C:\Program Files\PowerShell\7\pwsh.exe.

Ниже приведено удобное видео на YouTube, в котором рассматривается выполнение сценария через пакетный файл, который выполняет cmd.exe.

Использование среды PowerShell ISE

Если вы создаете собственные сценарии или редактируете сценарии других пользователей, вероятно, вы будете использовать редактор сценариев, такой как PowerShell ISE или, возможно, Visual Studio (VS) Code. Поскольку ISE поставляется с Windows, давайте сосредоточимся на этом методе для данного учебного пособия.

Для вызова скрипта через ISE:

  1. Перейдите в меню “Пуск”, найдите PowerShell ISE и откройте его.
Search PowerShell ISE in Start Menu

2. Нажмите на ФайлОткрыть и найдите ваш скрипт.

Open Script using File Menu

3. С открытым скриптом нажмите на зеленую кнопку запуска, чтобы выполнить скрипт. Эта кнопка вызовет скрипт встроенного терминала PowerShell внизу.

Run Script using PowerShell ISE

Выходной результат примера скрипта

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Если вы запустите пример скрипта GetServices.ps1, вы увидите следующее. Этот скрипт выполняет командлет Get-Service, который возвращает все службы, установленные на вашем компьютере под управлением Windows.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Запуск сценария PowerShell из другого сценария

Допустим, у вас есть два сценария, и вы хотите, чтобы один вызывал другой. Возможно, у вас есть сценарий под названием GetUser.ps1 и один под названием ResetPassword.ps1. Внутри сценария GetUser.ps1 вы хотите выполнить сценарий ResetPassword.ps1 для сброса пароля пользователя.

Внутри вызывающего сценария (GetUser.ps1) вы добавляете строку для выполнения другого сценария, так же, как если бы вы вызывали сценарий из командной строки.

Ниже вы можете видеть несколько вариантов. Обычно вы должны выбрать выполнение другого сценария в рамках той же сессии или области видимости, чтобы упростить задачу, если у вас нет конкретных причин запуска сценария в другой сессии PowerShell.

## Запустить другой сценарий в новой сессии
powershell.exe .\ResetPassword.ps1
## Запустить другой сценарий в той же сессии
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/