格式化选项卡参数完成powershell

时间:2016-06-10 22:11:07

标签: powershell powershell-v3.0 tabexpansion

我在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"}           
        }

谢谢!

1 个答案:

答案 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的字符串来实现。

相关问题