PowerShell 技能连载 - 命令发现机制揭秘(第 1 部分)

当您在 PowerShell 键入一个命令,将触发一系列事件来指定命令所在的位置。这从 PreCommandLookupAction 开始,您可以用它来记录日志。请看如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
param
(
[string]
$Command,

[Management.Automation.CommandLookupEventArgs]
$Obj
)
$whitelist = @(
'prompt',
'out-default',
'psconsolehostreadline',
'Microsoft.PowerShell.Core\Set-StrictMode'
)

if ($Command -notin $whitelist -and $Obj.CommandOrigin -eq 'Runspace')
{
$host.UI.WriteLine('Yellow','White',$Command)
}
}

当您运行这段代码,所有键入的命令都将回显到控制台中——除了白名单中列出命令。这演示了 PreCommandLookupAction 的工作方式:每当您键入一条命令时,将自动触发它,而且您也可以将命令写入一个日志文件。

PowerShell 技能连载 - 命令发现机制揭秘(第 1 部分)

http://blog.vichamp.com/2019/04/16/command-discovery-unleashed-part-1/

作者

吴波

发布于

2019-04-16

更新于

2022-07-06

许可协议

评论