簡體   English   中英

HTA的未簽名Powershell腳本

[英]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種方法:

  1. 調整策略設置。 不要像不受限制的那樣使其過於寬松(我假設它是中型到大型生產環境)。 同樣的原因,如果這是真的,我不會支持Graimer的繞過方式。

    如果這是一個實驗室或小型且受信任的環境,則可以選擇“不受限制”。 或Graimer提出的旁路方法。

  2. 獲取腳本簽名。您需要運行一些“ makecert”東西來生成簽名,然后將其復制到計算機上。 以下鏈接可能會有所幫助:

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

是!! 找到了血腥的解決方案!! HTA文件需要通過system32而不是SysWOW64通過mshta.exe運行。 哇!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM