为什么我的PowerShell脚本没有运行?

时间:2008-08-14 03:39:18

标签: powershell

我写了一个简单的批处理文件作为PowerShell脚本,我在运行时遇到错误。

它位于我路径中的脚本目录中。

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

我查看了帮助,但这并没有帮助。

10 个答案:

答案 0 :(得分:96)

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

尝试输入:

set-executionpolicy remotesigned

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

然后再次尝试执行脚本。

答案 1 :(得分:72)

您需要运行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.

答案 2 :(得分:17)

使用:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

始终使用上述命令启用在当前会话中执行PowerShell。

答案 3 :(得分:14)

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

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

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

这适用于Windows 7 Service Pack 1.我是PowerShell的新手,所以我可能会注意到这一点,我不知道。

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

这是我现在正在使用的内容。这使我不会通过点击它意外地运行脚本。当我在调度程序中运行它时,我添加一个参数:&#34; scheduler&#34;并绕过了提示。

这也会在最后暂停窗口,以便我可以看到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%

答案 4 :(得分:5)

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

即使出现以下错误,上述命令也适用于我:

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

答案 5 :(得分:5)

另外值得知道的是,您可能需要在脚本名称前包含.\。例如:

.\scriptname.ps1

答案 6 :(得分:1)

命令set-executionpolicy unrestricted将允许您创建的任何脚本作为登录用户运行。在注销之前,请务必使用set-executionpolicy signed命令将executionpolicy设置恢复为signed。

答案 7 :(得分:0)

绕过执行策略是理想的,例如通过

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

不幸的是,这仍然可以通过组策略来防止。作为一种解决方法,您可以通过在 PowerShell 中运行将脚本编码为 Base64:

[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes((Get-Content .\MYSCRIPT.ps1)))

然后像这样执行结果:

powershell.exe -EncodedCommand "put-your-base64-string-here"

警告:这不适用于需要参数的脚本。

答案 8 :(得分:0)

我们可以很好地绕过执行策略(在命令提示符内):

type file.ps1 | powershell -command -

或在Powershell中:

gc file.ps1|powershell -c -

答案 9 :(得分:0)

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