Powershell: как работать с программой, создавать, запускать и изменять скрипты

Запуск скриптов PowerShell

PowerShell — это новая командная оболочка для Windows, которая по задумкам Microsoft должна вытеснить и заменить cmd. По-умолчанию, эта оболочка уже идет в составе Windows 7 и выше. Если у вас более старая операционная система или вы просто хотите скачать более свежую версию PowerShell, сделать это можно здесь: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx

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

Есть несколько различных способов запуска скрипта, ниже приведены основные:

  1. Запустить оболочку PowerShell и в ней запустить скрипт (ввести путь до файла и имя файла, например, так: C:Scriptstest.ps1, или перейти в папку скрипта командой cd C:Scripts и запустить его командой .test.ps1) Оболочку можно найти и запустить множеством способов. Один из способов — через меню «Пуск». Для Windows 7 — нужно зайти во «Все программы» — «Стандартные» — «Windows PowerShell» и запустить оболочку «Windows PowerShell». Для Windows 10 — нужно найти группу на букву «W» и в ней вы найдете «Windows PowerShell».
  2. Запустить «Интегрированную среду сценариев Windows PowerShell ISE» — это программа — среда разработки, позволяющая редактировать и отлаживать скрипты PowerShell, которая так же есть по-умолчанию вместе с самим PowerShell. Запустив ее, нужно просто нажать кнопку «Открыть» или зайти в меню Файл — Открыть и выбрать нужный скрипт, затем нажать F5 или кнопку «Выполнить скрипт».Найти Windows PowerShell ISE можно там же, где и оболочку PowerShell — в меню «Пуск».
  3. Запустить стандартную коммандную строку и в ней написать:
    powershell -file (пример: powershell -file myscript.ps1)

Если вы раньше не запускали скрипты PowerShell, то скорее всего, вы получите сообщение: Не удается загрузить файл , так как выполнение скриптов запрещено для данной системы. Введите «get-help about_signing» для получения дополнительных сведений. Связано это с тем, что из соображений безопасности и недопущения случайного выполнения вредоносного кода, все скрипты должны быть подписаны цифровой подписью.

Как разрешить выполнение неподписанного скрипта PowerShell?

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

Set-ExecutionPolicy RemoteSigned -Scope Process

2. При запуске из стандартной коммандной строки использовать параметр -executionpolicy, т.е. запускать скрипт так:

powershell -executionpolicy RemoteSigned -file

Оба способа устанавливают политику только для текущего сеанса, при этом, политика безопасности выполнения скриптов PowerShell, прописанная в реестре, не будет изменена и останется прежней. Если вы хотите поменять политику безопасности выполнения скриптов «на постоянно», то используйте такой способ:

3. Разрешить запуск навсегда : запустить оболочку PowerShell от имени «Администратора», затем выполните команду:

Set-ExecutionPolicy RemoteSigned

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

Примечание: Если скрипт был загружен из интернета, то чтобы избежать запроса на подтверждение запуска, нужно вместо RemoteSigned использовать Bypass — полное отключение любых запросов и предупреждений.

Как запустить скрипт PowerShell в фоновом режиме?

Для этого достаточно использовать параметр запуска -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Таким образом, чтобы запустить неподписанный скрипт в фоновом режиме, нужно выполнить команду:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file

Так же можно еще при желании добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Будmте внимательны, используя такой способ.

Запуск скрипта PowerShell c параметрами

Собственно запуск нужно делать как если бы вы запускали обычную программу или bat-файл с параметрами. Например, для запуска скрипта с параметрами из командной, можно написать такую команду:

powershell -executionpolicy RemoteSigned -file param1 param2 «еще один текстовый параметр»

В самом скрипте вы можете получить эти параметры так:

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

Как запустить скрипт PowerShell с помощью ярлыка?

Осуществить такую задачу можно двумя способами:

  1. Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
  2. Создать ярлык на PowerShell, который можно найти в папке c:WindowsSystem32WindowsPowerShellv и в свойствах ярлыка в поле «Объект» дописать необходимые параметры.

Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.

Скриптовый язык PowerShell — довольно мощный инструмент для решения различных задач, но его можно использовать не только для хороших вещей, но и во вред, поэтому, пользуйтесь им с умом 😉

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

В операционной системе Windows 10 имеется мощный инструмент для управления и выполнения различных задач — это PowerShell. Эта консоль предназначена для администраторов, поскольку она позволяет им контролировать всю операционную систему с помощью сценариев (script). PowerShell используется многими фоновыми приложениями для внесения изменений в систему и это ставит под угрозу безопасность нашего ПК.

