2435

我正在尝试运行一个cmd从 调用 PowerShell 脚本的文件cmd.exe,但出现此错误:

Management_Install.ps1无法加载,因为在此系统上禁用了脚本的执行。

我运行了这个命令:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

当我Get-ExecutionPolicy从 PowerShell 运行时,它返回Unrestricted.

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> powershell .\Management_Install.ps1 1

警告:正在运行 x86 PowerShell...

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1无法加载文件,因为在此系统上禁用了脚本的执行。请参阅“ get-help about_signing”了解更多详情。

在行:1 字符:25

  • .\Management_Install.ps1<<<< 1

    • CategoryInfo : NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId : 运行时异常

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> PAUSE

按任意键继续 。. .


系统为 Windows Server 2008R2。

我究竟做错了什么?

4

41 回答 41

3043

如果您使用的是Windows Server 2008 R2,则有一个x64x86版本的 PowerShell,两者都必须设置其执行策略。您是否在两台主机上都设置了执行策略?

作为管理员,您可以通过在 PowerShell 窗口中键入以下内容来设置执行策略:

Set-ExecutionPolicy RemoteSigned

有关详细信息,请参阅使用 Set-ExecutionPolicy Cmdlet

完成后,您可以使用以下命令将策略设置回其默认值:

Set-ExecutionPolicy Restricted

您可能会看到一个错误:

Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. 
To change the execution policy for the default (LocalMachine) scope, 
  start Windows PowerShell with the "Run as administrator" option. 
To change the execution policy for the current user, 
  run "Set-ExecutionPolicy -Scope CurrentUser".

因此,您可能需要像这样运行命令(如注释中所示):

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
于 2010-10-28T01:16:25.983 回答
950

-ExecutionPolicy Bypass您可以通过在运行 PowerShell 时添加来绕过单个文件的此策略

powershell -ExecutionPolicy Bypass -File script.ps1
于 2012-02-06T21:28:52.910 回答
310

我遇到了类似的问题,并注意到Windows Server 2012cmd上的默认设置是运行 x64 的。

对于Windows 11Windows 10Windows 7Windows 8Windows Server 2008 R2Windows Server 2012 ,以管理员身份运行以下命令:

x86(32 位)
打开C:\Windows\SysWOW64\cmd.exe
运行命令powershell Set-ExecutionPolicy RemoteSigned

x64(64 位)
打开C:\Windows\system32\cmd.exe
运行命令powershell Set-ExecutionPolicy RemoteSigned

您可以使用检查模式

  • 在 CMD 中:echo %PROCESSOR_ARCHITECTURE%
  • 在 Powershell 中:[Environment]::Is64BitProcess

参考资料:
MSDN - Windows PowerShell 执行策略
Windows - 32bit vs 64bit 目录解释

于 2013-08-30T13:10:22.107 回答
201

大多数现有答案都解释了How,但很少解释Why。在你在互联网上执行来自陌生人的代码之前,尤其是禁用安全措施的代码之前,你应该准确地了解你在做什么。所以这里有更多关于这个问题的细节。

从 TechNet关于执行策略页面

Windows PowerShell 执行策略允许您确定 Windows PowerShell 加载配置文件和运行脚本的条件。

PowerShell Basics - Execution Policy and Code Signing列举的好处是:

  • 执行控制 - 控制执行脚本的信任级别。
  • Command Highjack - 防止在我的路径中注入命令。
  • 身份- 脚本是由我信任的开发人员创建和签名的和/或使用我信任的证书颁发机构的证书签名的。
  • 完整性- 恶意软件或恶意用户无法修改脚本。

要检查您当前的执行策略,您可以运行Get-ExecutionPolicy. 但你可能在这里是因为你想改变它。

为此,您将运行Set-ExecutionPolicycmdlet。

在更新执行策略时,您需要做出两个主要决定。

执行策略类型:

  • Restricted†</sup> - 本地、远程或下载的脚本都不能在系统上执行。
  • AllSigned- 运行的所有脚本都需要进行数字签名。
  • RemoteSigned- 所有远程脚本 (UNC) 或下载的都需要签名。
  • Unrestricted- 不需要任何类型的脚本的签名。

