[英]Unsigned Powershell scripts from HTA
我已經創建了下面的批處理文件,並且只要手動運行它就可以正常工作。
但是,如果我從HTA應用程序運行.bat文件,PowerShell表示他無法運行該腳本,因為該腳本未簽名/不受信任:“無法加載文件,因為此系統上禁用了腳本的執行”。
是否有任何修復/解決方法,而無需實際簽署腳本?
批處理文件:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". '%cd%\temp_oooscript\wrapper.ps1'"
謝謝。
嘗試在執行時將powershell設置為繞過執行策略。 像這樣:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -executionpolicy bypass -command ". '%cd%\temp_oooscript\wrapper.ps1'"
您之所以這么做,很可能是因為HTA應用程序是作為32位軟件運行的,而您的OS是64位的。 因為HTA應用程序以32位運行,所以它使用C:\\windows\\syswow64\\windowspowershell...
的powershell C:\\windows\\syswow64\\windowspowershell...
(即使您在代碼中指定了system32
)。 那里的執行策略是它自己的設置,與常規64位Powershell中的設置不同。
修復此問題的最佳方法是在您的環境中使用PKI基礎結構對腳本進行簽名。 作為一種解決方法,您可以使用上面提供的代碼。 上面的解決方法的優點在於,對於過程,執行策略僅設置為繞過(“禁用”),而不是可能損害安全性的默認設置。
Windows Execution-policy設置引起此問題。
要檢查正在運行的策略,請輸入以下命令:
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.
不確定您是在遠程還是本地運行。
如果在本地,則您的策略可能已“全部簽名”。
如果位於遠程,則您的策略可能是“ RemoteSigned”或“ allsigned”。
要解決此問題,有2種方法:
調整策略設置。 不要像不受限制的那樣使其過於寬松(我假設它是中型到大型生產環境)。 同樣的原因,如果這是真的,我不會支持Graimer的繞過方式。
如果這是一個實驗室或小型且受信任的環境,則可以選擇“不受限制”。 或Graimer提出的旁路方法。
獲取腳本簽名。您需要運行一些“ makecert”東西來生成簽名,然后將其復制到計算機上。 以下鏈接可能會有所幫助:
是!! 找到了血腥的解決方案!! HTA文件需要通過system32而不是SysWOW64通過mshta.exe運行。 哇!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.