本方案指南介绍如何使用 TroubleShootingScript (TSS) 收集数据,以排查组策略对象(GPO)映射网络驱动器未按预期应用的问题。
故障排除指南
在继续操作之前,请参阅 应用组策略故障排除指南。
环境
- 域名:
contoso.com
- Active Directory 站点:四个站点(每个站点有两个域控制器)(凤凰城、伦敦、东京和孟买)
- 域控制器数:8
- 域控制器操作系统:Windows Server 2019
- 客户端计算机操作系统:Windows 11 版本 22H2
本方案内容
在开始故障排除之前,下面是一些范围问题,可帮助我们了解情况并缩小问题原因:
什么是客户端和服务器操作系统?
答:客户端计算机是 Windows 11 版本 22H2,以及映射驱动器所在的文件服务器位于 Linux Server 上。如何配置组策略首选项?
答:我们有一个名为 Mapped-Drive 的 GPO,此 GPO 是使用组策略首选项映射驱动器扩展配置的。GPO 映射驱动器 范围内的所有用户是否受到影响?
答:我们已将此 GPO 配置为“IT 用户”组织单位(OU)。 我们用四到五个用户对其进行了测试。 对于所有这些驱动器,驱动器 Z 未映射。如果手动映射驱动器而不是使用组策略首选项,会发生什么情况?
答:可以使用命令将驱动器 Znet use
成功映射到同一文件服务器。此 GPO 是新的 GPO,还是 GPO 以前工作过?
答:此 GPO 在早期工作,所有用户都使用它来获取映射的驱动器。 自过去几天以来,映射的驱动器不起作用。运行
gpresult /h
并查看输出时,是否观察到 GPO 映射驱动器 位于适用的列表中?
答:是的,我们确实观察到 映射驱动器 GPO 在适用的列表中应用。是否已为用户或组配置任何安全筛选、WMI 筛选器或设置任何拒绝(应用)设置?
答:GPO 是使用默认设置设置的,从安全筛选、WMI 筛选器或设置任何拒绝权限的角度,不会对 GPO 进行任何更改。
故障排除
首先,收集以下数据进行故障排除。 由于我们需要跟踪登录或登录,因此需要以本地管理员或任何其他具有本地管理员凭据的用户帐户执行以下任务。
注意
这些步骤需要快速用户切换才能启用。 如果在尝试切换用户时遇到问题,请检查是否已设置以下策略或注册表值:
- 组策略:在计算机配置\管理模板\系统\登录下隐藏快速用户切换组策略的入口点。
- 注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
. - 注册表值:
HideFastUserSwitching
下载 TSS 并将 ZIP 文件解压缩到 C:\temp 文件夹。 如果文件夹不存在,请创建该文件夹。
打开提升的 PowerShell 命令并运行以下命令:
Set-ExecutionPolicy unrestricted
转到 c:\temp\TSS,在其中提取了 TSS Zip 文件。
运行
.\TSS.ps1 -Start -Scenario ADS_GPOEx -Procmon
。 接受协议,并等待 TSS 开始收集数据。切换用户,然后使用看不到驱动器 Z 映射的用户帐户登录。
登录成功后,打开命令提示符并运行
gpresult /h appliedgpo.htm
。 确认 GPO 映射驱动器 位于适用的列表中。再次切换用户,然后使用已启动 TSS 日志记录的用户帐户登录。 按 Y。
TSS 将停止收集数据,收集的数据将作为 Zip 文件或名为 TSS_Machinename>_<Time> 的文件夹位于 C:\MSDATA 文件夹中_ADS_GPOEx<。
有关 TSS 的详细信息,请参阅 TroubleShootingScript 工具集(TSS)简介。
数据分析
转到 TSS 保存所有报表的 c:\msdata 文件夹,然后提取 ZIP 文件的内容。 查看名为 <Client_machinename-Time<>>_Microsoft-Windows-GroupPolicy-Operational.evtx 的文件。
启动事件 4001
显示“用户”OU 的事件 5017
GPO 映射驱动器 链接到“用户”OU。
显示适用 GPO 列表的事件 5312
我们确实看到 GPO 映射驱动器 位于适用的列表中。
显示组策略驱动器映射扩展已处理并成功的事件 4016
组策略首选项跟踪
从组策略操作日志中,我们观察到已处理组策略并成功应用组策略首选项。 除了上述内容,我们还可以查看 TSS 工具收集的组策略首选项日志记录/跟踪。
组策略首选项跟踪是一项额外的日志记录,我们可以为任何组策略首选项客户端扩展启用这些日志记录。 默认情况下启用 TSS GPOEx 跟踪。
注意
如果想要手动启用 GPSVC 日志记录,请按照使用 RSAT 启用组策略首选项调试日志记录操作。
在这里,我们将介绍如何查看和搜索 GPSVC 日志,以确认组策略已成功应用于客户端。
在 <Clientmachinename>_<Date_Time>_GPPREF_User.txt 中,我们观察到 GPP 映射驱动器扩展正在启动处理。
注意
出于简洁性和可读性目的,分析仅包含相关故障排除数据的片段,而不包含日志中的所有数据。
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Entering ProcessGroupPolicyExDrives()
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] SOFTWARE\Policies\Microsoft\Windows\Group Policy\{5794DAFD-BE60-433f-88A2-1A31939AC01F}
组策略映射驱动器扩展标识了使用此扩展配置的 GPO,名称为 Mapped-Drive:
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] GPC : LDAP://CN=User,cn={6D6CECFD-C75A-43FA-8C32-0B5963E42C5B},cn=policies,cn=system,DC=contoso,DC=com
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] GPT : \\contoso.com\SysVol\contoso.com\Policies\{6D6CECFD-C75A-43FA-8C32-0B5963E42C5B}\User
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] GPO Display Name : Mapped-Drive
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] GPO Name : {6D6CECFD-C75A-43FA-8C32-0B5963E42C5B}
我们观察到驱动器 Z 已成功映射:
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Starting class <Drive> - Z:.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Policy is not flagged for removal.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Completed class <Drive> - Z:.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Completed class <Drives>.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] EVENT : The user 'Z:' preference item in the 'Mapped-Drive {6D6CECFD-C75A-43FA-8C32-0B5963E42C5B}' Group Policy Object applied successfully.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Completed class <Drive> - Z:.
yyyy-mm-dd hh:mm::ss:sss [pid=0x3134,tid=0x4fc] Completed class <Drives>
使用 procmon 查找删除驱动器 Z 的过程
目前,我们知道已应用组策略首选项,但驱动器 Z 不可见。 我们可以手动映射驱动器,但在登录或登录期间会删除该驱动器。 因此,登录期间,计算机上还有其他一些删除驱动器 Z 的设置。
接下来,我们需要分析 procmon 跟踪,观察已删除的映射驱动器的内容。 TSS 工具还使用 -Procmon
用于收集数据的开关收集 procmon 跟踪。
procmon 跟踪可能是压倒性的。 按照以下步骤设置筛选器以查看数据。 该筛选器可用于排查与映射驱动器相关的任何问题。
打开 File <Clientmachinename>_<date_time>_Procmon_0.pml。
选择“筛选器 - 筛选器”。
添加筛选器:详细信息 - 包含 - Z:。
筛选器的输出显示两个进程: cmd.exe 和 net.exe。
双击 net.exe ,然后转到 包含以下参数的“进程 ”选项卡:
- 命令行:映射驱动器的删除操作。
- 父 PID:net.exe的父进程为 13436。
- 用户:运行此进程的上下文的用户的名称。 在我们的示例中,它是用户帐户本身。
然后,设置另一个筛选器,以识别使用父进程筛选器生成net.exe的人员。
转到 “筛选器 - 筛选器 ”,然后选择“ 重置”。
现在,使用父级的 PID 应用以下筛选器。
我们观察到 PID cmd.exe,并且它似乎正在处理具有以下参数的 GPO:
- 命令行:
C:\Windows\system32\cmd.exe /c "\contoso.com\SysVol\contoso.com\Policies{E347CA05-D21D-433D-9BCA-2FE555336749}\User\Scripts\Logon\deletedrives.bat"
- 父 PID:cmd.exe的父进程为 14900。
- 用户:运行此进程的上下文的用户的名称。 在我们的示例中,它是用户本身。
现在,通过转到筛选 - 筛选器、选择“重置”并应用以下筛选器,再次使用相同的机制和 PID 筛选器:
我们观察到,GPScrpit.exe是cmd.exe进程的父进程。 使用此提示,我们观察到存在删除映射驱动器的组策略脚本。
总结
Net.exe正在删除映射的驱动器,其父进程cmd.exe。 执行以下命令:
net use z: /delete
CMD.exe正在处理.bat文件deletedrives.bat,其父进程GPScript.exe。
C:\Windows\system32\cmd.exe /c "\contoso.com\SysVol\contoso.com\Policies{E347CA05-D21D-433D-9BCA-2FE555336749}\User\Scripts\Logon\deletedrives.bat"
GPScript.exe是在登录过程中运行的进程,用于处理任何登录脚本。
我们需要标识包含此登录脚本的 GPO。 下面是两种方法。
方法 1:使用日志收集期间收集的 Gpresult /h 输出
方法 2:使用组策略管理管理单元 (GPMC.msc)
在安装了管理单元的域控制器或计算机上打开 GPMC.msc 。
右键单击域,然后选择“ 搜索”。
在搜索项中,选择 GUID,然后输入我们在 cmd.exe 命令中找到的 GPO GUID。
我们发现 DomainWideSettings GPO 具有登录脚本。
如果不希望 DomainWideSettings GPO 删除映射的驱动器,请使用以下方法之一:
- 从 GPO DomainWideSettings 中删除登录脚本,因为此 GPO 用于配置其他域范围的设置。
- 完全取消链接 GPO DomainWideSettings 。
- 在用户对象所在的“用户”OU 上设置“阻止策略继承”。
- 为 GPO DomainWideSettings 上的“用户”组设置拒绝“应用 GPO”。