新变化的范围

  • LocalMachine†</sup> - 执行策略影响计算机的所有用户。
  • CurrentUser- 执行策略只影响当前用户。
  • Process- 执行策略仅影响当前的 Windows PowerShell 进程。

† = 默认

例如:如果您想仅为 CurrentUser 将策略更改为 RemoteSigned,您将运行以下命令:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

注意:要更改执行策略,您必须以管理员身份运行 PowerShell。如果您处于常规模式并尝试更改执行策略,您将收到以下错误:

拒绝访问注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”。要更改默认 (LocalMachine) 范围的执行策略,请使用“以管理员身份运行”选项启动 Windows PowerShell。

如果您想加强对尚未从 Internet 下载的您自己的脚本(或至少不包含 UNC 元数据)的内部限制,您可以强制该策略仅运行签名的脚本。要签署您自己的脚本,您可以按照 Scott Hanselman 关于签署 PowerShell 脚本的文章中的说明进行操作。

注意:大多数人在打开 Powershell 时可能会遇到此错误,因为 PS 在启动时尝试做的第一件事是执行您的用户配置文件脚本,该脚本设置您喜欢的环境。

该文件通常位于:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

您可以通过运行 powershell 变量找到确切位置

$profile

如果配置文件中没有您关心的内容,并且不想对您的安全设置大惊小怪,您可以将其删除,powershell 将找不到任何它无法执行的内容。

于 2014-11-16T08:05:03.503 回答
53

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

Get-ExecutionPolicy

默认情况下它是Restricted。为了允许执行 PowerShell 脚本,我们需要将此 ExecutionPolicy 设置为UnrestrictedBypass

Bypass我们可以使用以下任何 PowerShell 命令为当前用户设置策略:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

不受限制的策略会加载所有配置文件并运行所有脚本。如果您运行从 Internet 下载的未签名脚本,系统会在运行前提示您获得许可。

而在绕过策略中,没有任何内容被阻止,并且在脚本执行期间没有警告或提示。BypassExecutionPolicyUnrestricted.

于 2016-09-07T07:00:34.737 回答
49

在脚本之前运行此命令也可以解决问题:

set-executionpolicy unrestricted
于 2012-03-27T06:11:48.870 回答
49

在 Windows 7 中:

转到开始菜单并搜索“Windows PowerShell ISE”。

右键单击 x86 版本并选择“以管理员身份运行”。

在顶部,粘贴Set-ExecutionPolicy RemoteSigned;运行脚本。选择“是”。

对 64 位版本的 Powershell ISE(非 x86 版本)重复这些步骤。

我只是澄清@Chad Miller 暗示的步骤。谢谢乍得!

于 2012-12-04T05:25:34.623 回答
44

如果您处于非管理员的环境中,您可以为您设置执行策略,并且不需要管理员。

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

或者

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

您可以在帮助条目中阅读所有相关信息。

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
于 2013-11-19T19:13:10.483 回答
39

RemoteSigned:您自己创建的所有脚本都将运行,并且从 Internet 下载的所有脚本都需要由受信任的发布者签名。

好的,只需键入以下内容即可更改策略:

Set-ExecutionPolicy RemoteSigned
于 2011-07-20T12:37:47.293 回答
31

我使用的是Windows 10,无法运行任何命令。给我一些线索的唯一命令是:

[x64]

  1. 打开 C:\Windows\SysWOW64\cmd.exe [以管理员身份]
  2. 运行命令> powershell Set-ExecutionPolicy Unrestricted

但这没有用。这是有限的。可能是 Windows10 的新安全策略。我有这个错误:

Set-ExecutionPolicy:Windows PowerShell 成功更新了您的执行策略,但该设置被在更具体范围内定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的执行策略...

所以我找到了另一种方法(解决方案):

  1. 打开运行命令/控制台 ( Win+ R)
  2. 类型:gpedit.msc组策略编辑器)
  3. 浏览到本地计算机策略->计算机配置->管理模板-> Windows 组件-> Windows Powershell
  4. 启用“开启脚本执行
  5. 根据需要设置策略。我将我的设置为“允许所有脚本”。

