我有一个PowerShell脚本,我希望用它来自动化一些东西。我通过右键单击它并选择"使用 PowerShell 运行"来运行它。
我已经在 32 位和 64 位 PowerShell 中运行了Set-ExecutionPolicy Bypass
,并使用 Get-ExecutionPolicy
进行了验证。
不过,每次重新启动后我第一次尝试运行脚本时,我都会收到以下提示:
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):
如果我只是关闭PowerShell窗口并再次运行它,则没有提示。无论我在提示符下输入Y
还是N
,脚本都会运行。
剧本中没有什么好笑的,只是echo "Test"
.同样的事情发生在三台不同的计算机上,Win 8.1,Win 10和虚拟化的Win 10。它们都有PowerShell 5.0。
我做错了什么?如何摆脱此提示?
来自远程计算机,我的猜测是该策略可能设置为 RemoteSigned
或 Unrestricted
并且文件来自互联网。在这种情况下,可以使用文件上的"属性"对话框、Unblock-File
cmdlet(运行时此 cmdlet 是强制交互的)取消阻止该文件,也可以将脚本内容复制到另一个文件并将其保存在本地。
我相信设置Bypass
(或任何其他执行策略)只会让您获得本地或组策略设置的最低策略级别(如果设置了)。例如,如果您有一个组策略将执行策略设置为 RemoteSigned
,但指定Bypass
,则权限边界在 RemoteSigned
处停止,并且您受制于该执行策略的限制。
除了 Bender 的答案之外,还可以将Set-ExecutionPolicy
cmdlet 添加到配置文件脚本中,以便在每次打开 PowerShell 时正确设置它。