我有一个简单的自动热键脚本
!+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
,但我仍然想理解:为什么从AHK调用PS时,我的ExecutionPolicy值为何不同?
答案 0 :(得分:4)
You found the source of the problem-您的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
)设置的,则不会出现此问题。
答案 1 :(得分:2)