现在打开 PowerShell 并享受 ;)

于 2015-09-01T09:32:01.220 回答
25
  1. 以管理员身份打开 powershell
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

使用这个命令

于 2020-05-31T20:08:32.240 回答
23

sou 应该运行这个命令

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
于 2021-10-08T08:04:22.363 回答
17

Win+R并键入复制粘贴命令并按OK

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

并执行你的脚本。

然后还原更改,例如:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
于 2017-10-03T06:29:07.033 回答
14

在 Windows 中打开命令提示符,如果问题仅出在 powershell 上,请使用以下命令,

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
于 2021-09-13T08:06:01.980 回答
11

你可以试试这个并选择“全部”选项

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
于 2020-02-13T06:32:35.507 回答
11
  1. 打开运行命令/控制台( Win + R )类型:gpedit。msc(组策略编辑器)
  2. 浏览到本地计算机策略->计算机配置->管理模板-> Windows 组件-> Windows Powershell。
  3. 启用打开脚本执行”根据需要设置策略。我将我的设置为“允许所有脚本”

现在运行你正在使用的运行命令..相信这个应用程序将运行..享受:)

于 2020-06-16T07:43:04.327 回答
10

设置执行策略是特定于环境的。如果您尝试从正在运行的 x86 ISE执行脚本,则必须使用 x86 PowerShell 来设置执行策略。同样,如果您正在运行 64 位 ISE,则必须使用 64 位 PowerShell 设置策略。

于 2012-08-25T00:33:17.867 回答
10

您也可以使用以下命令绕过它:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

Set-ExecutionPolicy您还可以阅读 Scott Sutherland 的这篇文章,其中解释了如果您没有管理员权限,则可以使用 15 种不同的方式绕过 PowerShell :

绕过 PowerShell 执行策略的 15 种方法

于 2016-12-30T14:45:10.707 回答
9

我也遇到过类似的问题,试试这个希望它对某人有帮助因为我正在使用 Windows,所以按照下面给出的步骤以管理员身份打开命令提示符,然后转到此路径

C:\Users\%username%\AppData\Roaming\npm\

在此文件夹(dir)中查找文件 ng.ps1,然后将其删除(del ng.ps1)

您也可以在此之后清除 npm 缓存,尽管它也应该在没有此步骤的情况下工作。希望它对我有用。

希望能帮助到你

于 2020-07-11T20:05:17.747 回答
7

在 PowerShell ISE编辑器中,我发现运行以下行首先允许脚本。

Set-ExecutionPolicy RemoteSigned -Scope Process
于 2015-05-29T14:50:48.460 回答
7
Set-ExecutionPolicy RemoteSigned

在powershell中以管理员模式执行此命令即可解决问题。

于 2021-01-18T14:27:10.780 回答
7

在窗口 10 中:

如果你不是管理员,你可以使用这个

powershell Set-ExecutionPolicy -Scope CurrentUser

命令管道位置 1 的 cmdlet Set-ExecutionPolicy 提供以下参数的值: ExecutionPolicy:RemoteSigned

它像魅力一样解决了我的问题!

于 2021-09-06T01:59:16.583 回答
5
  1. 以管理员身份打开 PowerShell 并运行Set-ExecutionPolicy -Scope CurrentUser
  2. 提供RemoteSigned并按 Enter
  3. 运行Set-ExecutionPolicy -Scope CurrentUser
  4. 提供Unrestricted并按 Enter
于 2018-04-19T05:11:17.297 回答
5

对于Windows 11 ......确实很容易。只需打开设置应用程序导航到隐私和安全隐私和安全图片

单击 For Developers 并滚动到底部并找到 PowerShell 选项,在该选项下选中“更改执行策略......远程脚本”复选框。开发者选项图片

于 2021-12-07T14:01:22.867 回答
5

首先,您需要打开 powershell 并运行此命令。

