2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

如何启用PowerShell脚本的执行?

当我尝试执行PowerShell脚本时,我得到了这个错误。

文件C:\Common\Scripts\hello.ps1无法加载,因为在这个系统上脚本的执行被禁用。请参阅 “get-help about_signing "了解更多细节。
At line:1 char:13 + .\hello.ps1 </</< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException.

答案 (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. 使用 “以管理员身份运行 "选项启动Windows PowerShell。只有计算机上的管理员组成员才能更改执行策略。通过输入:

启用运行无签名脚本,这样就可以运行你在本地计算机上编写的无签名脚本和来自互联网的签名脚本。

91
91
91
2010-02-08 18:43:25 +0000

默认执行策略设置为限制模式,你可以通过键入:

Get-ExecutionPolicy

来查看。

66
66
66
2013-01-14 00:46:49 +0000

在我用于开发脚本的机器上,我会像上面一样使用-unrestricted。但是,当我将我的脚本部署到终端用户的机器上时,我将只用-executionpolicy开关调用 powershell:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

我们可以通过下面的命令来获取当前ExecutionPolicy的状态。

Get-ExecutionPolicy;

默认情况下是限制。要允许执行PowerShell脚本,我们需要将此ExecutionPolicy设置为BypassUnrestricted

而在Bypass策略中,没有任何东西被阻止,在脚本执行过程中没有警告或提示。Bypass ExecutionPolicy比Unrestricted更宽松。

5
5
5
2016-01-21 10:01:36 +0000

根据Windows版本和配置的不同,即使在Unrestricted模式下,你也可能会出现以下警告:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

解决办法是使用 “旁路 "策略,使用以下命令启用:

Set-ExecutionPolicy Bypass

文档中:

旁路。没有任何东西被屏蔽,也没有任何警告和提示。

这显然是不安全的,请理解其中的风险。

3
3
3
2017-11-29 10:10:20 +0000

一個註冊金鑰包含: Windows Registry Editor Version 5.00

[HKEY\LOCAL\MACHINE\SOFTWARE\Policies\MicrosoftWindows\PowerShell] “EnableScripts”=dword:000001 “ExecutionPolicy”=“Bypass”

和:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

也确实有效。

1
1
1
2018-12-04 22:06:53 +0000

出于某种原因,PowerShell cmdlet没有启用全局执行,只在本地用户上下文中执行。如果我试图从CygWin的bash提示符中启动一个Powershell脚本,比如说,在自己的用户上下文下运行,它将无法运行,并给出 “is not digitally signed "的错误。答案是进入本地组策略编辑器 -> 本地计算机策略 -> 管理模板 -> Windows组件 -> Windows组件 -> Windows PowerShell,然后双击 "打开脚本执行"。这样我就可以把它改为 "已启用",然后执行策略为 "允许本地脚本和远程签名脚本",这样就可以让它在全局范围内工作,而不考虑用户的上下文。

1
1
1
2019-04-24 14:47:15 +0000

设置策略(正确)是最好的选择,但在我的管理系统中,我没有能力改变策略。

*对我来说,改变策略的最简单的方法是在“PowerShell ISE”中打开脚本,突出显示要执行的代码(或部分代码),然后点击 “运行选择 "按钮(或使用F8快捷键)。 *

这并不是最好的解决方案,对于自动化任务来说并没有什么作用,但它确实让我在不影响我的IS部门运行的情况下,可以使用PowerShell的实用性。

1
1
1
2018-12-15 01:09:31 +0000

接受的答案是正确的,但是策略修改只适用于当前运行的Powershell实例,也就是说,一旦Powershell实例被关闭。策略就会被重置。如果用户重新打开另一个Powershell的实例,默认的策略将被应用,也就是Restricted

对于我来说,我需要使用VisualStudio Code控制台和cygwin的g++来构建东西。控制台使用的是Powershell,用默认策略,什么都不能做。一个解决方案是在VisualStudio Code控制台中每次启动控制台时都要改变策略,也许是一个改变策略的脚本。

我很懒,所以另一个解决方案是当我在管理模式下运行Powershell,类似于接受的答案。一旦它被完成后。其他的Powershell实例会默认使用

RemoteSigned策略。

-2
-2
-2
2018-04-05 13:49:49 +0000

reg键之所以能起作用,是因为它所做的正是PS命令所做的。这些命令将更改的内容写到reg键上。命令比创建一个reg键或挖掘注册表更快,更容易。