简而言之:我的 PATH 环境变量有时只能在提升的会话中使用,有时则没问题;如何找出非管理员会话中损坏它的原因并防止它在将来发生?
例如,我启动 cmd.exe(或 PowerShell 提示符)并尝试 ping 服务器,然后收到可怕的'ping' is not recognized as an internal or external command, operable program or batch file.
消息。如果我尝试使用完整路径进行 ping,即c:\windows\system32\ping.exe
,它就可以正常工作。
问题是我的 PATH 是空的。即:
C:\Users\matt>set path
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\Users\matt>path
PATH=(null)
如果我打开提升的提示(即右键单击并“以管理员身份运行”),一切都会正常工作,并且我的 PATH 变量符合预期。
我已经知道路径长度限制为 2047 个字符。事实上,这原本是我的问题,后来我改正了。但对于非提升会话,我仍然会遇到零路径问题。普通会话有时有效,有时无效,但提升会话始终有效。
终止 explorer.exe 进程并通过任务管理器重新启动它有时会重置正常会话的路径,但有时我必须完全重新启动。
这种情况每周都会发生几次。我没有在事件日志中发现任何确凿的证据,甚至没有任何可疑的东西,而且很难猜测是什么导致了这个问题,因为当它发生时我不一定能注意到它。
这台计算机是域的成员,如果有区别的话。
我如何监视我的 PATH 变量并检测哪个进程和/或程序正在修改它? 这似乎不是一个持久的变化,因为注册表项不受影响,但显然有些东西在半随机地破坏非管理员会话,而且我没有进一步缩小根本原因的想法。