Сценарий (script) — простая программа написана в коде, который работает линейно на нашем компьютере. Мы можем создавать и выполнять собственные сценарии для автоматизации задач, или приложения могут выполнять их для выполнения определенных конфигураций и задач. По умолчанию Windows 10 не запрещает ни приложениям, ни нам запускать сценарии в системе, если они подписаны или являются «своими». Проблема возникает, когда мы запускаем свой скрипт, и нам выдает ошибку «Выполнение сценариев отключено в этой системе«. Это многоуровневая мера безопасности в PowerShell, которая предотвращает запуск вредоносных сценариев и может нанести вред системе. Давайте разберем, как изменить политики безопасности для PowerShell.

Политики выполнения скриптов в PowerShell

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

  • Get-ExecutionPolicy -List

Мы можем видеть несколько уровней разрешений политик для запуска сценариев.

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

  • Restricted: заблокировано выполнение любых скриптов, но разрешается работа интерактивных команд.
  • RemoteSigned: загруженные скрипты должны быть подписаны доверенным издателем. Локальные скрипты работают без подписи
  • AllSigned: разрешает выполнение любого подписанного скрипта, как локального, так и удаленного (загруженного).
  • Unrestricted: без ограничений. Вы можете запустить все сценарии, даже те, которые не подписаны.

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

  • Set-ExecutionPolicy Unrestricted -Scope CurrentUser — запуск без ограничения для пользователя.
  • Set-ExecutionPolicyRestricted -Scope CurrentUser вернуть назад, если будет нужно.

Разрешает без ограничений выполнять сценарии для локального пользователя. Ключ -Scope определяет, к чему применяется изменение политики. Когда вы вводите «CurrentUser«, то применяется только к текущему пользователю, а когда вы вводите «LocalMachine«, он применяется ко всей системе.

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

  • Set-ExecutionPolicy Unrestricted — разрешить выполнение скриптов без ограничений.
  • Set-ExecutionPolicy Restricted — вернуть назад по умолчанию.

Запуск PowerShell скрипта при возникновении определенного события

