使用商務用應用程控強制執行腳本

注意

商務用應用程控的某些功能僅適用於特定的 Windows 版本。 深入了解 應用程控功能可用性

重要

選項 11 已停用:Windows Server 2016Windows 10 1607 LTSB 不支援腳本強制執行,且不應在這些平臺上使用。 這樣做會導致非預期的腳本強制執行行為。

腳本強制執行概觀

根據預設,除非原則中已設定 [ 11 停用:腳本強制 執行] 選項,否則所有應用程控原則都會啟用腳本強制執行。 應用程控腳本強制執行牽涉到啟發式腳本主機之間的交握,例如 PowerShell 和應用程控。 不過,腳本主機會處理實際的強制執行行為。 某些腳本主機,例如Microsoft HTML 應用程式主機 (mshta.exe) ,會在任何應用程控 UMCI 原則作用中時封鎖所有程式碼執行。 大部分的腳本主機會先詢問應用程控,是否應根據目前作用中的應用程控原則來允許腳本執行。 然後,腳本主機會封鎖、允許或變更腳本的執行 方式 ,以最能保護用戶和裝置。

已簽署腳本的驗證是使用 WinVerifyTrust API 來完成。 若要通過驗證,簽章根目錄必須存在於裝置上受信任的根存放區中,而且您的應用程控原則必須允許它。 此行為與可執行文件的應用程控驗證不同,後者不需要安裝跟證書。

應用程控會共用所有腳本強制事件的 AppLocker - MSI 和腳本 事件記錄檔。 每當腳本主機詢問 App Control 是否應允許腳本時,就會記錄事件,並以回應應用程式控制件傳回至腳本主機。 如需應用程控腳本強制事件的詳細資訊,請參閱 瞭解應用程控事件

注意

當執行原則不允許的腳本時,應用程控會引發事件,指出腳本已「封鎖」。不過,實際的腳本強制執行行為是由腳本主機處理,實際上可能不會完全封鎖檔案執行。

也請注意,某些腳本主機可能會變更其行為,即使應用程控原則僅處於稽核模式。 您應該檢閱本文中的腳本主機特定資訊,並在您的環境中徹底測試,以確保您需要執行的腳本正常運作。

屬於 Windows 一部分的啟發式腳本主機

PowerShell

您的應用程控原則必須允許所有 PowerShell 腳本 (.ps1) 、模組 (.psm1) ,以及指令清單 (.psd1) ,才能以完整語言許可權執行。

您的應用程控原則也必須允許允許模組載入的任何 相依模組 ,而且在強制執行應用程控時,模組函式必須以名稱明確匯出。 未指定任何匯出函式的模組 (沒有匯出名稱清單) 仍會載入,但無法存取任何模組函式。 在其名稱中使用通配符 (*) 的模組將無法載入。

應用程式控制原則不允許的任何 PowerShell 腳本仍會執行,但只能在限制語言模式中執行。

不建議使用PowerShell 點源 。 相反地,腳本應該使用PowerShell模組來提供一般功能。 如果允許的腳本檔案嘗試執行點源腳本檔案,則這些腳本檔案也必須通過原則。

如果強制執行任何應用程控 UMCI 原則,而且任何作用中的應用程控原則都啟用腳本強制執行,即使該原則處於稽核模式,應用程控會將互動式 PowerShell 置於限制語言模式中。 若要以完整語言許可權執行互動式 PowerShell,您必須停用 所有 原則的腳本強制執行。

如需詳細資訊,請 參閱關於語言模式限制語言模式

VBscript、cscript 和 jscript

您的應用程控原則必須允許使用 Windows 腳本主機 (wscript.exe) 或Microsoft控制台型腳本主機 (cscript.exe) 執行所有腳本。 如果沒有,則會封鎖腳本。

Microsoft HTML 應用程式主機 (MSHTA) 和 MSXML

如果任何強制執行腳本的應用程控原則為作用中,即使該原則處於稽核模式,仍會封鎖使用 MSHTA 或 MSXML 的所有程式碼執行。

COM物件

應用程控會針對您的應用程控原則可以擴充或進一步限制的 COM 對象,額外強制執行受限制的允許清單。 COM 物件強制執行 不會 受到選項 11 Disabled:Script Enforcement 的影響。 如需如何允許或拒絕 COM 物件的詳細資訊,請參閱 允許 COM 物件註冊

未由應用程控直接控制的腳本

應用程控不會直接控制透過 Windows 命令處理器 (cmd.exe) 執行的程式代碼,包括 .bat/.cmd 腳本檔案。 不過,這類批次腳本嘗試執行的任何專案都受限於應用程控控件。 如果您不需要執行 cmd.exe,建議您直接封鎖它,或只根據呼叫進程的例外狀況來允許它。 請參閱 使用商務用應用程控原則來控制特定外掛程式、載入巨集和模組

應用程控不會控制腳本透過非覺察型腳本主機執行,例如許多第三方 Java 或 Python 引擎。 如果您的應用程控原則允許執行未啟用的腳本主機,則您會隱含地允許所有腳本透過該主機執行。 對於非Microsoft腳本主機,您應該向軟體廠商確認其腳本主機是否已啟用應用程控原則。