从自动热键运行电源外壳脚本时出现执行策略错误



>我有一个简单的自动热键脚本

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

但它不会让我加载我的 ps 配置文件或执行导入模块,并给我一个执行策略错误:

Import-Module : File D:projectschangescreensaverchangescreensaver.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:Userssomeone>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传递它,但我仍然想了解:为什么从 AHK 调用 PS 时我的执行策略值不同?

您找到了问题的根源 - 您的 AHK 是 32 位的,因此运行 32 位 PowerShell 可执行文件,而您的终端(控制台窗口(运行 64 位可执行文件 - 但让我添加一些背景信息。

在Windows PowerShell中(与PowerShellCore不同(,执行策略存储在注册表,即:

  • LocalMachine范围:

    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell,值ExecutionPolicy
  • CurrentUser范围:

    • HKEY_CURRENT_USERSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell,价值ExecutionPolicy

虽然 32 位和 64 位应用程序共享相同的HKEY_CURRENT_USER配置单元,但它们具有不同的HKEY_LOCAL_MACHINESoftware子树

因此,只有 LocalMachine 作用域具有 32 位和 64 位可执行文件的单独执行策略值。

换句话说:如果你的执行策略是在用户级别(-Scope CurrentUser(设置的,则不会出现问题。

原来我的终端运行的是 64 位 powershell,而 AHK 使用的是 32 位,通过运行发现:

[Environment]::Is64BitProcess

基于这篇文章。

相关内容

  • 没有找到相关文章

最新更新