修复PowerShell错误的替代方法“在此系统上禁用脚本的执行”

时间:2013-07-18 03:02:45

标签: powershell

我有一个由我编写的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,是否会出现安全问题?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

如果你按照说明告诉你的那样做了,你就会得到一个帮助页面,告诉你你到底需要做什么。

get-help about_signing

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

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

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