我在64位Windows 7 Professional上使用Windows PowerShell 2.0。我有我的桌面上的一个脚本,将导致以下错误,当我尝试运行它:为什么我的本地创建的脚本不允许在RemoteSigned执行策略下运行?
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
我既是一个域管理员和本地管理员,如果我跑Get-ExecutionPolicy -List
,我可以看到Group Policy Object
我创建配置PowerShell
机器级正确应用RemoteSigned
执行策略:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
我创建的脚本自己在Notepad,以及所使用的Sysinternals'streams实用程序和文件Properties
对话合作确认脚本不被视为来自互联网。如果我将脚本复制到域服务器上的网络共享中,则允许执行该脚本。如果我运行Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
,那么本地脚本仍然不被允许执行,这是合理的,因为MachinePolicy
范围内的执行策略将优先。
由于记录了about_Execution_Policies
,该RemoteSigned
政策意味着:
脚本可以运行。
需要从受信任的发布者获取从Internet上下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。
不需要在您已经运行并且已经写在本地计算机上(而不是从Internet上下载)的脚本上进行数字签名。
运行未经签名的脚本的风险来自Internet以外的来源和已签名的恶意脚本。
我的脚本没有签名,但既然它是在本地创建和执行的,它应该满足上面的第三个要点。那为什么它不被允许运行?为什么PowerShell会抱怨我的脚本“未经过数字签名”,而这个要求只适用于来自Internet的文件?为什么它不再关心脚本从网络共享运行时未被签名?
@Downvoter:关心给个理由? – BACON 2017-03-28 20:13:30