使用适用于企业的 App Control 执行脚本

注意

适用于企业的 App Control 的某些功能仅适用于特定 Windows 版本。 详细了解 应用控制功能可用性

重要提示

选项 11 Disabled:Script EnforcementWindows Server 2016Windows 10 1607 LTSB 上不受支持,不应在这些平台上使用。 这样做将导致意外的脚本强制行为。

脚本强制实施概述

默认情况下,为所有应用控制策略启用脚本强制,除非策略中设置了选项 11 Disabled:Script Enforcement 。 应用控制脚本强制实施涉及启发式脚本主机(如 PowerShell)和应用控件之间的握手。 但是,脚本主机会处理实际强制行为。 如果任何应用控制 UMCI 策略处于活动状态,某些脚本主机(如 Microsoft HTML 应用程序主机 (mshta.exe) )会阻止所有代码执行。 大多数脚本主机首先询问应用控件是否应根据当前处于活动状态的应用控制策略来运行脚本。 然后,脚本主机会阻止、允许或更改脚本的运行 方式 ,以最好地保护用户和设备。

使用 WinVerifyTrust API 对已签名脚本进行验证。 若要通过验证,签名根必须存在于设备上的受信任根存储中,并且应用控制策略必须允许它。 此行为不同于可执行文件的应用控制验证,后者不需要安装根证书。

应用控制共享 所有脚本强制事件的 AppLocker - MSI 和脚本 事件日志。 每当脚本主机询问应用控件是否应允许脚本时,都会记录事件,其中包含返回给脚本主机的“应用控制”答案。 有关应用控制脚本强制事件的详细信息,请参阅 了解应用控件事件

注意

当策略不允许的脚本运行时,应用控制会引发一个事件,指示脚本已被“阻止”。但是,实际的脚本强制行为由脚本主机处理,实际上可能不会完全阻止文件运行。

另请注意,即使应用控制策略仅处于审核模式,某些脚本主机也可能更改其行为方式。 应查看本文中的脚本主机特定信息,并在环境中全面测试,以确保需要运行的脚本正常工作。

属于 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脚本主机,应与软件供应商检查其脚本主机是否已启用应用控制策略。