我写了一个简单的批处理文件作为PowerShell脚本,我在运行时遇到错误。
它位于我路径的脚本目录中。 这是我得到的错误:
Cannot be loaded because the execution of scripts is disabled on this system.
Please see"get-help about-signing".
我查看了帮助,但这并没有帮助。
它可能是PowerShell的默认安全级别,(IIRC)只会运行签名脚本。
尝试输入:
1
| set-executionpolicy remotesigned |
这将告诉PowerShell允许本地(即在本地驱动器上)运行未签名的脚本。
然后再次尝试执行脚本。
你需要运行Set-ExecutionPolicy:
1 2 3 4 5 6 7 8 9
| 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. |
使用:
1
| Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process |
始终使用以上命令启用在当前会话中执行PowerShell。
通过像这样调用PowerShell,我能够绕过这个错误:
1
| powershell -executionpolicy bypass -File .\MYSCRIPT.ps1 |
也就是说,我将-executionpolicy bypass添加到我调用脚本的方式中。
这适用于Windows 7 Service Pack 1.我是PowerShell的新手,因此我可能会注意到这一点,我不知道。
[编辑2017-06-26]我继续在其他系统上使用此技术,包括Windows 10和Windows 2012 R2,没有问题。
这是我现在使用的。这使我不会通过点击它意外地运行脚本。当我在调度程序中运行它时,我添加一个参数:"scheduler"并绕过提示符。
这也会在最后暂停窗口,以便我可以看到PowerShell的输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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 .
undps.ps1
set psexitcode=%errorlevel%
if NOT"%1" =="scheduler" (
@echo Powershell finished. Press space to exit.
pause
)
exit /b %psexitcode% |
1
| Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process |
即使出现以下错误,上面的命令也适用于我:
1
| Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. |
另外值得知道您可能需要在脚本名称前包含.\。例如:
命令set-executionpolicy unrestricted将允许您创建的任何脚本作为登录用户运行。请务必在注销之前使用set-executionpolicy signed命令将executionpolicy设置恢复为signed。