Мне пришлось столкнуться с необходимостью запускать PowerShell скрипты при возникновении определенного события (Windows Event) при организации DHCP failover. Однако, думаю, что применений может быть масса. Покопался в сети и нашел статью под названием Trigger a PowerShell Script from a Windows Event. (http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Предлагаю Вашему вниманию перевод данной статьи на русский язык.

Этот пример показывает, как сделать две вещи сразу. Запустить скрипт PowerShell при возникновении определенного события Windows Event, а ТАКЖЕ передать нужные параметры Event-а в запускаемый скрипт. Для примера будет использовано тестовое событие сгенерированное при помощи программы EventCreate из командной строки.

Предыстория: Этот сценарий был нужен для очистки определенной общей папки при возникновении специфического события (Windows Event). Событие записывалось после того как завершался процесс внесения «водяного знака» в определенный файл. Событие, используемое в этом примере повторяет формат стандартного события.

Будут показаны следующие шаги:

  • Ручное создание и переключение события
  • Использования консоли Просмотра Событий (Event Viewer)
  • Изменение запланированной задачи для передачи параметров события скрипту
  • Запуск и выполнение PowerShell скрипта
  • Проверка настроек

Шаг 1: Создание записи о событии с помощью EventCreate

C:>eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D «

2011-08-29T21:24:03Z C:tempSome Test File.txt Success

Шаг 2: Создаем новое задание в консоли журнала просмотра событий, с помощью контекстного меню «Прикрепить задачу к данному событию (“Attach Task to This Event…”)

Запустите консоль Event Viewer (eventvwr.msc), найдите в журнале событий Windows Logs -> Application событие, созданное на предыдущем шаге. Щелкните по нему ПКМ и выберите меню «Attach Task to This Event…»

Создайте задачу на запуск программы (“Start a Program”) со следующими параметрами:

Программа/скрипт (Program/script): PowerShell.exe

Аргументы (Add arguments): .TriggerScript.ps1 -eventRecordID $(eventRecordID) -eventChannel $(eventChannel)

Запуск в (Start in) (вам может понадобиться создать эту папку или указать на существующую папку): c:temp

Шаг 3: Изменение задачи для передачи деталей события (trigger event) и передача параметров в скрипт PowerShell

Внутри Планировщика Задач (Task Scheduler), выгрузите только что созданную задачу (как файл XML). Кликните правой кнопкой мыши на задачу «Application_SomeApplication_1000» в папке «Event Viewer Tasks», и выберите «Export…«.

С помощью блокнота (Notepad) или другого текстового редактора (желательно, чтобы редактор поддерживал редактирование Unicode, как Блокнот) добавим параметры события (Event parameters), которые необходимо передать. Параметры события, представленные ниже, наиболее часто используются для идентификации события. Заметим, что весь узел и его дочерние элементы необходимо добавить в ветку EventTrigger.

Event/System/Channel
Event/System/EventRecordID
Event/System/Level

Из командной строки запустите следующие команды для удаления задания планировщика и пересоздания ее с помощью только что модифицированного файла (я не знаю способа модифицировать задания с использованием измененного XML файла).

C:>schtasks /delete /TN «Event Viewer TasksApplication_SomeApplication_1000»
C:>schtasks /create /TN «Event Viewer TasksApplication_SomeApplication_1000» /XML Application_
SomeApplication_1000.xml

Шаг 4: Создание PowerShell скрипта TriggerScript.ps1, который вызывается заданием планировщика

# Script Name: TriggerScript.ps1
# Usage Example (use a valid ID found via Event Viewer XML view of an event): powershell .TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Create a fake event or testing with the following command (from an elevated command prompt):
# eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D «2011-08-29T21:24:03ZC:tempSome Test File.txtSuccess»
# Collects all named paramters (all others end up in $Args)
param($eventRecordID,$eventChannel)

$event = get-winevent -LogName $eventChannel -FilterXPath » »
[xml]$eventParams = $event.Message
if ($eventParams.Params.TimeStamp) <
[datetime]$eventTimestamp = $eventParams.Params.TimeStamp
$eventFile = $eventParams.Params.InputFile
$popupObject = new-object -comobject wscript.shell
$popupObject.popup(«RecordID: » + $eventRecordID + «, Channel: » + $eventChannel + «, Event Timestamp: » + $eventTimestamp + «, File: » + $eventFile)
>

Шаг 5: Проверка настроек с помощью генерирования нового события, аналогичному созданного в Шаге 1

C:>eventcreate /T INFORMATION /SO SomeApplication /ID 1000 /L APPLICATION /D «

2011-08-29T21:24:03Z C:tempSome Test File.txt Success

Вы должны увидеть такое всплывающее окно сообщения:

Не сработало? Проверяем следующее:

  • Проверьте наличие события в Event Viewer. Вам может понадобиться обновить просмотр через меню «Обновить» или кнопкой F5.
  • Вручную запустите скрипт с реальными параметрами и посмотрите на возможные ошибки (обратите внимание на комментарии в скрипте, с примерами применения). Пока скрипт является “не подписанным”, может потребоваться настроить PowerShell на запуск данного как не подписанного (см. PS> get-help about_Execution_Policies).
  • Убедитесь, что задача находится в Планировщике Заданий (Task Scheduler) в папке “Event Viewer Tasks” и посмотрите на историю выполнения задачи (“History”).

Запуск ps1 скрипта. PowerShell

Самое первое из за чего обычно не запускается скрипт написанный на powershell это из за следующих ошибок:

Файл невозможно загрузить. Файл не имеет цифровой подписи. Скрипт не будет выполнен в системе. Чтобы получить дополнительные сведения, введите команду «Get-Help about_signing».
The file cannot be loaded. The file is not digitally signed. The script will not execute on the system. Please see «Get-Help about_Signing» for more details.

Запустить программу от ненадежного издателя? Файл опубликован CN=

. Этот издатель не помечен как надежный в данной системе. Выполнять следует только скрипты надежных издателей.
[V] Никогда не выполнять [D] Не выполнять [R] Выполнить один раз [A] Всегда выполнять [?] Справка (по умолчанию «D»):
Do you want to run software from this untrusted publisher? The file is published by CN=

. This publisher is not trusted on your system. Only run scripts from trusted publishers.
[V] Never run [D] Do not run [R] Run once [A] Always run [?] Help (default is «D»):

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

Поэтому обычно данную проблему решают командой:

Применить данную команду рекомендуется в консоли PowerShell запущенной от имени администратора. Данная команда разрешит выполнять, на данном компьютере, не подписанные скрипты и скрипты из Интернета.

Если данное решение вас не устраивает разберёмся подробнее.

Get-Executionpolicy

Посмотреть текущие настройки политики во всех областях применения можно выполнив командлет Get-Executionpolicy с параметром list.

Результат выполнения командлета:

Поделиться с друзьями:
Поделиться
Отправить
Класснуть
Ссылка на основную публикацию