来自HTA的未签名Powershell脚本

时间:2013-05-11 14:49:32

标签: powershell batch-file signed ps1

我创建了下面的批处理文件,只要我手动运行它就能完美运行。

但是,如果我从HTA应用程序运行.bat文件,PowerShell表示他无法运行该脚本,因为它没有签名/不可信:“无法加载文件,因为脚本的执行已禁用系统”。

是否有任何修复/解决方法,而无需实际签署脚本?

批处理文件:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". '%cd%\temp_oooscript\wrapper.ps1'"

谢谢。

3 个答案:

答案 0 :(得分:0)

尝试将powershell的exeuctionpolicy设置为在执行时绕过。像这样:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -executionpolicy bypass -command ". '%cd%\temp_oooscript\wrapper.ps1'"

你之所以这么做是因为HTA应用程序是以32位软件运行,而你的操作系统是64位。因为HTA应用程序以32位运行,所以它使用C:\windows\syswow64\windowspowershell...中的powershell(即使您在代码中指定了system32)。那里的执行策略是它自己的设置,与普通的64位PowerShell中的设置分开。

解决此问题的最佳方法是使用您环境中的PKI基础架构签署脚本。作为解决方法,您可以使用我上面提供的代码。上述解决方法的优点是executepolicy仅设置为绕过(“禁用”)PROCESS,而不是作为可能危及安全性的默认设置。

答案 1 :(得分:0)

此问题是由Windows执行策略设置引起的。

要检查正在运行的策略,请键入以下命令:

Get-ExecutionPolicy

您的政策应该是以下四种之一:

Restricted - No scripts can be run. Windows PowerShell can be used only in interactive mode.

AllSigned - Only scripts signed by a trusted publisher can be run.

RemoteSigned - Downloaded scripts must be signed by a trusted publisher before they can be run.

Unrestricted - No restrictions; all Windows PowerShell scripts can be run.

不确定您是远程运行还是本地运行。

如果在本地,那么您的政策可能会“全部签名”。

如果远程,则您的策略可能是“RemoteSigned”或“全部签名”。

要解决问题,有两种方法:

  1. 调整策略设置。不要让它太松散,就像不受限制一样(我认为它是一个中等到大的生产环境)。如果这是真的,同样的原因我不赞成Graimer的旁路方式。

    如果这是一个实验室或小型且值得信赖的环境,则可以选择“不受限制”。或Graimer提出的旁路方法。

  2. 获取脚本签名。您需要运行一些“makecert”内容来生成签名,然后将其复制到计算机上。以下链接可能有所帮助:

  3. http://www.hanselman.com/blog/SigningPowerShellScripts.aspx

答案 2 :(得分:0)

YES!找到了血腥的解决方案!!需要从system32而不是SysWOW64通过mshta.exe运行HTA文件。哇噢!