Ошибка политики выполнения при запуске сценария powershell из autohotkey - PullRequest
2 голосов
/ 22 июня 2019

У меня есть простой скрипт autohotkey

!+l:: RunWait, PowerShell -NoExit -C "Import-Module D:\projects\changescreensaver\changescreensaver.psm1; Set-ScreenSaverTimeout 1;"

Но он не позволяет мне загрузить свой профиль ps или выполнить импорт-модуль и выдает ошибку политики выполнения:

Import-Module : File D:\projects\changescreensaver\changescreensaver.psm1 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.

На моем терминале Get-ExecutionPolicy -List возвращает

C:\Users\someone>Get-ExecutionPolicy  -List

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

но в моем скрипте возвращает

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

Я могу просто передать его -ExecutionPolicy Bypass, но я все же хотел бы понять: почему мои значения ExecutionPolicy отличаются при вызове PS из AHK?

Ответы [ 2 ]

4 голосов
/ 22 июня 2019

Вы нашли источник проблемы - ваш AHK является 32-разрядным и, следовательно, запускает 32-разрядный исполняемый файл PowerShell, а ваш терминал (окно консоли) запускает 64-разрядный исполняемый файл - но позвольте мнедобавить некоторую справочную информацию.

В Windows PowerShell (в отличие от PowerShell Core ) политики выполнения хранятся в реестре , а именно:

  • LocalMachine область действия:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell, значение ExecutionPolicy
  • CurrentUser объем:

    • HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell, значение ExecutionPolicy

В то время как 32-разрядный и64-разрядные приложения совместно используют один и тот же HKEY_CURRENT_USER куст, они имеют различные HKEY_LOCAL_MACHINE\Software поддеревья .

Следовательно, только область действия LocalMachine имеет отдельное выполнение-значения политики для 32-разрядных и 64-разрядных исполняемых файлов.

Другими словами: если ваша политика выполнения была установлена ​​на уровне user (-Scope CurrentUser), проблемане возникнет.

2 голосов
/ 22 июня 2019

Оказывается, мой терминал работал на 64-битной PowerShell, в то время как AHK использовал 32-битную версию, обнаружив, запустив:

[Environment]::Is64BitProcess

на основе этого поста .

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