0

我已经创建了下面的批处理文件,只要我手动运行它就可以完美地工作。

但是,如果我从 HTA 应用程序运行 .bat 文件,PowerShell 会说他无法运行该脚本,因为它没有签名/不受信任:“无法加载文件,因为在此系统上禁用了脚本的执行”。

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

批处理文件:

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

谢谢你。

4

3 回答 3

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 位运行,所以它使用 powershell C:\windows\syswow64\windowspowershell...(即使您system32在代码中指定)。那里的执行策略是它自己的设置,与您在普通 64 位 powershell 中的设置分开。

修复它的最佳方法是在您的环境中使用 PKI 基础架构对脚本进行签名。作为一种解决方法,您可以使用我上面提供的代码。上述解决方法的优点是,执行策略仅设置为绕过(“禁用”)进程,而不是作为可能危及安全性的默认设置。

于 2013-05-11T15:52:51.420 回答
0

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

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

Get-ExecutionPolicy

您的政策应该是以下 4 项之一:

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.

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

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

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

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

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

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

  2. 让脚本签名。您需要运行一些“makecert”东西来生成签名,然后将其复制到机器上。以下链接可能会有所帮助:

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

于 2013-05-11T17:09:53.967 回答
0

是的!!找到了血腥的解决方案!HTA 文件需要通过来自 system32 而不是 SysWOW64 的 mshta.exe 运行。呜呼!!!

于 2013-05-12T15:50:51.513 回答