为什么我的PowerShell脚本未运行?


103

我编写了一个简单的批处理文件作为PowerShell脚本,当它们运行时出现错误。

它在我的路径中的脚本目录中。这是我得到的错误:

无法加载,因为此系统上禁用了脚本的执行。请参阅“有关签名的帮助”。

我看了看帮助,但没有帮助。

Answers:


102

它可能是PowerShell的默认安全级别,该级别(IIRC)仅运行签名脚本。

尝试输入以下内容:

set-executionpolicy remotesigned

这将告诉PowerShell允许运行本地(即在本地驱动器上)未签名的脚本。

然后尝试再次执行脚本。


5
至少在Windows 8下,您必须以管理员权限运行Powershell!
ComFreek

1
而且,您还必须在Windows 7下以管理特权运行PowerShell脚本。
Rod 2014年

14
这是一个相当恐怖的答案。一方面,它会以可能不希望的(和不安全的)方式永久更改Powershell的默认安全级别。另一方面,它甚至无法充分说明已签名的远程脚本和未签名的本地脚本(而非Chocolatey偶尔需要的签名的远程脚本)将被授予执行特权。大多数用户可能想要这个这个
Cecil Curry

1
尽管塞西尔(Cecil)对答案中某些弱点的担忧是公平的,但我想指出几件事。1)他的两个链接似乎为我打开了同一页面。2)如果只想运行脚本,则设置执行策略可能仍然可行,并且可能与OP无关:3)似乎最好的策略是启动脚本,请在命令行中指定执行策略和范围运行脚本,并在登录时根据需要设置会话配置。如果您希望Windows会话期间具有较高的安全性,但又希望减少登录时的安全性,则希望按脚本顺序进行细微调整。
omJohn8372'9

对于一个镜头,我发现下面的Ankur答案最有用,它为正在运行的PowerShell实例定义了一个临时异常。
Florenz Kley

79

您需要运行Set-ExecutionPolicy

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Windows将新安装设置为的默认ExecutionPolicy值是什么?
马修·洛克

5
@MatthewLock Restricted是默认策略。阅读更多
Nadeem_MK '17


16

我可以这样调用PowerShell来绕过此错误:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

也就是说,我在-executionpolicy bypass调用脚本的方式中添加了。

这适用于Windows 7 Service Pack1。PowerShell是我的新手,因此可能会有一些我不知道的警告。

[Edit 2017-06-26]我继续在包括Windows 10和Windows 2012 R2在内的其他系统上使用此技术,没有出现问题。

这是我现在正在使用的。这可以防止我通过单击意外运行脚本。当我在调度程序中运行它时,我添加了一个参数:“ scheduler”,它绕过了提示。

这也会在最后暂停窗口,因此我可以看到PowerShell的输出。

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%

这就是Chocolatey用于下载和安装Chocolatey的工具
icc97 '18

我尝试运行命令Set-ExecutionPolicybypass -File C:\ Users \ david \ Desktop \ test.ps1并收到错误消息。该命令没有-File选项。
David Spector

哦,我明白了。您必须制作一个包含命令powershell -executionpolicy旁路-File C:\ Users \ david \ Desktop \ test.ps1的快捷方式。即使给出了安全的全局命令Set-ExecutionPolicy Restricted,命令test.ps1仍将运行。我希望这些基本信息对某人有帮助。
David Spector

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

即使发生以下错误,上述命令也对我有用:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.


1

该命令set-executionpolicy unrestricted将允许您创建的任何脚本以登录用户身份运行。只需确保set-executionpolicy signed在注销之前使用命令将执行策略设置重新设置为已签名。


set-executionpolicy signedCannot bind parameter 'ExecutionPolicy'
-JinSnow

0

在Windows 10上:单击myfile.ps1的更改安全属性,然后通过右键单击myfile.ps1上的/属性来更改“允许访问”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.