powershell 中 |I`E`X 是什么意思?

powershell 中 |I`E`X 是什么意思?

我正在编写一个查看恶意软件的 powershell 解释器。我有一些不知道如何解析的文本。它看起来像一个管道,但管道后面的内容对我来说没有意义,我正在修改的解释器无法处理。相关语句如下所示。

start-process($env:APPDATA+ '\mef.vbs')|I`E`X

我理解了 start-process 部分。只是管道我不太理解。`E 可能是转义符的反引号,但 `X 不在我见过的任何文档中。此外,它看起来不像是处理“start-process”输出的命令。那么,“|I`E`X”是什么?

答案1

iexInvoke-Expression。这里的两个反引号没有任何区别,只是稍微混淆了命令。iex将字符串作为表达式执行,甚至从管道执行。这Start-Process是一个启动进程的 cmdlet。

答案2

I`E`X是 PowerShell 命令的首字母缩写Invoke-Expression

答案3

它是一个别名,PowerShell 中有很多这样的别名。

您可以通过输入来查看所有内容

# Get named aliases
Get-Alias |
Out-GridView -PassThru -Title 'Available aliases'

或者具体一个...

Get-Alias -Name iex | Format-Table -AutoSize
# Results
<#
CommandType Name                     Version Source
----------- ----                     ------- ------
Alias       iex -> Invoke-Expression               
#>

Get-Alias -Definition Invoke-Expression | Format-Table -AutoSize
# Results
<#
CommandType Name                     Version Source
----------- ----                     ------- ------
Alias       iex -> Invoke-Expression 
#>

甚至属性和开关都有别名

# Get cmdlet / function parameter aliases
(Get-Command Get-ADUser).Parameters.Values |
where aliases |
select Name, Aliases |
Out-GridView -PassThru -Title '
Alias results for a given cmdlet or function.'

# Or get only populated parameter aliases
(Get-Command Get-ChildItem).Parameters.Values | 
Select-Object -Property Name, @{
    Name       = 'Aliases'
    Expression = {$PSitem.Aliases}
} | Where-Object -Property Aliases -NE $null

别名非常适合在控制台上进行交互,即使使用 ISE/VSCode,只要它是一次性代码即可。作为最佳实践,永远不要在脚本中使用别名。

• 别名的最佳实践 在 PowerShell 脚本中使用别名的最佳实践 https://devblogs.microsoft.com/scripting/best-practice-for-using-aliases-in-powershell-scripts https://devblogs.microsoft.com/scripting/using-powershell-aliases-best-practices

Why worry about aliases in the first place?

What is the big deal about using aliases anyway? If they make the code easier 
to type, what is the harm in using them in scripts? There are two things at 
work when it comes to a script. The first is that no alias is guaranteed to 
exist—even aliases that are created by Windows PowerShell.

仅供参考,当您在代码下载中看到 IEX/iex 时,大多数情况下它是恶意软件或一些恶作剧,正如您所发现的。

Invoke-Expression

This command takes any string and executes it as if it was a PowerShell command.
While this is very powerful and sometimes plain necessary, it imposes all risks
of so-called “SQL injection” security issues.

Avoid Invoke-Expression wherever you can, and of course, the example above was somewhat constructed. There was no need for composing string commands, and you
could have submitted the user input directly to the appropriate command
parameters

在极其有限的情形下才需要使用 IEX,并且您必须了解使用它的后果。

Invoke-Expression 被视为有害

始终注意其使用以及编码命令。启用完整的 PowerShell 日志记录和记录以接收警报并捕获这些内容进入您的环境。采取主动的基于策略的方法来处理其必然性。

相关内容