You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么PowerShell的dot source运算符会将字符串转换为可执行命令

点源运算符的行为逻辑

PowerShell的点源运算符.有两类完全不同的使用场景,很多人只熟悉第一种,才会对这种混淆代码感到困惑:

  1. 当.后接.ps1脚本文件路径、或者脚本块时,它会在当前作用域运行目标内容,把脚本内定义的变量、函数、别名都导入到当前作用域,这也是大家最熟悉的「点源导入」用法。
  2. 当.后接命令名称、命令表达式时,它的行为和调用运算符&完全一致:直接执行对应的命令,返回命令执行结果,不会做额外的作用域导入操作。

你碰到的混淆代码$ORMEFyak=.('n'+'ew-obje'+'ct') NeT.WebcLIENt;就属于第二种场景:括号内的字符串拼接结果是合法的cmdlet名称new-object,点源运算符会直接执行这个cmdlet,把后面的Net.WebClient作为参数传入,执行结果赋值给变量,最终效果和直接写$var = New-Object Net.WebClient没有任何区别。
同理. "help"的运行逻辑也是如此:help是合法的cmdlet名称,点源运算符直接执行该命令,自然返回help cmdlet的输出内容。

这种特性也是恶意PowerShell脚本常用的混淆手段,利用大家对点源运算符的认知盲区,隐藏真实的命令调用逻辑。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:57:05