PowerShell 技能连载 - 动态生成 IntelliSense.

在设计 PowerShell 函数时,您可以通过添加智能参数完成 IntelliSense 来提高可用性。

要编写某个参数的 IntelliSense 自动完成,您可以使用动态生成 IntelliSense 列表的 PowerShell 代码来填充函数的每个参数。当然,您使用的代码应该能快速计算出结果,IntelliSense 才不会超时。

如果需要将方法(命令)添加到对象,请通过 Add-Member 添加它们:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function Get-MyLocalUser
{
#Content
param
(
[String]
[Parameter(Mandatory)]
[ArgumentCompleter({
# receive information about current state:
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)

Get-LocalUser |
ForEach-Object {
$name = $_.Name
$desc = $_.Sid # showing SID as QuickTip
[System.Management.Automation.CompletionResult]::new($name, $name, "ParameterValue", $desc)
}
})]
$UserName
)

"You chose $UserName"

}

运行代码后,在交互式控制台中键入:

1
PS> Get-MyLocalUser -UserName

-UnerName 后按下空格,IntelliSense 介入并显示所有本地用户名。当您选择一个 IntelliSense 项目时,QuickTip 会显示用户的 SID。

此智能参数完成在 [ArgumentCompleter()] 属性中定义。 它内部的代码生成了 CompletionResult 对象,每个对象对应一个 IntelliSense 列表项。

PowerShell 技能连载 - 动态生成 IntelliSense.

http://blog.vichamp.com/2022/01/06/dynamically-composed-intellisense/

作者

吴波

发布于

2022-01-06

更新于

2022-07-06

许可协议

评论