Answers:
它可能是PowerShell的默认安全级别,该级别(IIRC)仅运行签名脚本。
尝试输入以下内容:
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.
Restricted
是默认策略。阅读更多
用:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
始终使用以上命令来启用在当前会话中执行PowerShell。
我可以这样调用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%
同样值得一提的是,您可能需要.\
在脚本名称前添加该名称。例如:
.\scriptname.ps1
该命令set-executionpolicy unrestricted
将允许您创建的任何脚本以登录用户身份运行。只需确保set-executionpolicy signed
在注销之前使用命令将执行策略设置重新设置为已签名。
set-executionpolicy signed
给Cannot bind parameter 'ExecutionPolicy'
等