我创建了下面的批处理文件,只要我手动运行它就能完美运行。
但是,如果我从HTA应用程序运行.bat文件,PowerShell表示他无法运行该脚本,因为它没有签名/不可信:“无法加载文件,因为脚本的执行已禁用系统”。
是否有任何修复/解决方法,而无需实际签署脚本?
批处理文件:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". '%cd%\temp_oooscript\wrapper.ps1'"
谢谢。
答案 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”或“全部签名”。
要解决问题,有两种方法:
调整策略设置。不要让它太松散,就像不受限制一样(我认为它是一个中等到大的生产环境)。如果这是真的,同样的原因我不赞成Graimer的旁路方式。
如果这是一个实验室或小型且值得信赖的环境,则可以选择“不受限制”。或Graimer提出的旁路方法。
获取脚本签名。您需要运行一些“makecert”内容来生成签名,然后将其复制到计算机上。以下链接可能有所帮助:
答案 2 :(得分:0)
YES!找到了血腥的解决方案!!需要从system32而不是SysWOW64通过mshta.exe运行HTA文件。哇噢!