答案是执行策略为Restricted,需以管理员身份运行PowerShell并执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。默认限制禁止所有.ps1脚本,包括本地编写的脚本;确认策略用Get-ExecutionPolicy,修改后需验证生效。

当你在Win10的PowerShell中执行.ps1脚本时突然弹出“由于在此系统上禁止运行脚本”,说明当前执行策略被锁定为Restricted——这是Windows默认最严格的安全限制,连本地写的脚本都不放行,哪怕你刚保存在桌面的hello.ps1也会被直接拦截。
确认当前执行策略状态
先不急着改,打开PowerShell看一眼现状:输入 【get-executionpolicy】 并回车。如果返回结果是 【Restricted】,那就坐实了问题根源;如果是RemoteSigned或AllSigned,那报错大概率来自其他原因(比如脚本路径含空格未加引号、或被WDAC策略拦截)。
这一步不能跳过。有人凭记忆直接敲set命令,结果发现根本没权限改——因为当前会话不是管理员模式,而Restricted策略下连查看权限都可能受限。
以管理员身份启动PowerShell
点击开始菜单→搜索“PowerShell”→右键“Windows PowerShell”→选择“以管理员身份运行”。【必须是右键选此项,不是点开后手动提权】。普通用户常误点“Windows PowerShell(x86)”或直接双击图标,这两种方式即使账户是管理员也拿不到策略修改所需的进程令牌。
窗口标题栏出现“管理员”字样才算成功。此时再输get-executionpolicy,才能看到真实生效的策略值。
修改执行策略为RemoteSigned
在已获得管理员权限的PowerShell窗口中,执行以下命令:
【set-executionpolicy RemoteSigned -Scope CurrentUser】
注意这里用的是 【-Scope CurrentUser】 而非全局的LocalMachine。前者只影响当前登录用户,不波及系统级服务或其它账户,安全性更高;后者需额外确认UAC弹窗且可能被域策略覆盖。个人电脑首选CurrentUser范围。
执行后系统会提示是否更改,输入 【Y】 确认。不要选A(全部是),避免后续操作误伤其它策略项。
完成后立即用get-executionpolicy验证——这次应返回RemoteSigned。若仍显示Restricted,请检查是否在旧的非管理员窗口里执行了验证命令。
绕过单次执行(临时方案)
方法一:用Bypass参数启动新会话
在任意PowerShell窗口(无需管理员)中输入:【powershell -ExecutionPolicy Bypass -File "C:\path\to\your\script.ps1"】。这会新建一个临时会话,跳过所有策略检查,适合调试单个脚本。
方法二:直接在命令行调用
打开CMD或Run对话框(Win+R),粘贴:【powershell -ExecutionPolicy RemoteSigned -Command "& 'C:\test.ps1'"】。注意路径必须用单引号包裹,且&符号不可省略,否则PowerShell会把路径当字符串而非命令执行。
提示:Bypass虽快,但每次都要敲全路径和参数,不适合高频使用;RemoteSigned才是长期稳定的解法。

















