我的 Windows 机器上发生了一件非常奇怪的事情。
不管我是否加载我的,启动时都会立即设置$profile
一个名为的变量。$item
powershell.exe
我执行了以下操作:
- 在调用
-noprofile
期间使用了开关。powershell.exe
- 审查了由 加载的所有 DLL
powershell.exe
,并验证没有 DLL 是通过AppInit_DLLs
键加载的。 - 我
powershell.exe
从另一台没有出现问题的机器上复制了一个版本。 - 我已经尝试作为另一个用户,并且该值仍然存在于该用户拥有的进程中。
- 我列举了
functions:
PSdrive - 我在流程资源管理器中查看了环境变量。
- 我已经查看了所有配置文件(在 中列出
$profile | select *
)
怎么可能$item
一开机就设置powershell.exe
?
我在使用版本22.1.2.217的Sentinel One XDR(例如 S1)时遇到了这个问题。它们将代码加载到会话中并污染全局变量命名空间。您可以在 Windows 中打开Powershell 日志记录以查看所有代码。我认为该功能称为agent.deepVisibility.scripts.powershell可以找到以Administrator身份运行命令行应用程序。以下是启用日志记录的摘录。
SentinelCtl configure
Github上的这个问题详细介绍了代码。此外,有关 S1 脚本的一般信息也在此存储库中。第三,可以在链接到Twitter线程的 Github评论中找到少量信息。以下是玷污用户变量命名空间的适用代码。
如果您想完全清除会话中的干扰,下面是一些代码。他们挂钩
$PSDefaultParameterValues
并减慢会话速度。此外,S1 中断了管道的使用Get-PSBreakpoint | Remove-PSBreakpoint
。