Как запустить скрипт PowerShell в Windows

Как запустить скрипт PowerShell в WindowsВсем привет! Сегодня хочу рассказать, как запустить скрипт PowerShell в Windows, покажу разные методы и приведу опыт траблшутинга. Представьте ситуацию вы написали скрипт который сильно упрощает вам вывод информации по Active Directory, вы открываете оснастку powershell, прописываете путь к своему скрипту нажимаете enter и получаете ошибку.

Не удается загрузить файл <путь к вашему файлу>, так как выполнение скриптов запрещено для данной системы. Введите "get-help about_signing" для получения дополнительных сведений. Смотрим как ее решить.

Обычный запуск скрипта PowerShell

Для рядового запуска PowerShell скрипта вам достаточно вызвать контекстное меню и выбрать пункт "Выполнить с помощью PowerShell"

Выполнить с помощью PowerShell

Второй вариант, это открыть оболочку PowerShell у меня это 7-я версия. Далее вам нужно выстроить такую конструкцию с указанием пути для файла скрипта.

& '.\Users\sem\Documents\посчитать дату-01.ps1'

Запуск PowerShell скрипта в оболочке

Ошибки при запуске скрипта PowerShell

выполнение скриптов запрещено для данной системы

Так же вы можете увидеть ошибку после запуска установленного PowerCLI:

Import-Module : Невозможно загрузить файл C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\12.2.0.17
531155\VMware.VimAutomation.Sdk.psm1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
+ Import-Module VMware.PowerCLI
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : Ошибка безопасности: (:) [Import-Module], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

так как выполнение сценариев отключено в этой системе

PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:

  • Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.
  • Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.
  • Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
  • Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.

По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает лишь как интерактивная оболочка. Он не допускает работу скриптов, и загружает лишь те файлы конфигурации, которые подписаны издателем, которому вы доверяете.

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

Разблокировка скрипта PowerShell

Разрешить выполнение скриптов powershell

Чтобы запускать созданные собою скрипты, необходимо разрешить выполнение ненадежных скриптов с помощью команды Set-ExecutionPolicy remotesigned и подтверждением (Внимание!!! для выполнения этой команды необходимо запустить PowerShell с правами администратора). После этого можно вновь запустить выполнения скрипта.

Set-ExecutionPolicy remotesigned

На вопрос жмем Y, для разрешения выполнения скриптов. После этих манипуляций вы сможете запустить ваш скрипт. То же самое я проделал и для PowerCLI, что в результате дало возможность теперь его запускать без проблем.

Set-ExecutionPolicy remotesigned

Ошибка not digitally signed

Еще одной из разновидностей ошибки может быть сообщение, что ваши скрипты не подписаны. Такое поведение вы можете спокойно встретить в Windows 11 или Windows Server 2022 и выше, так как там стандарты безопасности сильно стали выше.

PS C:\Users\sem> Import-Module CrxDownloader
Import-Module: File C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\CrxDownloader\CrxDownloader.psm1 cannot be loaded. The file C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\CrxDownloader\CrxDownloader.psm1 is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies

Powershell is not digitally signed

Чтобы это обойти в Windows 11, например, вы можете зайти в параметры, далее "Система - Для разработчиков". Найти там пункт "PowerShell" и активировать ползунок "Измените политику выполнения так, чтобы можно было выполнять локальные сценарии PowerShell без подписи. Для выполнения локальных сценариев требуется цифровая подпись"

Изменение политики подписи скриптов PowerShell

Либо в PowerShell выполните:

Set-ExecutionPolicy Unrestricted

Как запустить скрипт PowerShell по расписанию

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

Я приведу пример, когда мне нужно было отслеживать события ID 20291 или ID 11707.  И так откройте окно выполнить и введите в нем:

taskschd.msc

 

Запуск taskschd.msc

Далее вы щелкаете по библиотеке правым кликом и из контекстного меню выбираете пункт "Создать задачу".

Создание задачи в планировщике для запуска скрипта PowerShell

Задаете имя задания, советую запускать скрипт PowerShell от имени учетной записи "СИСТЕМА (SYSTEM)", это будет гарантировать, что задание точно отработает.

Как запустить скрипт PowerShell в планировщике

Поставьте галку "Выполнять с наивысшими правами"

Настройка задачи в планировщике Windows

Переходим на вкладку тригеры и создаем новый. В параметрах выберите "При событии"

Запуск скриптов powershell по расписанию

Далее задаем:

  • Журнал - Приложение
  • Источник - MsiInstaller
  • Код события - 11707

Тут тригер будет срабатывать, когда в логах появится событие 11707.

параметры запуска скрипта PowerShell по расписанию

В действие оставляем "Запуск программы". В программе указываем powershell, а в параметрах задайте путь до самого скрипта, через параметр -File c:\scripts\id11707.ps1.

run powershell script

В итоге у меня вышло вот так.

Задание по запуску скрипта PowerShell

Как видим, мое задание по запуску скрипта PowerShell успешно создано и отработало в планировщике Windows.

Как выполнить скрипт powershell

Запуск скрипта PowerShell через исполняемый файл exe

Так же вы можете воспользоваться конвертированием скрипта PowerShell из формата ps1 в exe файл, после чего даже не потребуется менять политику запуска не подписанных скриптов. Так же exe скрипт можете запускать и через планировщик.

На этом у меня все, мы разобрали методы запуска скриптов PowerShell в Windows, с вами был Иван Семин. Материал сайта pyatilistnik.org

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. PowerShell script

    Если вы используете Windows в качестве хоста, вы можете использовать

    powershell -noexit «& «»C:\my_path\yada_yada\run_import_script.ps1″»» (enter)

  2. Сергей

    Иван, а эту политику можно выставить через GPO на windows 7 и КД на windows server 2008r2 ?

  3. Иван Семин автор

    До можно

  4. Анна

    Спасибо большое, за ваш ресурс в целом и за эту статью отдельно. Желаю хорошего развития.