我正在尝试运行从 cmd.exe
调用 PowerShell 脚本的 cmd
文件,但我收到此错误:
无法加载 Management_Install.ps1,因为此系统上禁用了脚本执行。
我运行了这个命令:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
当我从 PowerShell 运行 Get-ExecutionPolicy
时,它返回 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”。在 line:1 char:25 .\Management_Install.ps1 <<<< 1 CategoryInfo : NotSpecified: (:) [], PSSecurityExceptionfullyQualifiedErrorId : RuntimeException C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install \Scripts> PAUSE 按任意键继续。 . .
系统为 Windows Server 2008R2。
我究竟做错了什么?
Get-ExecutionPolicy -List
。
如果您使用的是 Windows Server 2008 R2,则有一个 x64 和 x86 版本的 PowerShell,两者都必须设置其执行策略。您是否在两台主机上都设置了执行策略?
作为管理员,您可以通过在 PowerShell 窗口中键入以下内容来设置执行策略:
Set-ExecutionPolicy RemoteSigned
有关详细信息,请参阅 Using the 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
您可以在运行 PowerShell 时通过添加 -ExecutionPolicy Bypass
绕过此策略来处理单个文件
powershell -ExecutionPolicy Bypass -File script.ps1
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass
的快捷方式。
type script.ps1 | powershell -
从 .bat 调用 ps1 确实有效。
.ps1
并意外运行他们不打算执行的操作。 .bat
个文件会发生这种情况
A parameter cannot be found that matches parameter name 'File'
命令:Set-ExecutionPolicy -ExecutionPolicy Bypass -File .\file.ps1
我遇到了类似的问题,并注意到 Windows Server 2012 上的默认 cmd
正在运行 x64。
对于 Windows 11、Windows 10、Windows 7、Windows 8、Windows Server 2008 R2 或 Windows 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 中:回显 %PROCESSOR_ARCHITECTURE%
在 Powershell 中:[环境]::Is64BitProcess
参考资料:
MSDN - Windows PowerShell execution policies
Windows - 32bit vs 64bit directory explanation
大多数现有答案都解释了如何,但很少有人解释为什么。在你在互联网上执行来自陌生人的代码之前,尤其是禁用安全措施的代码之前,你应该准确地了解你在做什么。所以这里有更多关于这个问题的细节。
来自 TechNet About Execution Policies Page:
Windows PowerShell 执行策略允许您确定 Windows PowerShell 加载配置文件和运行脚本的条件。
PowerShell Basics - Execution Policy and Code Signing 列举的好处是:
执行控制 - 控制执行脚本的信任级别。 Command Highjack - 防止在我的路径中注入命令。身份 - 脚本是由我信任的开发人员创建和签名的和/或使用我信任的证书颁发机构的证书签名的。完整性 - 恶意软件或恶意用户无法修改脚本。
要检查您当前的执行策略,您可以运行 Get-ExecutionPolicy
。但你可能在这里是因为你想改变它。
为此,您将运行 Set-ExecutionPolicy
cmdlet。
在更新执行策略时,您需要做出两个主要决定。
执行策略类型:
受限† - 不能在系统上执行本地、远程或下载的脚本。
AllSigned - 运行的所有脚本都需要进行数字签名。
RemoteSigned - 所有远程脚本 (UNC) 或下载的都需要签名。
不受限制 - 不需要任何类型的脚本的签名。
新变化的范围
LocalMachine† - 执行策略影响计算机的所有用户。
CurrentUser - 执行策略仅影响当前用户。
进程 - 执行策略仅影响当前的 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 关于 Signing PowerShell Scripts 的文章中的说明进行操作。
注意:大多数人在打开 Powershell 时可能会收到此错误,因为 PS 在启动时尝试做的第一件事是执行您的用户配置文件脚本,该脚本设置您喜欢的环境。
该文件通常位于:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
您可以通过运行 powershell 变量找到确切位置
$profile
如果配置文件中没有您关心的内容,并且不想对您的安全设置大惊小怪,您可以将其删除,powershell 将找不到任何它无法执行的内容。
Get-Content .\MyFile.ps1 | powershell.exe -NoProfile -
这样简单的东西来 get around execution policy 是微不足道的。
-ExecutionPolicy ByPass
的存在,该策略的目的是什么?是否只是为了防止用户意外打开powershell控制台并运行恶意脚本?如果攻击者想解决这个问题,他们不能只使用可执行文件或批处理脚本吗?即使在阅读@BaconBits 评论后,我也不太确定该政策旨在防止什么情况......
我们可以通过以下命令获取当前 ExecutionPolicy
的状态:
Get-ExecutionPolicy
默认情况下,它是受限的。要允许执行 PowerShell 脚本,我们需要将此 ExecutionPolicy 设置为 Unrestricted 或 Bypass。
我们可以使用以下任何 PowerShell 命令将当前用户的策略设置为 Bypass
:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
不受限制的策略会加载所有配置文件并运行所有脚本。如果您运行从 Internet 下载的未签名脚本,则会在运行前提示您获得许可。
而在 Bypass 策略中,没有任何内容被阻止,并且在脚本执行期间没有警告或提示。绕过 ExecutionPolicy
比 Unrestricted
更轻松。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
告诉 VS2015 停止抱怨并运行我该死的脚本的又快又脏的方式。谢谢。救生员。
在脚本之前运行此命令也可以解决问题:
Set-ExecutionPolicy Unrestricted
RemoteSigned
。如果这不起作用,那么重新评估您的痛点是什么以及为什么它不起作用。您可以将 unrestricted
设置为最后的手段,但它不应该是您的起点。
Remotesigned
。
在 Windows 7 中:
转到开始菜单并搜索“Windows PowerShell ISE”。
右键单击 x86 版本并选择“以管理员身份运行”。
在顶部,粘贴 Set-ExecutionPolicy RemoteSigned
;运行脚本。选择“是”。
对 64 位版本的 Powershell ISE(非 x86 版本)重复这些步骤。
我只是澄清@Chad Miller 暗示的步骤。谢谢乍得!
如果您处于非管理员的环境中,您可以为您设置执行策略,并且不需要管理员。
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
或者
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
您可以在帮助条目中阅读所有相关信息。
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
Set-ExecutionPolicy Unrestricted
似乎没有“无限制”到足以真正提供帮助。
RemoteSigned:您自己创建的所有脚本都将运行,并且从 Internet 下载的所有脚本都需要由受信任的发布者签名。
好的,只需键入以下内容即可更改策略:
Set-ExecutionPolicy RemoteSigned
我使用的是 Windows 10,无法运行任何命令。给我一些线索的唯一命令是:
[x64]
打开 C:\Windows\SysWOW64\cmd.exe [以管理员身份] 运行命令> powershell Set-ExecutionPolicy Unrestricted
但这没有用。这是有限的。可能是 Windows10 的新安全策略。我有这个错误:
Set-ExecutionPolicy:Windows PowerShell 成功更新了您的执行策略,但该设置被在更具体范围内定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的执行策略...
所以我找到了另一种方法(解决方案):
打开运行命令/控制台(Win + R)类型:gpedit.msc(组策略编辑器)浏览到本地计算机策略 -> 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Powershell。启用“打开脚本执行”根据需要设置策略。我将我的设置为“允许所有脚本”。
现在打开 PowerShell 并享受 ;)
Set-ExecutionPolicy RemoteSigned
Unrestricted
。最好使用 RemoteSigned
以管理员身份打开 powershell
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
使用这个命令
sou 应该运行这个命令
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Win + R 并输入复制粘贴命令,然后按确定:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
并执行你的脚本。
然后还原更改,例如:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
打开 Windows PowerShell
命令并在 query
下运行以更改 ExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
如果它要求确认更改,请按“Y”并按 Enter。
在 Windows 中打开命令提示符,如果问题仅出在 powershell 上,请使用以下命令,
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
设置执行策略是特定于环境的。如果您尝试从正在运行的 x86 ISE 执行脚本,则必须使用 x86 PowerShell 来设置执行策略。同样,如果您正在运行 64 位 ISE,则必须使用 64 位 PowerShell 设置策略。
你可以试试这个并选择“全部”选项
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
打开运行命令/控制台( Win + R )类型:gpedit。 msc(组策略编辑器)浏览到本地计算机策略 -> 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Powershell。启用“打开脚本执行”根据需要设置策略。我将我的设置为“允许所有脚本”。
现在运行你正在使用的运行命令..相信这个应用程序将运行..享受:)
您也可以使用以下命令绕过它:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
如果您没有管理员权限,您还可以阅读 Scott Sutherland 的这篇文章,其中解释了 15 种绕过 PowerShell Set-ExecutionPolicy
的不同方法:
15 Ways to Bypass the PowerShell Execution Policy
我也遇到过类似的问题,试试这个希望它对某人有所帮助因为我使用的是 Windows,所以按照下面给出的步骤以管理员身份打开命令提示符,然后转到此路径
C:\Users\%username%\AppData\Roaming\npm\
在此文件夹(dir)中查找文件 ng.ps1,然后将其删除(del ng.ps1)
您也可以在此之后清除 npm 缓存,尽管它也应该在没有此步骤的情况下工作。希望它对我有用。
希望能帮助到你
Set-ExecutionPolicy RemoteSigned
在powershell中以管理员模式执行此命令即可解决问题。
在窗口 10 中:
如果你不是管理员,你可以使用这个
powershell Set-ExecutionPolicy -Scope CurrentUser
命令管道位置 1 的 cmdlet Set-ExecutionPolicy 提供以下参数的值: ExecutionPolicy:RemoteSigned
它像魅力一样解决了我的问题!
https://i.stack.imgur.com/q76IF.png
https://i.stack.imgur.com/Snz6j.png
首先,您需要打开 powershell 并运行此命令。
set-ExecutionPolicy RemoteSigned -Scope CurrentUser
然后它会要求你确认。输入 Y 并按 Enter
当您运行此命令时,您可以看到您的系统已将当前用户的所有策略设置为远程。完成此过程需要几秒钟。图像将如下所示。
https://i.stack.imgur.com/XyFUJ.png
要检查是否已设置执行策略,请键入:Get-ExecutionPolicy
如果它的设置输出是这样的:
https://i.stack.imgur.com/0wTAV.png
以管理员身份打开 PowerShell 并运行 Set-ExecutionPolicy -Scope CurrentUser Provide RemoteSigned 并按 Enter 运行 Set-ExecutionPolicy -Scope CurrentUser Provide Unrestricted 并按 Enter
在 PowerShell 2.0 中,执行策略默认设置为禁用。
从那时起,PowerShell 团队做了很多改进,他们相信用户在运行脚本时不会破坏太多东西。因此,从 PowerShell 4.0 开始,它默认启用。
在您的情况下,从 PowerShell 控制台键入 Set-ExecutionPolicy RemoteSigned
并说是。
我尝试运行 Set-ExecutionPolicy RemoteSigned
时收到另一个警告
我用这个命令解决了
Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false
Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false
https://i.stack.imgur.com/TjTjR.png
它为我解决了这个问题
以管理员身份打开 PowerShell。运行以下命令
Set-ExecutionPolicy RemoteSigned
询问时输入 Y!
Set-ExecutionPolicy Restricted
似乎是撤消它的方法:technet.microsoft.com/en-us/library/ee176961.aspx。@Jack Edmonds
的临时绕过方法对我来说看起来更安全:powershell -ExecutionPolicy ByPass -File script.ps1
Get-ExecutionPolicy -List
,它帮助我看到了不同的范围。 cmdGet-ExecutionPolicy
不显示所有范围。Import-Module SQLPS
现在正在使用更改如下的政策:{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}
。