微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的本地创建的脚本不允许在 RemoteSigned 执行策略下运行?

如何解决为什么我的本地创建的脚本不允许在 RemoteSigned 执行策略下运行?

我终于找到了.NET Code Access Security我有一些内部开发的二进制模块,它们存储在网络共享上并从网络共享中执行。为了让 .NET 2.0/PowerShell 2.0 加载它们,我在Intranet代码组中添加一个 URL 规则以信任该目录:

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups
Microsoft (R) .NET Framework caspol 2.0.50727.5420
copyright (c) Microsoft Corporation.  All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1.  All code: nothing
    1.1.  Zone - MyComputer: FullTrust
        1.1.1.  StrongName - ...: FullTrust
        1.1.2.  StrongName - ...: FullTrust
    1.2.  Zone - Intranet: Localintranet
        1.2.1.  All code: Same site Web
        1.2.2.  All code: Same directory FileIO - 'Read, Pathdiscovery'
        1.2.3.  Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust
    1.3.  Zone - Internet: Internet
        1.3.1.  All code: Same site Web
    1.4.  Zone - Untrusted: nothing
    1.5.  Zone - Trusted: Internet
        1.5.1.  All code: Same site Web

请注意,根据安装的 .NET 版本以及它是 32 位还是 64 位 Windows,caspol.exe可以存在于以下位置,每个位置都有自己的安全配置 (security.config):

  • $Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\

删除组后1.2.3.

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3.
Microsoft (R) .NET Framework caspol 2.0.50727.9136
copyright (c) Microsoft Corporation.  All rights reserved.

The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Removed code group from the Machine level.
Success

…我留下了认的 CAS 配置,并且本地脚本现在可以再次工作。自从我对 CAS 进行修补已经有一段时间了,我不确定为什么我的规则似乎会干扰FullTrust那些MyComputer授予.猜猜这是一个有争议的问题。

解决方法

由于此问题继续吸引被问题主体驳斥或未解决实际问题的回答, 请阅读以下 您需要了解的简单摘要:

  • 不是 “为什么我的 PowerShell 的默认安装不运行脚本?” 问题。
  • 不是 “为什么我安装的 PowerShell 不能运行从 Internet 下载的脚本?” 问题。
  • 问题是为什么RemoteSigned执行策略会在不应该执行的情况下阻止脚本执行。
  • RemoteSigned 是我要使用的 唯一执行策略。
    我知道还有其他限制较少的政策可用。如果这些政策是可接受的替代品,我会直接使用它们,而这个问题将不存在。
  • 执行策略 设置为RemoteSigned 将其更改RemoteSignedRemoteSigned不是解决方案。
  • 脚本文件在本地创建和存储。
  • 脚本文件未被阻止。 脚本文件从未被阻止(参见前一点)。
  • 脚本文件不能被解除阻塞 ,因为没有什么可以解除阻塞(见前一点)。
  • 脚本文件由管理员(试图)执行。
  • 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,并使用了Sysinternalsstreams实用程序和文件Properties对话框来确认该脚本没有被视为来自互联网。如果我将脚本复制到域服务器上的网络共享,则允许执行。如果我运行Set- ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine,则仍然不允许执行本地脚本,这是有道理的,因为MachinePolicy范围内的执行策略将优先。

正如about_Execution_Policies当前在问题时)所记录的,该RemoteSigned政策意味着:

  • 脚本可以运行。

  • 对于从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序),需要来自受信任的发布者的数字签名。

  • 不需要对您已运行并在本地计算机上编写的脚本进行数字签名(不是从 Internet 下载的)。

  • 运行来自 Internet 以外来源的未签名脚本和已签名但恶意脚本的风险。

我的脚本没有签名,但由于它是在本地创建和执行的,它应该满足上面的第三个要点。所以…

  • 为什么不允许我的脚本运行?
  • 为什么 PowerShell 抱怨我的脚本“没有经过数字签名”,而该要求只适用于来自 Internet 的文件?
  • 为什么 PowerShell 从网络共享运行时不再关心脚本未签名?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。