【问题标题】:Alternatives to fix PowerShell error "execution of scripts is disabled on this system"修复 PowerShell 错误“在此系统上禁用脚本执行”的替代方法
【发布时间】:2013-07-16 20:00:49
【问题描述】:

我有一个我自己编写的 PowerShell 脚本。我尝试如下运行 PowerShell 脚本;

PS C:\Documents and Settings\Administrator>c:\test\Test.ps1

所以这给了我一个错误:

无法加载文件 c:\test\Test.ps1,因为此系统上禁用了脚本的执行。有关详细信息,请参阅“get-help about_signing”。

我发现设置Set-ExecutionPolicy Unrestricted 可以修复错误。

但我的问题是;

  1. 此次签约的目的是什么?
  2. 我们可以在不设置Set-ExecutionPolicy Unrestricted 的情况下修复这个错误吗(做签名之类的事情)?如果是,该怎么做?
  3. 如果我在我的网络服务器中设置Set-ExecutionPolicy Unrestricted,是否会出现安全问题?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    Set-ExecutionPolicy 导致系统范围的更改。脚本是可能的安全漏洞,这就是默认情况下禁用所有脚本执行的原因。一种可能性是使用仅对该特定会话有效的执行策略从命令行启动 PowerShell 进程。命令行类似于:

    > powershell.exe -ExecutionPolicy Unrestricted -File "c:\test\Test.ps1"
    

    您可以将此与签名相结合,方法是将默认策略保留为 Restricted,并在需要时使用 RemoteSigned 或 AllSigned 策略启动 PowerShell。关于 powershell.exe 命令行选项的一些附加信息是here

    【讨论】:

    • Set-ExecutionPolicy 也可以由用户通过 -Scope CurrentUser 进行限制,现在本地用户不需要重做更改。无论如何,您完美地展示了默认执行策略如何没有做任何有意义的事情。您可以轻松地将所有 powershell 放入一个批处理文件中,然后始终执行,它与运行 ps1 文件一样是一个很好的攻击向量。所以这个默认策略真的没有用,它只是愚蠢的,如果它真的会阻止攻击,那么肯定是好的设置,但它没有。它只是令人讨厌的愚蠢。
    • 这不仅解决了签名问题,还解决了默认情况下在记事本中打开文件类型的问题。太棒了!
    【解决方案2】:

    如果您按照说明进行操作,您将获得一个帮助页面,该页面会告诉您具体需要做什么。

    get-help about_signing
    

    总而言之,计算机无法判断编写脚本的人是一个值得信赖的人,因此默认情况下它不会运行任何不值得信赖的脚本。解决此问题的两种方法是允许来自未知来源的脚本(您通过使用Set-ExecutionPolicy Unrestricted 发现的解决方案)或通过“signing”脚本证明它来自可信赖的来源并且没有被篡改过从那个来源得到它。

    要签署您自己的代码,您需要一个代码签名证书。阅读about_signing 帮助,有一个名为CREATE A SELF-SIGNED CERTIFICATE 的部分会告诉您如何操作。

    获得证书后,您需要对脚本进行签名。如果您再次查看相同的帮助,则会有一个名为 SIGN A SCRIPT 的部分告诉您如何执行此操作。

    【讨论】:

    • 感谢您提供的清除信息。唱代码我适合我的问题。但我以前没有这样做过。感觉过程漫长。所以我选择了建议的解决方案mike z。感谢您提供的详细信息。
    猜你喜欢
    • 2019-07-13
    • 2021-02-14
    • 2022-11-10
    • 2011-05-01
    • 2018-06-08
    相关资源
    最近更新 更多