set-ExecutionPolicy RemoteSigned -Scope CurrentUser

然后它会要求你确认。输入Y并按Enter

当您运行此命令时,您可以看到您的系统已将当前用户的所有策略设置为远程。完成此过程需要几秒钟。图像将如下所示。

在此处输入图像描述

要检查是否已设置执行策略,请键入: Get-ExecutionPolicy

如果它的设置输出是这样的:

在此处输入图像描述

于 2022-01-12T11:00:44.093 回答
4

这解决了我的问题

打开 WindowsPowerShell命令并运行以下查询以更改ExecutionPolicy

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

如果它要求确认更改,请按“Y”并按 Enter。

于 2020-01-31T06:15:33.570 回答
3

我尝试运行时收到另一个警告Set-ExecutionPolicy RemoteSigned

我用这个命令解决了

Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false

Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false
于 2020-02-09T15:16:52.647 回答
3

以管理员身份打开Powershell控制台,然后设置执行策略

Set-ExecutionPolicy -ExecutionPolicy Remotesigned 
于 2020-03-05T16:40:20.773 回答
2

我发现这条线路最适合我的一台Windows Server 2008 R2 服务器。在我的 PowerShell 脚本中,如果没有这一行,其他几个人没有问题:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
于 2015-07-02T13:03:51.430 回答
2

在 PowerShell 2.0 中,执行策略默认设置为禁用。

从那时起,PowerShell 团队做了很多改进,他们相信用户在运行脚本时不会破坏太多东西。因此,从 PowerShell 4.0 开始,它默认启用。

在您的情况下,Set-ExecutionPolicy RemoteSigned从 PowerShell 控制台键入并说是。

于 2015-10-28T19:12:36.593 回答
2

转到注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell并设置ExecutionPolicyRemoteSigned.

于 2016-10-08T19:20:38.810 回答
2

我今天遇到了同样的问题。64 位执行策略不受限制,而 32 位执行策略受到限制。

以下是仅远程更改 32 位策略的方法:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
于 2017-11-10T13:49:03.147 回答
2

在 Windows 10 中,启用名称下的选项:“从任何来源安装应用程序,包括松散文件。” 在此处输入图像描述

它为我解决了这个问题

于 2021-12-12T06:37:42.950 回答
2

以管理员身份打开 PowerShell。运行以下命令

Set-ExecutionPolicy RemoteSigned

询问时输入 Y!

于 2022-01-27T13:29:41.950 回答
1

如果您是因为使用RubyChef运行它并使用 `` 系统执行而在这里,请执行以下操作:

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

该命令用于获取“MyDocuments”文件夹。

-ExecutionPolicy Unrestricted成功了。

我希望它对其他人有帮助。

于 2014-10-20T00:09:21.937 回答
1

几个答案指向执行策略。然而,有些事情也需要“runas 管理员”。这是最安全的,因为执行策略不会永久更改,并且可以通过管理员限制。与 schedtask 一起使用以启动批处理:

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

来自上面的 Jack Edmonds 和帖子的 Peter Mortensen / Dhana如何从命令提示符以“以管理员身份运行”运行应用程序?

于 2016-01-16T01:40:03.513 回答
1

您可以使用一种特殊的方式绕过它:

Get-Content "PS1scriptfullpath.ps1" | Powershell-NoProfile -

它将 powershell 脚本的内容通过管道传输到 powershell.exe 并绕过执行策略执行它。

于 2020-01-13T17:04:38.460 回答
1

删除 C:\Users[您的用户]\AppData\Roaming\npm 中的 ng.ps1 文件

并删除 C:\Users\USER\AppData\Roaming 中的 npm 缓存文件

于 2021-06-12T11:32:27.460 回答
0

打开 cmd 而不是 powershell。这对我有帮助...

于 2020-02-12T09:15:48.280 回答
0

运行Set-ExecutionPolicy RemoteSigned命令

于 2020-04-06T06:45:22.193 回答
-2

以管理员身份打开 PowerShell 窗口。它会起作用的。

于 2017-05-12T11:21:55.157 回答