【发布时间】:2012-04-02 07:42:40
【问题描述】:
由于此问题继续吸引以下回复,要么 被问题主体驳斥或不解决实际问题, 请阅读此简单摘要,了解您需要了解的内容:
- 这不是“为什么我的 PowerShell 的默认安装不运行脚本?”问题。
- 这不是“为什么我安装的 PowerShell 不能运行从 Internet 下载的脚本?”问题。
- 问题是为什么
RemoteSigned执行策略在不应该阻止脚本执行的情况下阻止脚本执行。RemoteSigned是我想要使用的唯一执行策略。我知道还有其他限制较少的策略可用。如果 这些政策是可以接受的替代品,我会使用它们 相反,这个问题就不存在了。- 执行策略已经设置为
RemoteSigned。 将其从RemoteSigned更改为RemoteSigned不是解决方案。- 脚本文件在本地创建和存储。
- 脚本文件未被阻止。脚本文件从未被阻止(参见上一点)。
- 无法解除阻止脚本文件,因为没有可解除阻止的内容(参见上一点)。
- 脚本文件已(试图)由管理员执行。
Windows PowerShell是唯一涉及的应用程序。 不是Windows PowerShell ISE或Command Prompt或任何其他工具或 编辑是相关的。- 问题的原因已经确定(请参阅已接受的答案)。将近 8 年后,我认为所有其他的显而易见 解释,无论是否适用,也已发布。如果 你不这么认为然后请阅读问题和现有 在添加您的之前完整地回答。
我在 64 位 Windows 7 Professional 上使用 Windows PowerShell 2.0。我的Desktop 上有一个脚本,当我尝试运行它时会导致以下错误:
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,我可以看到我为配置PowerShell而创建的Group Policy Object在机器级别正确应用了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(current;at time of question) 所述,RemoteSigned 政策意味着:
脚本可以运行。
从 Internet 下载的脚本和配置文件需要来自受信任的发布者的数字签名 (包括电子邮件和即时通讯程序)。
不需要对已运行且已在本地计算机上编写的脚本进行数字签名(不是从 互联网)。
运行来自 Internet 以外来源的未签名脚本和已签名但恶意脚本的风险。
我的脚本没有签名,但由于它是在本地创建和执行的,它应该满足上面的第三个要点。所以……
- 为什么不允许我的脚本运行?
- 为什么 PowerShell 抱怨我的脚本“没有经过数字签名”,而该要求只适用于来自 Internet 的文件?
- 为什么 PowerShell 从网络共享运行时不再关心脚本未签名?
【问题讨论】:
-
@Downvoter:愿意给出原因吗?
标签: powershell powershell-2.0 code-signing executionpolicy