不明白为什么我的启动 GPO 脚本无法正确执行 BCDEdit

不明白为什么我的启动 GPO 脚本无法正确执行 BCDEdit

环境:MS Server 2019 DC,Windows 10 工作站加入域。

这里的目标是将一组机器上的数据执行保护设置为 OptOut。通过命令行或 PowerShell 脚本执行此操作的方式如下:

Cmd: bcdedit.exe /set {current} nx OptOut

PS: bcdedit.exe /set "{current}" nx OptOut

我从这里获得了最初的指导: https://techraptor.net/technology/guides/enable-data-execution-prevention-dep-via-group-policy-or-bcdeditexe

在测试机上,我可以将其放入命令行或 PS 界面并正常运行 - 当我使用 BCDEdit /enum {current}(或 PowerShell 中的“{current}”)进行后续查询时,它会将 nx 显示为 OptOut。

当我尝试通过 GPO 将其变为域范围内的操作时,问题就出现了。在 GPO 上,它进入计算机 > Windows 设置 > 脚本(启动/关闭)。有两个选项卡,一个用于批处理文件,一个用于 PS 文件。我尝试使用两者,根据需要使用 PS1 文件或 .bat 文件,但似乎都无法成功执行 BCDEdit 命令 - 脚本文件就是上面给出的命令,没有其他内容。我尝试将相关脚本放入特定的 GPO 文件夹(GPO 编辑器方便地为您提供了一个按钮)和 SYSVOL\SCRIPTS 文件夹中,但这两种情况都无法完成工作。PowerShell 变体确实以“powershell set-execution policy unrestricted”作为 GPO 中的参数运行,就在您告诉 Windows 脚本所在的同一区域中(我也尝试过不使用它,但无济于事)。

如果我在应该获得此策略的机器上使用 RSOP,我发现它获取策略,RSOP 甚至会报告其“运行”的时间。设置确实不是但是,变成了 OptOut。查看该时间戳的事件日志似乎并未显示任何与 GPO 或脚本相关的错误。

我首先想到的是,这是有关文件夹的某种权限问题,但据我所知,这应该以 SYSTEM 身份运行 - 根据 Windows SYSTEM 对脚本文件具有“完全控制权”。我在这里所做的是向脚本添加第二行,该行仅使用 MKDIR 将一个空文件夹放在我正在测试的工作站上的管理员用户的桌面上。重新启动机器后,我看到 nx 仍然是默认的“OptIn”,而不是脚本指定的“OptOut”,但令人沮丧的是,我测试文件夹出现在桌面上,因此脚本确实运行了。

也就是说,我有一个脚本,其中包含一个命令,该命令可以手动运行,但由于我无法理解的原因,它无法自动运行。我有两个证据证明该脚本可以运行(时间戳和我告诉它要创建的文件夹)。它运行的文件夹的权限似乎完全有效,并且事件日志中没有任何明显的信息。如果必须的话,我可以手动完成所有操作,但这不是长期可行的,我想使用相同的技术来设置必须通过 CLI 完成的其他操作,以便这种体验可以延续下去 - 这似乎是最简单的了。

有人知道我哪里做错了吗?

答案1

确保您有等待网络连接的策略,因为我猜测您的计算机甚至在 NIC 完成初始化之前就评估缓存的 GPO,因此无法运行脚本。

计算机配置 > 管理模板 > 系统 > 登录。启用计算机启动和登录时始终等待网络

如果您无法启用该功能,请制作一个 GPP,将文件复制到计算机本地(即 c:\windows\temp),然后通过 GPO 推送一个计划任务,在启动时运行该脚本一次。

相关内容