为什么我的powershell脚本不能运行?
我写了一个简单的batch file作为PowerShell脚本,我得到错误时,他们运行。
它在我的path中的脚本目录中。
Cannot be loaded because the execution of scripts is disabled on this system. please see "get-help about-signing".
我看着帮助,但它不是帮助。
可能是PowerShell的默认安全级别,(IIRC)只能运行签名脚本。
尝试input这个:
set-executionpolicy remotesigned
这将告诉PowerShell允许本地(即在本地驱动器上)未签名的脚本运行。
然后尝试再次执行您的脚本。
你需要运行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.
希望这可以帮助!
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
总是使用上面的cmd
来启用在当前会话中执行powershell。
我可以通过像这样调用powershell来绕过这个错误:
powershell -executionpolicy bypass -File .\MYSCRIPT.ps1
也就是说,我添加了-executionpolicy bypass
到我调用脚本的方式。
这在Windows 7 Service Pack 1上工作。我是PowerShell的新手,所以可能会有这样的警告,我不知道。
[编辑2017-06-26]我已经继续在其他系统上使用这种技术,包括Windows 10和Windows 2012r2没有问题。
这是我现在使用的。 这使我不会意外地通过点击运行脚本。 当我在调度程序中运行它时,我添加了一个参数:“调度程序”,并绕过提示。
这也终止了窗口,所以我可以看到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%
另外值得一提的是,您可能需要在脚本名称前join.\
。 例如:
.\scriptname.ps1
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
即使发生以下错误,上述命令也适用于我:
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
命令set-executionpolicy unrestricted
将允许您创build的任何脚本以login用户身份运行。 只要确保在注销之前使用set-executionpolicy signed
命令将执行策略设置恢复为带符号。