我负责一组处理高度机密数据的计算机。它们无法连接到互联网,甚至无法连接到公司网络,只能连接到网络驱动器。因此,我在网络驱动器上编写了一个批处理文件,并在每台计算机上运行它,以一致地应用安全设置。
批处理文件netsh exec
使用以下脚本调用:
advfirewall
set store gpo = %COMPUTERNAME%
reset
set store local
reset
问题是环境变量%COMPUTERNAME%
无法解析为实际的计算机名称,因此 GPO 未重置,并且两个位置的设置之间存在冲突。此外,netsh advfirewall reset
仅重置local
存储,并且set store
只能从 netsh 脚本运行(netsh advfirewall set store gpo
批处理文件中的直接操作不起作用)。
如何set store
访问运行批处理文件的计算机的 GPO?或者是否有其他方法可以从命令行重置 GPO 设置(适用于高级安全 Windows 防火墙)?我了解这些设置未存储在 中Registry.pol
。
答案1
我怀疑您试图直接传递%COMPUTERNAME%
。netsh
它不会扩展环境变量。让 shell 为您扩展变量,如下所示:
@echo off
SET F="%TEMP%\%RANDOM%.txt"
echo advfirewall>%F%
echo set store gpo = %COMPUTERNAME%>>%F%
echo reset>>%F%
echo set store local>>%F%
echo reset>>%F%
netsh -f %F%
del %F%
netsh
最终得到一个已经包含扩展环境变量的脚本。