我在PowerShell 3中使用TabExpansion2,当我选择完成一个参数时,它会显示我想要的字符串,但包含在我不想要的语法中。
例如,当我在-binName
之后点击标签时:
Use-Bin -binName @{Name=5.0}
我需要的是:
Use-Bin -binName 5.0
我正在使用此脚本:https://www.powershellgallery.com/packages/PowerShellCookbook/1.3.6/Content/TabExpansion.ps1
使用这些调整后的选项:
$options["CustomArgumentCompleters"] = @{
"binName" = {Get-ChildItem -Path $global:TH_BinDir | Select-Object Name}
"dbName" = {Get-ChildItem -Path $global:TH_DBDir\RT5.7\ | Select-Object Name}
"patchSubDir" ={Get-ChildItem -Path $global:TH_BinDir\Patches\ | Select-Object Name}
"hmiSubDir" = {Get-ChildItem -Path $global:TH_HMIDir | Select-Object Name}
"moduleScript" = {Get-ChildItem -Path $global:TH_ModPaths | Select-Object Name}
"items" = {"bins", "databases", "modules"}
}
谢谢!
答案 0 :(得分:0)
我不熟悉tabexpansion,但问题是您要返回具有name
属性的对象。你想只返回字符串。
$options["CustomArgumentCompleters"] = @{
"binName" = {Get-ChildItem -Path $global:TH_BinDir | Select-Object -ExpandProperty Name}
"dbName" = {Get-ChildItem -Path $global:TH_DBDir\RT5.7\ | Select-Object -ExpandProperty Name}
"patchSubDir" ={Get-ChildItem -Path $global:TH_BinDir\Patches\ | Select-Object -ExpandProperty Name}
"hmiSubDir" = {Get-ChildItem -Path $global:TH_HMIDir | Select-Object -ExpandProperty Name}
"moduleScript" = {Get-ChildItem -Path $global:TH_ModPaths | Select-Object -ExpandProperty Name}
"items" = {"bins", "databases", "modules"}
}
由于你使用3.0,这将更简洁并完成同样的事情。
$options["CustomArgumentCompleters"] = @{
"binName" = {(Get-ChildItem -Path $global:TH_BinDir).Name}
"dbName" = {(Get-ChildItem -Path $global:TH_DBDir\RT5.7\).Name}
"patchSubDir" ={(Get-ChildItem -Path $global:TH_BinDir\Patches\).Name}
"hmiSubDir" = {(Get-ChildItem -Path $global:TH_HMIDir).Name}
"moduleScript" = {(Get-ChildItem -Path $global:TH_ModPaths).Name}
"items" = {"bins", "databases", "modules"}
}
这两种解决方案都可以通过扩展单个属性name
的字符串来实现。