По умолчанию выполнение сценариев Windows PowerShell в системе запрещено. По соображениям безопасности все скрипты PowerShell должны быть подписаны цифровой подписью, данный метод называется — политика выполнения.
Если скрипт не соответствует этому условию, то выполнение сценариев PowerShell в системе запрещено. Это связано в первую очередь с тем, что в скрипте может находиться вредоносный код, который может нанести вред операционной системе.
PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять. Существует 5 различных режимов выполнения:
- Ограниченный (Restricted) — значение по умолчанию. Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
- Все подписанные (All Signed) — разрешено выполнение скриптов, имеющих цифровую подпись.
- Удаленные подписанные (Remote Signed) — локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
- Неограниченный (Unrestricted) — разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
- Обходной (Bypass) — ничего не блокируется, никакие предупреждения и запросы не появляются.
По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell, то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.
Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.
Для изменения политики выполнения на неограниченную, воспользуемся консолью PowerShell открытую с правами Администратора и выполним следующую команду:
Set-ExecutionPolicy Unrestricted
После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да).
Теперь можно запустить скрипт. Однако, вы подвергаете систему серьезному риску, так что по окончании работы скрипта, не забудьте вернуть политику выполнения назад в ограниченный режим. Сделать это можно с помощью следующей команды:
Set-ExecutionPolicy Restricted
После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да)
Далее ниже представлены все команды для изменения политики выполнения.
Блокируется выполнение любых скриптов. Значение по умолчанию.
Set-ExecutionPolicy Restricted
Разрешено выполнение скриптов, имеющих цифровую подпись.
Set-ExecutionPolicy AllSigned
Скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи.
Set-ExecutionPolicy RemoteSigned
Разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
Set-ExecutionPolicy Unrestricted
Ничего не блокируется, никакие предупреждения и запросы не появляются.
Set-ExecutionPolicy Bypass
Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром -Force, например выполните команду:
Set-ExecutionPolicy Bypass -Force
Теперь при выполнении команд не нужно подтверждать производимые изменения.
Содержание
- Способ 1: Настройка локальной политики
- Способ 2: Редактирование реестра
- Способ 3: Консольная команда
- Вопросы и ответы
Способ 1: Настройка локальной политики
По умолчанию запуск сценариев PowerShell запрещен политикой выполнения функций средства, что обусловлено требованиями безопасности и призвано предотвратить возможность исполнения отдельных вредоносных скриптов в среде Windows. Изменить такое положение вещей в общем-то несложно, а основной способ это сделать подразумевает привлечение «Редактора локальной групповой политики» («РЛГП»).
«РЛГП» по умолчанию доступен только в Windows 10 редакций «Pro» и «Enterprise», пользователям «Home»-выпуска операционки с конечной целью запуска PowerShell-сценариев следует сразу переходить к рассмотрению инструкций «Способ 2» и «3» в этой статье.
- Открываем окно «Редактора локальной групповой политики». Проще всего это сделать введя запрос
Изменение групповой политики
в системный «Поиск» Виндовс,
также возможно через оснастку «Выполнить» (открывается по нажатию «Win»+«R» на клавиатуре) – оправляем с её помощью на выполнение команду:
gpedit.msc
Читайте также: Запуск «Редактора локальной групповой политики» в Windows 10
- Задействовав средства левой части окна РЛГП, в разделе «Конфигурация компьютера» поочередно разворачиваем каталоги: «Административные шаблоны»,
затем из него — «Компоненты Windows».
- В содержимом «Компоненты Windows» находим и кликом выделяем каталог «Windows Powershell».
- Перемещаемся в область справа окна Редактора, кликаем правой кнопкой манипулятора (ПКМ) по наименованию политики «Включить выполнение сценариев».
В отобразившемся меню выбираем «Изменить».
- В открывшемся средстве изменения параметров политики «Включить выполнение сценариев» переводим расположенную в правой верхней части окна радиокнопку в положение «Включено».
Кроме того, переходим здесь в блок «Параметры:», щёлкаем по изначально пустому раскрывающемуся списку «Политика выполнения»,
выбираем в нём «Разрешать все сценарии».
- Завершив конфигурирование политики вышеуказанным образом, нажимаем «ОК».
На этом всё, закрываем окно средства изменения локальной групповой политики – возможность запуска, по сути, любых сценариев PowerShell в текущем экземпляре Windows 10 получена.
Способ 2: Редактирование реестра
Параметры политик выполнения сценариев ПоверШелл для локального компьютера, а также его текущего пользователя сохранены в главной базе данных настроек Виндовс 10 — системном реестре. Соответственно, изменив здесь значения отдельных записей, можно решить в том числе и задачу из заголовка этой статьи.
- Открываем «Редактор реестра». Существует множество способов это сделать, наиболее быстрые: отыскать ссылку на запуск приложения через системный «Поиск»,
отправить команду
regedit
через оснастку «Выполнить».Подробнее: Способы открытия «Редактора реестра» в Windows 10
- Кликая по разворачивающим разделы из перечня слева в окне «Редактора реестра» элементам, переходим по следующему пути:
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows
Другой метод перемещения в нужный раздел реестра: копируем путь к нему из текста этой статьи в буфер обмена Windows 10, затем вставляем данные в поле под строкой меню Редактора, нажимаем «Enter».
- Выделив (щелчком ЛКМ по наименованию в панели слева окна Редактора) расположенную по указанному выше пути папку «Windows», вызываем меню «Правка»,
кликаем в нём «Создать» — «Раздел».
- Далее вводим имя сформированного каталога – PowerShell,
нажимаем «Ввод» на клавиатуре.
- Переходим в правую часть окна Редактора, кликаем ПКМ в её свободной от значков и записей области, в открывшемся контекстном меню нажимаем «Создать» — «Параметр DWORD (32 бита)».
- Присваиваем созданному объекту наименование EnableScripts,
дважды щёлкаем по нему.
- В поле «Значение» отобразившегося окошка «Изменение параметра DWORD (32 бита)» вместо 0 пишем 1,
после этого кликаем «ОК».
- Вновь кликаем ПКМ в отображающей параметры из раздела реестра «PowerShell» области, теперь выбираем в меню «Создать» — «Строковый параметр».
- В качестве имени параметра вводим ExecutionPolicy,
после чего двойным кликом по получившемуся объекту открываем окошко его изменения.
- В поле «Значение:» вводим RemoteSigned,
щёлкаем «ОК» мышкой.
- На этом всё – закрываем окно «Редактора реестра», перезагружаем компьютер и можем приступать к отныне беспроблемному и практически ничем не ограничиваемому запуску сценариев PowerShell.
Способ 3: Консольная команда
Еще один метод устранения предусмотренных в Windows 10 преград для выполнения PowerShell-сценариев реализовать гораздо проще, нежели вышеописанные подходы, но решение в большей степени единоразовое (действует в рамках одного сеанса работы с консольной оболочкой). Подойдёт, когда нужно задействовать один-единственный скрипт рассматриваемого типа или это требуется редко.
- Запускаем приложение PowerShell от имени Администратора. Один из вариантов это сделать – средствами системной оснастки «Выполнить»:
- Нажимаем «Win»+«R» на клавиатуре, вводим в поле «Открыть» отобразившегося окошка такую команду:
рowershell
- Далее нажимаем «Ctrl»+«Shift» на клавиатуре и, удерживая эти клавиши, кликаем «ОК» в окне «Выполнить» левой кнопкой мыши.
- Подтверждаем («Да») поступивший из системного модуля «Контроль учётных записей» запрос.
Читайте также: Запуск «PowerShell» в ОС Windows 10
- Нажимаем «Win»+«R» на клавиатуре, вводим в поле «Открыть» отобразившегося окошка такую команду:
- Вводим и запускаем команду перевода политики выполнения сценариев PowerShell в состояние, когда ею ничего не блокируется:
Set-ExecutionPolicy Bypass
- Введя
Y
и затем нажав «Enter», подтверждаем запрос системы «Вы хотите изменить политику выполнения?». - На этом всё – возможности выполнять сценарии теперь ничего не препятствует и так будет продолжаться до момента закрытия сессии ПоверШелл. Вводим в консоль путь на диске ПК, по которому расположен целевой исполняемый файл рассматриваемого типа, инициируем его запуск.
Читайте также: Как скачать ISO-образ Windows при помощи PowerShell-скрипта Fido
Еще статьи по данной теме:
Помогла ли Вам статья?
Доброго времени суток дорогие читатели. В данной статье мы познакомимся с основами Powershell. Данный язык программирования используется во всех ОС Microsoft начиная с Windows XP SP3. Писать Powershell скрипты должен уметь каждый уважающий себя системный администратор windows.
Все команды в Powershell как правило используются в форме командлетов. Все командлеты это специализированные классы .NET Framework и .NET Core (используется в PowerShell Core 6 и выше).
Powershell класса .NET Framework это версии с 1 по 5.1 а Powershell .NET Core это версия 6 и выше (на данный момент 7.0). По заявлению Microsoft новых функций в Powershell 5.1 (.NET Framework) вносить уже не будут. Однако 7 версия еще не полностью поддерживает все модули предыдущих версий. Но судя по всему Microsoft стремится к этому и скоро версия Core будет единственной. В общем cmd отходит в прошлое и теперь без Powershell никуда. Давайте приступим к практике. Так всегда лучше запоминается материал.
Запуск Powershell
На примере Windows 10 Powershell можно запустить просто нажав правой кнопкой мыши на меню пуск.
Также нижняя строчка позволяет запустить Powershell с повышенными правами администратора.
Еще можно воспользоваться поиском в WIndows 10 и ввести название powershell
Как видно на картинке выше нашелся не только Powershell но и Powershell ISE. Консоль powershell удобна если требуется запустить последовательно не больше одной команды. Либо несколько команд в конвейере. Однако в случае написания полноценных скриптов лучше использовать Powershell ISE. Это бесплатная среда разработки сценариев на языке Powershell поставляется вместе с ОС Windows.
Сразу после запуска консоли рекомендую запустить командлет Get-Help — встроенная справка по всем командлетам, аналог man в Linux.
Видим что консоль предлагает обновить встроенную помощь. Нажимаем Y и соглашаемся.
Командлеты
Командлеты — это название команд в Powershell. Каждый командлет реализует заложенную в него функциональность. Как правило наименование командлета состоит из пары: глагол-существительное. Например: Get-Help — получить помощь. Обычно Get используется чтобы получить информация, Set — внести изменение, New — создать новый объект, политику и т.п. и Remove -удалить объект, политику и т.п.
Командлеты не чувствительны к регистру. Написать Get или get не важно, powershell воспримет эти команды одинаково.
Чтобы получить список всех доступных командлетов необходимо использовать Get-Command
Для получения справки по любому командлету напишите Get-Help имя-комндлета. Например
Давайте представим что нам необходимо вывести список командлетов для управления процессами. Воспользуемся Get-Command и укажем ему параметры для более точного поиска.
И вот мы видим список командлетов позволяющих управлять процессами: Get-Process — список всех запущенных процессов, Start-Process — запустить указанный процесс, Stop-Process— остановить указанный процесс, Wait-Process — ожидать указанный процесс. Как видно из названий командлетов можно легко понять для чего каждый служит.
Используя командлет Get-Help можно получить справку по любому командлету.
PS C:WINDOWSsystem32> Get-Help Get-Process ИМЯ Get-Process ОПИСАНИЕ Gets the processes that are running on the local computer or a remote computer. СИНТАКСИС Get-Process [[-Name] <System.String[]>] [-ComputerName <System.String[]>] [-FileVersionInfo] [-Module] [<CommonParameters>] Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -Id <System.Int32[]> [-Module] [<CommonParameters>] Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -InputObject <System.Diagnostics.Process[]> [-Module] [<Com monParameters>] Get-Process -Id <System.Int32[]> -IncludeUserName [<CommonParameters>] Get-Process [[-Name] <System.String[]>] -IncludeUserName [<CommonParameters>] Get-Process -IncludeUserName -InputObject <System.Diagnostics.Process[]> [<CommonParameters>] ОПИСАНИЕ The `Get-Process` cmdlet gets the processes on a local or remote computer. Without parameters, this cmdlet gets all of the processes on the local computer. You can also specify a particular process b y process name or process ID (PID) or pass a process object through the pipeline to this cmdlet. By default, this cmdlet returns a process object that has detailed information about the process and supports methods that l et you start and stop the process. You can also use the parameters of the `Get-Process` cmdlet to get file version informati on for the program that runs in the process and to get the modules that the process loaded. ССЫЛКИ ПО ТЕМЕ Online Version: https://docs.microsoft.com/powershell/module/microsoft.powershell.management/get-process?view=powershell-5.1 &WT.mc_id=ps-gethelp Debug-Process Get-Process Start-Process Stop-Process Wait-Process ЗАМЕЧАНИЯ Для просмотра примеров введите: "get-help Get-Process -examples". Для получения дополнительных сведений введите: "get-help Get-Process -detailed". Для получения технических сведений введите: "get-help Get-Process -full". Для получения справки в Интернете введите: "get-help Get-Process -online"
При использовании командлета есть возможность указать несколько параметров при запуске. Первый параметр можно не называть. Выше я писал Get-Command *Process* где указал поиск командлетов со словом Process. Однако я не написал параметр -Name, хотя именно его и указал. Если полностью то поиск по имени выглядит так: Get-Command -Name *Process* . В случае отсутствия непосредственного указания -Name Powershell принимает в качестве имени введенное слово *Process*.
Давайте выведем список процессов с именем WhatsApp
Get-Process -Name WhatsApp -IncludeUserName
Мы вывели все процессы с именем WhatsApp и добавили в вывод дополнительный параметр -IncludeUserName, что позволило нам увидеть кем запущен процесс.
Алиасы
Алиасы в Powershell это по сути более короткие названия командлетов. Т.е. любому командлету можно присвоить свое короткое имя (alias). Например алиасом для командлета Get-Process является gps. Согласитесь куда проще и быстрее написать gps чем Get-Process.
Список всех alias можно получить используя командлет Get-Alias
PS C:WINDOWSsystem32> get-alias CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cls -> Clear-Host Alias clv -> Clear-Variable Alias cnsn -> Connect-PSSession Alias compare -> Compare-Object Alias copy -> Copy-Item Alias cp -> Copy-Item Alias cpi -> Copy-Item Alias cpp -> Copy-ItemProperty Alias curl -> Invoke-WebRequest Alias cvpa -> Convert-Path Alias dbp -> Disable-PSBreakpoint Alias del -> Remove-Item Alias diff -> Compare-Object Alias dir -> Get-ChildItem Alias dnsn -> Disconnect-PSSession Alias ebp -> Enable-PSBreakpoint Alias echo -> Write-Output Alias epal -> Export-Alias Alias epcsv -> Export-Csv Alias epsn -> Export-PSSession Alias erase -> Remove-Item Alias etsn -> Enter-PSSession Alias exsn -> Exit-PSSession Alias fc -> Format-Custom Alias fhx -> Format-Hex 3.1.0.0 Microsoft.PowerShell.Utility Alias fl -> Format-List Alias foreach -> ForEach-Object Alias ft -> Format-Table Alias fw -> Format-Wide Alias gal -> Get-Alias Alias gbp -> Get-PSBreakpoint Alias gc -> Get-Content Alias gcb -> Get-Clipboard 3.1.0.0 Microsoft.PowerShell.Management Alias gci -> Get-ChildItem Alias gcm -> Get-Command Alias gcs -> Get-PSCallStack Alias gdr -> Get-PSDrive Alias ghy -> Get-History Alias gi -> Get-Item Alias gin -> Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management Alias gjb -> Get-Job Alias gl -> Get-Location Alias gm -> Get-Member Alias gmo -> Get-Module Alias gp -> Get-ItemProperty Alias gps -> Get-Process Alias gpv -> Get-ItemPropertyValue Alias group -> Group-Object Alias gsn -> Get-PSSession Alias gsnp -> Get-PSSnapin Alias gsv -> Get-Service Alias gtz -> Get-TimeZone 3.1.0.0 Microsoft.PowerShell.Management Alias gu -> Get-Unique Alias gv -> Get-Variable Alias gwmi -> Get-WmiObject Alias h -> Get-History Alias history -> Get-History Alias icm -> Invoke-Command Alias iex -> Invoke-Expression Alias ihy -> Invoke-History Alias ii -> Invoke-Item Alias ipal -> Import-Alias Alias ipcsv -> Import-Csv Alias ipmo -> Import-Module Alias ipsn -> Import-PSSession Alias irm -> Invoke-RestMethod Alias ise -> powershell_ise.exe Alias iwmi -> Invoke-WmiMethod Alias iwr -> Invoke-WebRequest Alias kill -> Stop-Process Alias lp -> Out-Printer Alias ls -> Get-ChildItem Alias man -> help Alias md -> mkdir Alias measure -> Measure-Object Alias mi -> Move-Item Alias mount -> New-PSDrive Alias move -> Move-Item Alias mp -> Move-ItemProperty Alias mv -> Move-Item Alias nal -> New-Alias Alias ndr -> New-PSDrive Alias ni -> New-Item Alias nmo -> New-Module Alias npssc -> New-PSSessionConfigurationFile Alias nsn -> New-PSSession Alias nv -> New-Variable Alias ogv -> Out-GridView Alias oh -> Out-Host Alias popd -> Pop-Location Alias ps -> Get-Process Alias pushd -> Push-Location Alias pwd -> Get-Location Alias r -> Invoke-History Alias rbp -> Remove-PSBreakpoint Alias rcjb -> Receive-Job Alias rcsn -> Receive-PSSession Alias rd -> Remove-Item Alias rdr -> Remove-PSDrive Alias ren -> Rename-Item Alias ri -> Remove-Item Alias rjb -> Remove-Job Alias rm -> Remove-Item Alias rmdir -> Remove-Item Alias rmo -> Remove-Module Alias rni -> Rename-Item Alias rnp -> Rename-ItemProperty Alias rp -> Remove-ItemProperty Alias rsn -> Remove-PSSession Alias rsnp -> Remove-PSSnapin Alias rujb -> Resume-Job Alias rv -> Remove-Variable Alias rvpa -> Resolve-Path Alias rwmi -> Remove-WmiObject Alias sajb -> Start-Job Alias sal -> Set-Alias Alias saps -> Start-Process Alias sasv -> Start-Service Alias sbp -> Set-PSBreakpoint Alias sc -> Set-Content Alias scb -> Set-Clipboard 3.1.0.0 Microsoft.PowerShell.Management Alias select -> Select-Object Alias set -> Set-Variable Alias shcm -> Show-Command Alias si -> Set-Item Alias sl -> Set-Location Alias sleep -> Start-Sleep Alias sls -> Select-String Alias sort -> Sort-Object Alias sp -> Set-ItemProperty Alias spjb -> Stop-Job Alias spps -> Stop-Process Alias spsv -> Stop-Service Alias start -> Start-Process Alias stz -> Set-TimeZone 3.1.0.0 Microsoft.PowerShell.Management Alias sujb -> Suspend-Job Alias sv -> Set-Variable Alias swmi -> Set-WmiInstance Alias tee -> Tee-Object Alias trcm -> Trace-Command Alias type -> Get-Content Alias wget -> Invoke-WebRequest Alias where -> Where-Object Alias wjb -> Wait-Job Alias write -> Write-Output
Как видно из списка для alias использованы аналогичные по значению команды из Linux: ls, man, mount, md, kill и т.п. Видимо чтобы линуксоиду было по привычнее 🙂 Можно создать свой alias используя командлет New-Alias
Конвейер
Конвейер используется для передачи выходных данных командлета идущего вначале во входные данные командлета следующего за ним. Ничего непонятно? 🙂 Давайте на примерах, так всегда яснее.
Возьмем уже известный нам командлет Get-Process, посмотрим на его вывод
Как по мне многовато лишних столбцов. Мне эта информация не нужна, поэтому я выберу только нужные данные. Для таких целей служит командлет Select-Object. Давайте используем его в конвейере.
Get-Process|Select-Object ID,CPU,ProcessName
Как вы уже наверно догадались конвейер обозначается знаком | и идет сразу следом за командлетом. И так данные по конвейеру можно передавать и дальше другим командлетам. Итак я передал выходные данные (список запущенных процессов) на вход командлета Select-Object. Который в свою очередь выбрал данные по 3 столбцам ID, CPU, ProcessName. Теперь можно передать эти данные дальше. Например выгрузить в текстовый файл
Get-Process|Select-Object ID,CPU,ProcessName|Out-File C:TMPout.txt
Просто не правда ли? У нас конвейер из трех командлетов, на выходе которого получаем текстовый файл со списком запущенных процессов и необходимой информацией по ним.
Структура объектов
В Powershell объекты играют самую важную роль. От типа объекта зависит что именно с ним можно сделать. Узнать тип объекта и вывести список всех его элементов позволяет команда Get-Member
Вот далеко не полный список элементов командлета Get-Process. В данному случае тип данных это System.Diagnostics.Process
Давайте посмотрим тип данных у новой переменной
$new="Test" $new|Get-Member
В данном случае тип данных System.String т.е. строка. Что вполне логично. А теперь посмотрите что можно сделать с этой строкой с учетом указанных выше параметров.
Как видно на картинке выше мы заключаем нашу тестовую переменную $new в скобки и после них пишем точку и указываем метод. В примере я использовал три метода:
- ToUpper — перевод всех букв в строке в верхний регистр
- ToLower — перевод всех букв в строке в нижний регистр
- Length — подсчитать количество символов в строке
Это всего лишь небольшой пример что можно сделать с параметрами объекта. Чаще используйте Get-Member и вы откроете для себя безграничные возможности манипуляции над объектами.
Скрипты Powershell
В самом начале статьи указал на встроенный инструмент Powershell ISE. Давайте запустим его и создадим свой первый скрипт. Кстати скрипты сохраняются в файлах с расширением ps1
Скрипт будет запускать блокнот, далее выполняется проверка если блокнот запущен выводится сообщение об этом и после блокнот закрывается. Если блокнот не запущен то выводится соответствующее сообщение об этом. На самом деле блокнот будет всегда запущен, т.к. мы вначале скрипта написали Start-Process notepad
Start-Process notepad $a=Get-Process notepad if ($a.ProcessName -like "Notepad") { Write-Host "Блокнот запущен, давайте его закроем" Stop-Process -name notepad } else { Write-Host "Блокнот не запущен, что поделать" }
В этом скрипте я использовал цикл if else. О циклах будет подробнее в следующей статье. Итак давайте сохраним скрипт и выполним его.
В ответ мы получим такую ошибку:
Невозможно загрузить файл, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=1351 70. + CategoryInfo : Ошибка безопасности: (:) [], ParentContainsError RecordException + FullyQualifiedErrorId : UnauthorizedAccess
Все верно, изначально в WIndows запрещено выполнять скрипты Powershell. Это сделано для повышения безопасности системы. Для включения возможности запуска скриптов Powershell необходимо запустить Powershell от Администратора и ввести командлет Set-ExecutionPolicy с одним из параметров:
- Restricted — политика по умолчанию. Выполнение всех скриптов запрещено
- RemoteSigned — разрешено запускать собственные скрипты и подписанные доверенным разработчиком
- AllSigned — разрешено запускать скрипты, подписанные доверенным разработчиком. Каждый раз перед запуском такого скрипта PowerShell будет запрашивать подтверждение
- Unrestricted — в системе разрешается запускать любые скрипты
Если вы полностью уверены в запускаемых скриптах можете поставить Unrestricted. Давайте так и сделаем
Set-ExecutionPolicy -Unrestricted
Будет предупреждение по безопасности, соглашаемся нажав Y
Можем посмотреть текущую настройку политики безопасности при помощи командлета Get-ExecutionPolicy
В данной статье мы рассмотрели основы чтобы подготовиться писать скрипты 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
— вернуть назад по умолчанию.
Смотрите еще:
- Что за папка ProgramData Windows 10
- Исправить ошибку Boot Device Not Found на ноутбуке или ПК
- Antimalware Service Executable (MsMpEng) — Грузит Систему
- Ошибка 0x80070490 в Центре обновления Windows 10
- Защитник Windows: Ограничить нагрузку на процессор
[ Telegram | Поддержать ]
Исправлено: выполнение сценариев отключено в этой системе —
Содержание
- 1 Что вызывает ошибку «Выполнение сценариев отключено в этой системе»?
- 1.1 Решение 1. Запустите PowerShell от имени администратора и выполните команду
- 1.2 Решение 2. Изменить групповые политики
- 1.3 Решение 3. Измените его в настройках Windows 10
- 1.4 Решение 4. Решите метод с помощью реестра
Эта ошибка возникает, когда пользователи пытаются запустить сценарии или конкретные команды в PowerShell как часть своей работы или устранить проблему, которая беспокоит их на их ПК. Выполнение сценариев часто отключено по умолчанию в пользовательских системах, и для его разрешения необходимо настроить эти параметры.
Выполнение скриптов отключено в этой системе
У этой проблемы есть и другие причины, и поэтому мы подготовили статью, которая поможет вам решить эту проблему, если вы будете тщательно следовать методам. Удачи!
Что вызывает ошибку «Выполнение сценариев отключено в этой системе»?
У этой проблемы не так много разных причин, и они часто различаются в разных системах. Тем не менее, они могут быть легко перечислены, и вы должны увидеть, можно ли классифицировать вашу проблему, как некоторые из вариантов ниже:
- Иногда выполнение сценариев по умолчанию отключено в пользовательских системах, и его необходимо включить вручную, используя такие методы, как запуск команд в PowerShell или настройка реестра.
- Если выполнение отключено в более высокой области, вам может потребоваться включить его с помощью редактора локальной групповой политики (GPEdit). Есть возможность сделать это и в настройках Windows 10.
- Возможно, вы захотите сообщить о проблемах администратора в PowerShell при выполнении команд.
Решение 1. Запустите PowerShell от имени администратора и выполните команду
В PowerShell есть команда, которая решает именно эту проблему, и ее можно решить за считанные минуты. Это включает в себя фактическое изменение политики выполнения скрипта из окна PowerShell. Попробуйте и убедитесь сами!
- Откройте утилиту PowerShell, щелкнув правой кнопкой мыши кнопку меню «Пуск» и выбрав опцию Windows PowerShell (Admin) в контекстном меню. Пользователи Windows 7 могут просто искать его.
Запуск Windows PowerShell от имени администратора
- Если вы видите командную строку вместо PowerShell в этом месте, вы также можете найти ее в меню «Пуск» или в строке поиска рядом с ней. На этот раз убедитесь, что вы щелкнули правой кнопкой мыши по первому результату и выбрали «Запуск от имени администратора».
- В консоли Powershell введите команду, показанную ниже, и обязательно нажмите Enter после этого:
Set-ExecutionPolicy RemoteSigned
- Пусть эта команда сделает свое дело и проверит, появилось ли сообщение о том, что процесс действительно прошел успешно. Этот метод может быть применен ко всем операционным системам Windows, включая Windows 10.
Решение 2. Изменить групповые политики
Если описанный выше метод не привел к успеху, что часто встречается в более новых версиях Windows, таких как Windows 10, вам может потребоваться изменить политики в более широком контексте. Это обычное сообщение об ошибке, которое появляется после запуска команды из Решения 1:
Set-ExecutionPolicy: Windows PowerShell успешно обновил вашу политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области. Из-за переопределения ваша оболочка сохранит свою текущую эффективную политику выполнения ...
Чтобы решить проблему, вам нужно перейти в редактор групповой политики и немедленно изменить настройки.
- Используйте комбинацию клавиш Windows + R (одновременно нажмите клавиши), чтобы открыть диалоговое окно «Выполнить». Введите «gpedit.msc» в диалоговом окне «Выполнить» и нажмите кнопку «ОК», чтобы открыть инструмент «Редактор локальной групповой политики». В Windows 10 вы можете просто ввести редактор групповой политики в меню «Пуск» и щелкнуть верхний результат.
Запуск редактора групповой политики
- На левой панели навигации редактора локальной групповой политики в разделе «Конфигурация компьютера» дважды щелкните «Административные шаблоны» и перейдите к разделу «Компоненты Windows» >> «Windows Powershell».
- Выберите папку Windows Powershell, дважды щелкнув по ней и проверив ее правую часть.
- Дважды щелкните параметр политики «Включить выполнение сценариев», установите переключатель рядом с параметром «Включено». В меню Политика выполнения выберите Разрешить все сценарии, примените изменения, которые вы внесли перед выходом. Изменения не будут применены, пока вы не перезапустите.
Разрешить запуск всех скриптов
- Наконец, перезагрузите компьютер, чтобы сохранить изменения, и проверьте, не обнаружена ли еще у вас ошибка.
Решение 3. Измените его в настройках Windows 10
Пользователи Windows 10 также могут изменить настройки скрипта в своем приложении «Настройки Windows 10» в разделе «Для разработчиков». Как правило, это то место, куда вам следует направиться, если описанные выше шаги не дали качественных результатов для решения проблемы. Обратите внимание, что это может быть применено только к пользователям под управлением Windows 10.
- Используйте комбинацию клавиш Windows + I, чтобы открыть «Настройки» на ПК с Windows 10. Кроме того, вы можете выполнить поиск «Настройки» с помощью панели поиска, расположенной на панели задач, или щелкнуть значок шестеренки прямо над кнопкой меню Пуск после ее открытия.
- Найдите и откройте «Обновление» безопасность »в приложении« Настройки », нажав на него один раз.
Обновить Безопасность в настройках
- Перейдите на вкладку «Для разработчиков» и проверьте в разделе «Powershell» параметр «Изменить политику выполнения, чтобы локальные сценарии PowerShell могли работать без подписи. Требовать подписи для удаленных скриптов ».
- Установите флажок рядом с ним, чтобы включить его, и нажмите кнопку «Применить» справа внизу.
Разрешить скрипты в настройках
- Немедленно перезагрузите компьютер и попробуйте запустить сценарий в PowerShell, чтобы проверить, не появляется ли по-прежнему ошибка «Выполнение сценариев в этой системе».
Решение 4. Решите метод с помощью реестра
Если описанные выше способы не помогли решить вашу проблему, остается только зайти в реестр и вручную изменить настройки в максимально возможной области. Этот метод довольно прост, но вы все равно должны быть осторожны при редактировании реестра, чтобы убедиться, что все в порядке.
- Откройте окно редактора реестра, набрав «regedit» в строке поиска, меню «Пуск» или в диалоговом окне «Выполнить», доступ к которому можно получить с помощью комбинации клавиш Windows + R. Перейдите к следующему ключу в вашем реестре, перейдя на левую панель:
HKEY_LOCAL_MACHINE SOFTWARE Microsoft PowerShell 1 ShellIds Microsoft.PowerShell
Редактор реестра
- Нажмите на этот ключ и попробуйте найти строковую запись с именем ExecutionPolicy в правой части окна. Если такая опция существует, щелкните ее правой кнопкой мыши и выберите пункт «Изменить» в контекстном меню.
- В окне «Редактировать» в разделе «Значение» измените значение на «Неограниченный» или «RemoteSigned» и примените внесенные изменения. Подтвердите любые диалоги безопасности, которые могут появиться во время этого процесса.
Изменение политики сценариев в редакторе реестра
- Теперь вы можете вручную перезагрузить компьютер, щелкнув меню «Пуск» >> «Кнопка питания» >> «Перезагрузить» и проверьте, исчезла ли проблема.
PowerShell — это новая командная оболочка для Windows, которая по задумкам Microsoft должна вытеснить и заменить cmd. По-умолчанию, эта оболочка уже идет в составе Windows 7 и выше. Если у вас более старая операционная система или вы просто хотите скачать более свежую версию PowerShell, сделать это можно здесь: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
Как запустить скрипт PowerShell?
Есть несколько различных способов запуска скрипта, ниже приведены основные:
- Запустить оболочку PowerShell и в ней запустить скрипт (ввести путь до файла и имя файла, например, так: C:Scriptstest.ps1, или перейти в папку скрипта командой cd C:Scripts и запустить его командой .test.ps1)Оболочку можно найти и запустить множеством способов. Один из способов — через меню «Пуск». Для Windows 7 — нужно зайти во «Все программы» — «Стандартные» — «Windows PowerShell» и запустить оболочку «Windows PowerShell». Для Windows 10 — нужно найти группу на букву «W» и в ней вы найдете «Windows PowerShell».
- Запустить «Интегрированную среду сценариев Windows PowerShell ISE» — это программа — среда разработки, позволяющая редактировать и отлаживать скрипты PowerShell, которая так же есть по-умолчанию вместе с самим PowerShell. Запустив ее, нужно просто нажать кнопку «Открыть» или зайти в меню Файл — Открыть и выбрать нужный скрипт, затем нажать F5 или кнопку «Выполнить скрипт».Найти Windows PowerShell ISE можно там же, где и оболочку PowerShell — в меню «Пуск».
- Запустить стандартную коммандную строку и в ней написать:
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 «еще один текстовый параметр»
В самом скрипте вы можете получить эти параметры так:
param ($var1, $var2, $var3) echo $var1, $var2, $var3
В интегрированной среде PowerShell ISE запустить скрипт с параметрами можно аналогично, используя область команд.
Как запустить скрипт PowerShell с помощью ярлыка?
Осуществить такую задачу можно двумя способами:
- Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
- Создать ярлык на PowerShell, который можно найти в папке c:WindowsSystem32WindowsPowerShellv<версия> и в свойствах ярлыка в поле «Объект» дописать необходимые параметры.
Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.
Скриптовый язык PowerShell — довольно мощный инструмент для решения различных задач, но его можно использовать не только для хороших вещей, но и во вред, поэтому, пользуйтесь им с умом